配置网卡中断绑核
目的
- 每个CPU对应一个网卡,每个CPU内的中断绑核只绑在属于本CPU的网卡上,按node各自绑核。
- 中断个数在尽量少的情况下满足当前所有业务core在客户端满压下满CPU运作即可。
- 容器在使用主机网络共享和IPVlan网络两种网络方式下使用同样的绑核脚本,且都是在物理机上执行绑核脚本。
方法
- 关闭irqbalance。
1 2 3
systemctl stop irqbalance.service systemctl disable irqbalance.service systemctl status irqbalance.service
- 网卡中断绑核,绑定的核专门用于处理网卡中断。
以4core的HTTP短连接场景的绑核脚本为例,如果要修改绑核脚本,只需修改要绑定的网口名eth1以及网卡队列深度cnt。
- 新建脚本。
1
vim irq_http_4core.sh
- 按“i”进入编辑模式,添加绑核脚本内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#!/bin/bash # filename: irq_http_4core.sh cnt=2 eth1=enp3s0 ethtool -L $eth1 combined $cnt irq1=`cat /proc/interrupts| grep -E ${eth1} | head -1 | awk -F ':' '{print $1}'` irq1=`echo $irq1` i=0 while(( $i < 1)) do for cpunum in 2 3 do echo $cpunum "->" $irq1 echo $cpunum > /proc/irq/$irq1/smp_affinity_list let "irq1++" done let "i++" done
脚本参数及命令说明如表1所示。
表1 参数及命令说明 参数及命令名称
说明
cnt
设置网口队列数:cnt为变量,2为队列数。
eth1
设置通信中使用的网口名:eth1为变量,enp3s0为网口名。
irq1
网口eth1对应的中断号:irq1为变量。
cpunum
分配给网口eth1用于处理网卡中断的核,cpunum为变量。
ethtool -L $eth1 combined $cnt
设置队列数为核数。
cat /proc/interrupts | grep $eth1 | awk -F ':' '{print $1}'
查询网口中断号。
echo $cpunum > /proc/irq/$irq/smp_affinity_list
根据中断号,将每个中断各绑定在一个核上。
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 执行脚本。
1
sh irq_http_4core.sh
- 新建脚本。
父主题: 操作系统调优