网卡绑核调优
通过将网卡中断绑定在固定的几个CPU核心上,可以降低CPU频繁调度带来的性能损耗,从而有更多的时间去处理业务。以下的绑核策略经过多次调整以及测试得出,在EC小块读写的场景下性能提升较为明显,且不影响大块读写。
- 关闭irqbalance。
1 2 3
systemctl stop irqbalance.service systemctl disable irqbalance.service systemctl status irqbalance.service
- 新建绑核脚本目录。
1
mkdir /home/bind_net
- 查看Public Network与Cluster Network的网卡名称。
1
ip a
- 搜索Public Network与Cluster Network对应网卡的中断号信息。
1 2
cat /proc/interrupts |grep enp133s0f1 | awk '{print $1}' | awk -F ':' '{print $1}' cat /proc/interrupts |grep enp133s0f2 | awk '{print $1}' | awk -F ':' '{print $1}'
- 上述命令中的enp133s0f1与enp133s0f2分别对应的是Public Network与Cluster Network对应的网卡名称,若输入命令后没有信息打印,则该网卡不支持直接通过网卡名称获取中断号,需要通过网卡bus信息获取对应的中断号。
- 终端输入命令ethtool -i ”网卡名称”获取对应的网卡bus信息。
如上图所示enp133s0f0np0网卡的bus信息是0000:85:00.0,将网卡名称替换为bus信息来获取对应的中断号。
1
cat /proc/interrupts |grep 0000:85:00.0 | awk '{print $1}' | awk -F ':' '{print $1}'
- 创建绑核脚本。
- 新建脚本bind_net_intterrupt.sh。
1
vim bind_net_intterrupt.sh
- 键入以下内容。
1 2 3 4 5
arr=(0 1 2 3 32 33 34 35 64 65 66 67 96 97 98 99) idx=0;for i in `cat /proc/interrupts |grep enp133s0f1 | awk '{print $1}' | awk -F ':' '{print $1}'`;do echo ${arr[$idx]} > /proc/irq/${i}/smp_affinity_list;((idx=(idx+1)%16));echo $idx;done arr=(0 1 2 3 32 33 34 35 64 65 66 67 96 97 98 99) idx=0;for i in `cat /proc/interrupts | grep enp133s0f2 | awk '{print $1}' | awk -F ':' '{print $1}'`;do echo ${arr[$idx]} > /proc/irq/${i}/smp_affinity_list;((idx=(idx+1)%16));echo $idx;done
- 上述脚本中的enp133s0f1与enp133s0f2要根据4的结果进行调整,若可以通过网卡名称直接获取中断号则无需改动,若无法通过网卡名称获取,则请将网卡名称替换为其对应的网卡bus。
- arr数组中列举的是每个NUMA的前四个CPU核心,找出网卡中的所有中断,并将其绑定到列举的CPU核心上。
- 新建脚本bind_net_intterrupt.sh。
- 执行绑核脚本。
1
sh bind_net_intterrupt.sh
- 执行4k块写测试用例,详细步骤请参考测试指导。
网络集中运行在每个NUMA的前四个CPU核心上。
父主题: 调优指南