配置网卡中断绑核
目的
相比使用内核的irqbalance使网卡中断在所有核上进行调度,使用手动绑核将中断固定住能有效提高业务网络收发包的能力。
方法
- 关闭irqbalance。
若要对网卡进行绑核操作,则需要关闭irqbalance。
- 停止irqbalance服务,重启失效。
1
systemctl stop irqbalance.service
- 关闭irqbalance服务,永久有效。
1
systemctl disable irqbalance.service
- 查看irqbalance服务状态是否已关闭。
- 停止irqbalance服务,重启失效。
- 查看网卡PCI设备号,假设当前网卡名为enp131s0。
1
ethtool -i enp131s0
- 查看PCIe网卡所属NUMA node。
1
lspci -vvvs <bus-info>
- 查看NUMA node对应的core的区间,例如此处就可以绑到48~63。
1
lscpu
- 进行中断绑核,1822网卡共有16个队列,将这些中断逐个绑至所在NumaNode的16个Core上(例如此处就是绑到NUMA node1对应的48~63上面)。
- 创建脚本。
1
vi smartIrq.sh
- 按“i”进入编辑模式,在文件中添加以下内容。
1 2 3 4 5 6 7 8 9
#!/bin/bash irq_list=(`cat /proc/interrupts | grep enp131s0 | awk -F: '{print $1}'`) cpunum=48 # 修改为所在node的第一个Core 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
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 进行中断绑核。
1
bash smartIrq.sh
- 创建脚本。
- 利用脚本查看是否绑核成功。
- 创建脚本。
1
vi irqCheck.sh
- 按“i”进入编辑模式,在文件中添加以下内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#!/bin/bash # 网卡名 intf=$1 log=irqSet-`date "+%Y%m%d-%H%M%S"`.log # 可用的CPU数 cpuNum=$(cat /proc/cpuinfo |grep processor -c) # RX TX中断列表 irqListRx=$(cat /proc/interrupts | grep ${intf} | awk -F':' '{print $1}') irqListTx=$(cat /proc/interrupts | grep ${intf} | awk -F':' '{print $1}') # 绑定接收中断rx irq for irqRX in ${irqListRx[@]} do cat /proc/irq/${irqRX}/smp_affinity_list done # 绑定发送中断tx irq for irqTX in ${irqListTx[@]} do cat /proc/irq/${irqTX}/smp_affinity_list done
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 查看是否绑核成功。
- 创建脚本。
父主题: 硬件优化