Wim*_*off 18 nic linux-networking broadcom
有没有人有一些数据或基本计算可以回答何时需要帧合并 (NAPI) 以及何时每帧一个中断就足够了?
我的硬件:IBM BladeServer HS22、Broadcom 5709 千兆网卡硬件 (MSI-X),带有双 Xeon E5530 四核处理器。主要用途是 Squid 代理服务器。交换机是不错的 Cisco 6500 系列。
我们的基本问题是,在高峰时段(100 Mbps 流量,只有 10,000 pps),延迟和数据包丢失会增加。我已经做了很多调整和内核升级到 2.6.38,它改善了丢包,但延迟仍然很差。Ping 是零星的;在本地 Gbps LAN 上甚至跳到 200 毫秒。即使 CPU/内存负载很好,Squid 的平均响应也会从 30 毫秒跳到 500 毫秒以上。
在高峰期间,中断攀升至大约 15,000 次/秒。Ksoftirqd 使用的 CPU 不多;我已经安装了 irqbalance 来平衡所有内核的 IRQ(eth0 和 eth1 各 8 个),但这并没有多大帮助。
Intel NIC 似乎从来没有这些问题,但事实上刀片系统和固定配置的硬件,我们有点被 Broadcoms 困住了。
一切都指向 NIC 是罪魁祸首。我现在最好的想法是尝试减少中断,同时保持低延迟和高吞吐量。
不幸的是,bnx2 不支持自适应 rx 或 tx。
NAPI vs Adaptive Interrupts线程答案提供了对中断调节的很好的概述,但没有关于如何为给定的解决方法计算最佳 ethtool 合并设置的具体信息。有没有比试错法更好的方法?
上面提到的工作负载和硬件配置是否还需要 NAPI?或者它应该能够在每个数据包的单个中断上生存?
很好的问题,让我做了一些阅读来尝试弄清楚。希望我能说我有答案……但也许有一些提示。
我至少可以回答你的问题,“它是否应该能够在每个数据包的单个中断上存活”。我认为答案是肯定的,基于我可以访问的非常繁忙的防火墙:
萨尔输出:
03:04:53 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
03:04:54 PM lo 93.00 93.00 6.12 6.12 0.00 0.00 0.00
03:04:54 PM eth0 115263.00 134750.00 13280.63 41633.46 0.00 0.00 5.00
03:04:54 PM eth8 70329.00 55480.00 20132.62 6314.51 0.00 0.00 0.00
03:04:54 PM eth9 53907.00 66669.00 5820.42 21123.55 0.00 0.00 0.00
03:04:54 PM eth10 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:04:54 PM eth11 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:04:54 PM eth1 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:04:54 PM eth2 146520.00 111904.00 45228.32 12251.48 0.00 0.00 10.00
03:04:54 PM eth3 252.00 23446.00 21.34 4667.20 0.00 0.00 0.00
03:04:54 PM eth4 8.00 10.00 0.68 0.76 0.00 0.00 0.00
03:04:54 PM eth5 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:04:54 PM eth6 3929.00 2088.00 1368.01 183.79 0.00 0.00 1.00
03:04:54 PM eth7 13.00 17.00 1.42 1.19 0.00 0.00 0.00
03:04:54 PM bond0 169170.00 201419.00 19101.04 62757.00 0.00 0.00 5.00
03:04:54 PM bond1 216849.00 167384.00 65360.94 18565.99 0.00 0.00 10.00
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,一些非常高的每秒数据包计数,并且在这台机器上没有进行特殊的 ethtool 调整。哦...不过,英特尔芯片组。:\
唯一要做的就是在每个接口的基础上使用 /proc/irq/XXX/smp_affinity 进行一些手动 irq 平衡。我不确定他们为什么选择那样做而不是使用 irqbalance,但它似乎有效。
我还考虑了回答您的问题所需的数学,但我认为变量太多了。所以……总而言之,在我看来,答案是否定的,我认为您无法预测这里的结果,但是有了足够的数据捕获,您应该能够将其调整到更好的水平。
说了这么多,我的直觉是你在这里以某种方式受硬件限制......就像在某种固件或互操作错误中一样。