前言
相比使用内核的irqbalance使网卡中断在所有核上进行调度,使用手动绑核将中断固定住CPU能有效提高业务网络收发包的能力。
irq 亲缘绑定
/proc/irq/[irq_num]/smp_affinity_list 可以查看指定中断当前绑定的CPU核 /proc/interrupts 文件中可以看到CPU上的中断情况 /proc/irq/[irq_num]/smp_affinity_list 为中断号为IRQ_NUM的中断绑定的CPU核的情况
网卡绑定
手动将网卡中断手动绑定到CPU
- 关闭irqbalance
systemctl stop irqbalance.service
systemctl disable irqbalance.service
查看irqbalance服务状态是否已关闭
systemctl status irqbalance.service
- cat /proc/interrupts | egrep "input|output|CPU" 查看网卡队列中断号,如下截图为63 、64、65、66
- 将中断63-66 绑定到CPU 1 上
echo 1 > /proc/irq/63/smp_affinity_list
echo 1 > /proc/irq/64/smp_affinity_list
echo 1 > /proc/irq/65/smp_affinity_list
echo 1 > /proc/irq/66/smp_affinity_list
/proc/irq/[irq_num]/smp_affinity
:该文件存放的是 CPU 位掩码(十六进制)。
/proc/irq/[irq_num]/smp_affinity_list
:该文件存放的是 CPU 列表(十进制)。注意:CPU 核心个数用表示编号从 0 开始,如 CPU0, CPU1 等。
- 验证,此时网卡中断将只在CPU1上
# 持续收发包,比如ping
# cat /proc/interrupts | egrep "input|output|CPU" #保留结果
# cat /proc/interrupts | egrep "input|output|CPU" #过几秒后再执行
# 检查CPU1 上数量持续增长,CPU0无增长则表示绑定成功
如果您有其他问题,欢迎您联系火山引擎技术支持服务