确认网卡中断是否绑定需先查 /proc/interrupts 中对应网卡行,若某列计数显著集中则已绑核;再用 cat /proc/irq/n/smp_affinity_list 验证亲和性,如输出 0 表示仅 cpu0 处理;必须先停用 irqbalance 服务,否则手动绑定会被覆盖。

怎么确认当前网卡中断是否已绑定
直接看 /proc/interrupts 里对应网卡的行,再查各列计数是否集中在某几个 CPU 上。比如执行:cat /proc/interrupts | grep -E 'eth0|enp'
输出类似:
25: 1234567 0 0 0 0 0 0 0 IR-PCI-MSI eth0-TxRx-0<br>26: 0 987654 0 0 0 0 0 0 IR-PCI-MSI eth0-TxRx-1
第一列是中断号(25、26),后面每列代表该中断在对应 CPU(CPU0、CPU1…)上的处理次数。如果只有某一列数字很大,其余全为 0,说明已绑核;如果多列都有增长,说明还在轮转。
再验证亲和性设置:cat /proc/irq/25/smp_affinity_list
输出 0 表示只允许 CPU0 处理;0-3 表示允许 CPU0~3;0,2 表示只允许 CPU0 和 CPU2 —— 注意这里用的是 CPU 编号列表,不是十六进制掩码。
为什么必须先停掉 irqbalance
irqbalance 是个动态负载均衡服务,它会定期扫描并重分配中断亲和性。你刚写完 echo 0 > /proc/irq/25/smp_affinity_list,几秒后它可能就给你改回 0-7。所以这步不是“建议”,是硬性前提。
- 停服务:
sudo systemctl stop irqbalance - 禁开机自启:
sudo systemctl disable irqbalance - 验证是否生效:
systemctl is-active irqbalance应返回inactive
CentOS 7 默认启用 irqbalance,不关它,所有手动绑定都会失效。虚拟机里也一样,别信“我只绑一次就够了”。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
怎么把 eth0 的两个队列分别绑到 CPU0 和 CPU1
先查网卡有多少硬件队列:ethtool -l eth0 | grep "Current hardware"
常见输出:Current hardware settings: rx: 2, tx: 2, other: 0 → 共 4 个队列,但通常 TxRx 成对出现,eth0-TxRx-0 和 eth0-TxRx-1 就是你要绑的两个主中断。
再从 /proc/interrupts 找对应中断号(比如 25 和 26),然后:
- 绑定输入队列到 CPU0:
echo 0 | sudo tee /proc/irq/25/smp_affinity_list - 绑定输出队列到 CPU1:
echo 1 | sudo tee /proc/irq/26/smp_affinity_list
注意:smp_affinity_list 接受的是 CPU 编号(十进制整数或范围),不是十六进制掩码。别用 smp_affinity(老内核用的掩码接口),CentOS 7.6+ 默认用 smp_affinity_list,否则写进去没反应。
怎么让绑定永久生效
写入 /proc/irq/*/smp_affinity_list 是运行时生效,重启就丢。要持久化,得靠 systemd 服务或内核启动参数。
- 推荐做法:写一个 systemd service,在 network-online.target 之后执行绑定脚本
- 脚本内容示例(存为
/usr/local/bin/irq-bind-eth0.sh):#!/bin/bash<br>echo 0 > /proc/irq/$(grep -m1 "eth0-TxRx-0" /proc/interrupts | awk '{print $1}' | sed 's/://')/smp_affinity_list<br>echo 1 > /proc/irq/$(grep -m1 "eth0-TxRx-1" /proc/interrupts | awk '{print $1}' | sed 's/://')/smp_affinity_list - 配套 service 文件(
/etc/systemd/system/irq-bind.service)需包含Type=oneshot和WantedBy=multi-user.target
别依赖 /etc/rc.local:CentOS 7 默认不执行它,除非你手动启用 rc-local service。也别改 GRUB 加 isolcpus —— 那是隔离 CPU 调度用的,和中断绑定是两回事,混用反而容易出错。










