目的:

相比使用内核的irqbalance使网卡中断在所有核上进行调度,使用手动绑核将中断固定 住能有效提高业务网络收发包的能力。

方法:

步骤1 关闭irqbalance。
若要对网卡进行绑核操作,则需要关闭irqbalance。
1.停止irqbalance服务,重启失效。

systemctl stop irqbalance.service 

2.关闭irqbalance服务,永久有效。

systemctl disable irqbalance.service 

3.查看irqbalance服务状态是否已关闭。

systemctl status irqbalance.service

步骤2 查看网卡pci设备号,假设当前网卡名为enp5s0。

ethtool -i enp5s0

在这里插入图片描述
步骤3 查看pcie网卡所属NUMA node。

lspci -vvvs <bus-info>

在这里插入图片描述
步骤4 查看NUMA node对应的core的区间,例如此处就可以绑到0~23。

lscpu

在这里插入图片描述
步骤5 查看网卡队列数

ethtool -l enp5s0

在这里插入图片描述
步骤6 进行中断绑核,该网卡共有16个队列,将这些中断逐个绑至所在NumaNode的16个Core上(例如此处就是绑到NUMA node0对应的0-23上面)。

bash smartIrq.sh

脚本内容如下:

#!/bin/bash
irq_list=(`cat /proc/interrupts | grep enp5s0 | awk -F: '{print $1}'`)

cpunum=0
for irq in ${irq_list[@]}
do
echo $cpunum > /proc/irq/$irq/smp_affinity_list
echo `cat /proc/irq/$irq/smp_affinity_list`
(( cpunum+=1 ))
done

步骤7 利用脚本查看是否绑核成功。

sh irqCheck.sh enp5s0
#!/bin/bash
intf=$1
log=irqSet-`date "+%Y%m%d-%H%M%S"`.log

cpuNum=$(cat /proc/cpuinfo | grep processor -c)

irqListRx=$(cat /proc/interrupts | grep ${intf} | awk -F: '{print $1}')
irqListTx=$(cat /proc/interrupts | grep ${intf} | awk -F: '{print $1}')

for irqRX in ${irqListRx[@]}
do
cat /proc/irq/${irqRX}/smp_affinity_list
done

for irqTX in ${irqListTx[@]}
do
cat /proc/irq/${irqTX}/smp_affinity_list
done

其他方式绑核:

对于有些网卡可能不适用,可以选择手动方式进行中断绑核
1、查看网卡通道数:

ethtool -l ethx   # 查看网卡通道数
# ethtool -L ethx combined 2 该命令修改网卡队列数

该网卡队列为32
在这里插入图片描述
2、查看网卡中断号

cat /proc/interrupts|grep $(ethtool -i ethx |awk 'NR==5'|awk '{print $2}')|awk '{print $1$(NF)}'

enp189s0f0对应中断号为597~628
在这里插入图片描述
3、查看网卡所在numa_node

cat /sys/class/net/ethx/device/numa_node

enp189s0f0在numa 2 core上
在这里插入图片描述
4、将enp189s0f0上所有的中断绑定到numa 2 core上

echo 48 > /proc/irq/597/smp_affinity_list
echo 49 > /proc/irq/598/smp_affinity_list
echo 50 > /proc/irq/599/smp_affinity_list
echo 51 > /proc/irq/600/smp_affinity_list
echo 52 > /proc/irq/601/smp_affinity_list
echo 53 > /proc/irq/602/smp_affinity_list
echo 54 > /proc/irq/603/smp_affinity_list
echo 55 > /proc/irq/604/smp_affinity_list
echo 56 > /proc/irq/605/smp_affinity_list
echo 57 > /proc/irq/606/smp_affinity_list
echo 58 > /proc/irq/607/smp_affinity_list
echo 59 > /proc/irq/608/smp_affinity_list
echo 60 > /proc/irq/609/smp_affinity_list
echo 61 > /proc/irq/610/smp_affinity_list
echo 62 > /proc/irq/611/smp_affinity_list
echo 63 > /proc/irq/612/smp_affinity_list
echo 64 > /proc/irq/613/smp_affinity_list
echo 65 > /proc/irq/614/smp_affinity_list
echo 66 > /proc/irq/615/smp_affinity_list
echo 67 > /proc/irq/616/smp_affinity_list
echo 68 > /proc/irq/617/smp_affinity_list
echo 69 > /proc/irq/618/smp_affinity_list
echo 70 > /proc/irq/619/smp_affinity_list
echo 71 > /proc/irq/620/smp_affinity_list

此时numa core不够,需要一个core绑定两个中断

echo 48 > /proc/irq/621/smp_affinity_list
echo 49 > /proc/irq/622/smp_affinity_list
echo 50 > /proc/irq/623/smp_affinity_list
echo 51 > /proc/irq/624/smp_affinity_list
echo 52 > /proc/irq/625/smp_affinity_list
echo 53 > /proc/irq/626/smp_affinity_list
echo 54 > /proc/irq/627/smp_affinity_list
echo 55 > /proc/irq/628/smp_affinity_list

5、查看是否绑核成功

cat /proc/irq/597/smp_affinity_list
cat /proc/irq/598/smp_affinity_list
cat /proc/irq/599/smp_affinity_list
cat /proc/irq/600/smp_affinity_list
cat /proc/irq/601/smp_affinity_list
cat /proc/irq/602/smp_affinity_list
cat /proc/irq/603/smp_affinity_list
cat /proc/irq/604/smp_affinity_list
cat /proc/irq/605/smp_affinity_list
cat /proc/irq/606/smp_affinity_list
cat /proc/irq/607/smp_affinity_list
cat /proc/irq/608/smp_affinity_list
cat /proc/irq/609/smp_affinity_list
cat /proc/irq/610/smp_affinity_list
cat /proc/irq/611/smp_affinity_list
cat /proc/irq/612/smp_affinity_list
cat /proc/irq/613/smp_affinity_list
cat /proc/irq/614/smp_affinity_list
cat /proc/irq/615/smp_affinity_list
cat /proc/irq/616/smp_affinity_list
cat /proc/irq/617/smp_affinity_list
cat /proc/irq/618/smp_affinity_list
cat /proc/irq/619/smp_affinity_list
cat /proc/irq/620/smp_affinity_list
cat /proc/irq/621/smp_affinity_list
cat /proc/irq/622/smp_affinity_list
cat /proc/irq/623/smp_affinity_list
cat /proc/irq/624/smp_affinity_list
cat /proc/irq/625/smp_affinity_list
cat /proc/irq/626/smp_affinity_list
cat /proc/irq/627/smp_affinity_list
cat /proc/irq/628/smp_affinity_list
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐