我正在调查运行 Linux 的双核四路 XEON 机箱上的丢包问题。我发现系统上运行着 irqbalance。我有几个问题。阅读文档这里我想我明白它应该如何工作,但有一件事似乎令人困惑,那就是这句话 - “当前的 Linux irqbalance 程序在设计上已有数年历史,并且完全不了解四核(甚至双核)或电源使用的概念。从概念上讲,该程序更接近于简单平衡,而不是智能中断平衡器。”这似乎表明 irqbalance 有旧版本和新版本。是这样吗?您如何知道机器上运行的是哪个版本。
另外,如果我的目标是优化突发期间的数据包处理,我是否要运行 irqbalance,或者我应该手动将网卡绑定到一组 CPU?
答案1
解决此问题的一个方法是结合禁用 irqbalance、cpu 隔离并将 NIC 中断固定到隔离的 CPU。
- 禁用 irqbalance。这将导致所有中断都位于 CPU0 上
- 通过内核启动参数“isolcpus=1-3”隔离 CPU 1-3
- 手动将 NIC 的中断固定到其中一个隔离的 CPU (echo 'cpumask' . /proc/irq//smp_affinity)。
这样做将允许 NIC 的 IRQ 在 CPU 上运行,而不会受到随机内核线程和其他硬件设备的 IRQ 的干扰。
这里很好地解释了如何将 IRQ 固定到特定 CPU。
https://cs.uwaterloo.ca/~brecht/servers/apic/SMP-affinity.txt
答案2
“当前”是指该页面编写时(大约五年前)常见的情况。您可能使用的每个现代 Linux 发行版都具有现代的智能 irqbalance。您正在尝试修复一个非常非常不太可能存在。