有没有人有一些数据或基本计算可以回答何时需要帧合并 (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?或者它应该能够在每个数据包的单个中断上生存?