---
title: 网卡绑核调优
description: "通过将网卡中断绑定在固定的几个CPU核心上，可以降低CPU频繁调度带来的性能损耗，从而有更多的时间去处理业务。以下的绑核策略经过多次调整以及测试得出，在EC小块读写的场景下性能提升较为明显，且不影响大块读写。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2400/sds/kunpengecturbo_02_0012.html
sourcePath: /source/zh/kunpengboostkithistory/2400/sds/kunpengecturbo_02_0012.html
indexId: cecbcf92914fa694cb7391cf9887277139704895f553b1edbdef2cbb78f75fea70
---
# 网卡绑核调优

通过将网卡中断绑定在固定的几个CPU核心上，可以降低CPU频繁调度带来的性能损耗，从而有更多的时间去处理业务。以下的绑核策略经过多次调整以及测试得出，在EC小块读写的场景下性能提升较为明显，且不影响大块读写。

1. 关闭irqbalance。
  1 2 3 systemctl stop irqbalance.service systemctl disable irqbalance.service systemctl status irqbalance.service

2. 新建绑核脚本目录。
  1 mkdir /home/bind_net

3. 查看Public Network与Cluster Network的网卡名称。
  1 ip a

  在终端输入命令后，Public Network（192.168.3.166）对应的网卡名称为enp1330f1，Cluster Network（192.168.4.166）对应的网卡名称为enp1330f2。

4. 搜索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}'

5. 创建绑核脚本。

  a. 新建脚本bind_net_intterrupt.sh。
    1 vim bind_net_intterrupt.sh

  b. 键入以下内容。
    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核心上。

6. 执行绑核脚本。
  1 sh bind_net_intterrupt.sh

7. 执行4k块写测试用例，详细步骤请参考测试指导。
  网络集中运行在每个NUMA的前四个CPU核心上。
