nmcli不提供irq信息,需通过/proc/interrupts、ethtool、ip等命令分四步查看并优化万兆网卡中断亲和性:查网卡名与irq号、统计cpu中断分布、检查smp_affinity_list绑定、调整至多核分担。

nmcli 本身不提供硬件中断(IRQ)分配信息,它专用于网络连接配置与状态管理(如IP、DNS、连接启停),和底层中断调度无关。想查看万兆网卡的硬件中断分配详情并优化多核负载,需绕过 nmcli,直接使用内核暴露的中断接口配合辅助工具。
下面分四步说明实际可行的操作路径:
查万兆网卡名称和对应 IRQ 编号
先确认你的万兆网卡设备名(如 enp5s0f0、ib0、mlx5_0 等),再定位其使用的中断号:
# 列出所有网卡及驱动信息(重点关注 Speed 或 driver 字段)
ethtool -i eth0 2>/dev/null | grep -E "(driver|firmware|version|bus-info)"
# 或更通用:找带 "10000"、"40000"、"10G"、"100G" 的接口
ip -br a | awk '$3 ~ /10000|40000|10G|100G/ {print $1}'
# 根据网卡名反查 IRQ 编号(输出类似 "128:" 行)
grep -i "enp5s0f0\|mlx5_0" /proc/interrupts | head -5
✅ 提示:万兆卡常见于
mlx5_(Mellanox)、ixgbe(Intel X5xx)、i40e(Intel XL710)等驱动,/proc/interrupts中设备列会显示eth0、enpXsYfZ或具体驱动名(如mlx5_comp)。
查该网卡各中断在 CPU 上的分布统计
执行以下命令,观察不同 CPU 核上中断计数是否严重倾斜:
# 实时监控(每秒刷新前20行,聚焦你关心的网卡) watch -n 1 'cat /proc/interrupts | grep -i "enp5s0f0\|mlx5_0" | head -15' # 示例输出解读: # 128: 1245678 902345 0 0 PCI-MSI 1245296-edge enp5s0f0 # 表示 IRQ 128 在 CPU0 触发约124万次,CPU1 约90万次,CPU2/CPU3 为 0 → 明显不均衡
查当前 IRQ 绑定的 CPU 掩码(亲和性设置)
对每个相关 IRQ 号(如 128、129…),读取其 smp_affinity_list(人眼友好,十进制 CPU 编号):
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
# 批量查 enp5s0f0 相关 IRQ 的绑定 CPU 列表
for irq in $(grep -i enp5s0f0 /proc/interrupts | awk '{print $1}' | sed 's/://'); do
echo "IRQ $irq → $(cat /proc/irq/$irq/smp_affinity_list 2>/dev/null)";
done 2>/dev/null
✅ 输出如
IRQ 128 → 0,1表示该中断可在 CPU0 和 CPU1 上处理;若只写0,则全部压在单核,是性能瓶颈主因。
调整中断亲和性以实现多核分担
⚠️ 注意:修改前建议关闭 irqbalance(否则会被自动覆盖):
sudo systemctl stop irqbalance sudo systemctl disable irqbalance # 如需永久禁用
然后为每个 IRQ 设置目标 CPU(例如将 IRQ 128 分配到 CPU2 和 CPU3):
# 方法一:用 smp_affinity_list(推荐,无需换算十六进制) echo "2,3" | sudo tee /proc/irq/128/smp_affinity_list # 方法二:用 smp_affinity(需十六进制掩码,x86_64 下 CPU2=0x4, CPU3=0x8 → 合并为 0xc) echo "c" | sudo tee /proc/irq/128/smp_affinity
✅ 验证是否生效:
# 修改后立即观察 /proc/interrupts 计数是否开始在新 CPU 上增长 watch -n 0.5 'cat /proc/interrupts | grep "128:"'
不复杂但容易忽略










