哪些网络负载需要NIC轮询还是中断?


18

在需要帧合并(NAPI)以及每帧单个中断就足够时,是否有人可以回答一些数据或基本计算?

我的硬件:IBM BladeServer HS22,Broadcom 5709千兆网卡硬件(MSI-X),具有双至强E5530四核处理器。主要用途是Squid代理服务器。交换机是一个不错的Cisco 6500系列。

我们的基本问题是,在高峰时间(100 Mbps流量,仅10,000 pps)中,延迟和数据包丢失会增加。我已经做了很多调优并将内核升级到2.6.38,它改善了数据包丢失,但延迟仍然很差。ping是零星的;在本地Gbps LAN上甚至跳到200ms。鱿鱼的平均响应从30ms跃升到500 + ms,即使CPU /内存负载很好。

在高峰期间,中断会上升到大约15,000 /秒。Ksoftirqd使用的CPU不多;我安装了irqbalance来平衡所有内核之间的IRQ(eth0和eth1分别为8个),但这并没有太大帮助。

英特尔NIC似乎从未遇到过这类问题,但是刀片系统和固定配置硬件确实存在,我们有点被Broadcoms所困扰。

一切都将NIC视为主要罪魁祸首。我现在最好的想法是尝试减少中断,同时保持较低的延迟和较高的吞吐量。

不幸的是,bnx2不支持自适应rx或tx。

NAPI VS自适应中断线程的答案提供了中断调整的一大过看法,但是,没有具体的信息如何计算最佳ethtool的聚结给出的解决方法设置。有没有比反复试验更好的方法了?

上述工作量和硬件配置是否甚至需要NAPI?还是应该能够在每个数据包的单个中断中生存?


必须是一个棘手的问题...感谢您的@Holocryptic悬赏!我已经尝试了一些“ ethtool -c”设置来合并,但是还没有明显的区别。
Wim Kerkhoff

没问题。我只是看到它在那儿徘徊了几天,这似乎是一个很好的问题。希望有人为您准备一些东西。
Holocryptic 2011年

另一个更新...我们已经迁移到带有Emulex 10 Gbps NIC的IBM HS23刀片服务器。这周我们达到了800,000包/秒,没有下降。我们必须进行大量调整(修补Linux内核驱动程序)以平衡IRQ负载,但现在它的运行异常出色。
Wim Kerkhoff

Answers:


6

我问了一些很好的问题才能尝试解决这个问题。希望我能说我有一个答案...但是也许有一些提示。

我至少可以回答您的问题,“它应该能够在每个数据包的单个中断中生存”。我认为答案是肯定的,基于我可以访问的非常繁忙的防火墙:

Sar输出:

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

如您所见,每秒非常高的数据包非常重要,并且在这台机器上没有进行特殊的ethtool调整。哦,不过是Intel芯片组。:\

唯一要做的是在每个接口上使用/ proc / irq / XXX / smp_affinity进行一些手动irq平衡。我不确定为什么他们选择了这种方式,而不是使用irqbalance,但似乎可行。

我还考虑了回答您的问题所需的数学运算,但是我认为变量太多了。所以...总而言之,我认为答案是“不”,我认为您无法在这里预测结果,但是通过捕获足够的数据,您应该能够将其调整到一个更好的水平。

说了这么多,我的直觉是您在某种程度上受到了硬件的束缚……就像某种固件或互操作性错误一样。


一些有用的背景信息:alexonlinux.com/…–
DictatorBob

1
我同意基本声明“是的,应该没有问题”,但是看到它们确实有问题时,很可能是固件或驱动程序问题。我根本没有“调整”我的工作站,它可以拉65kip而不会流汗。15kip对于现代CPU来说不算什么。我只使用Broadcom NIC,而5709是迄今为止最常见的网卡。该测试是在FreeBSD上运行的,而不是Linux。
克里斯·S

感谢您的想法。我确实尝试了irqbalance,但没有发现任何区别。我使用了更多的合并设置(ethtool -c),但没有发现任何区别。刀片服务器之一实际上是负载均衡器,每秒可推送120,000个数据包。我注意到,如果加载了NAT和conntrack iptable,则ksoftirqd CPU使用率将达到100%。卸载这些模块,并将负载降低到0。在Squid服务器(最大10,000个数据包/秒)上,我刷新了17,000(!!!)iptables规则,并立即降低了延迟。我以为我以前曾经尝试过,但显然没有尝试过……
Wim Kerkhoff

3

当然,与如此低的流量相比,考虑到CPU,芯片组和总线的功能,您根本没有理由需要任何形式的中断管理。我们有多台具有10Gbps NIC的RHEL 5.3 64位计算机,它们的中断一点也不差,这要少100倍。

显然,您有一个固定的配置(我使用的惠普刀片服务器非常相似),因此将NIC换成Intel处理器现在是一个简单的选择,但是我要说的是,我开始在这个论坛和其他地方发现许多类似的问题该特定的Broadcom NIC。曾经的SE网站本身都存在这种不一致的问题,因此更换为Intel NIC绝对有帮助。

我建议选择一个刀片,并在该计算机上添加基于Intel的适配器,显然,您必须添加一个互连模块或IBM称之为的任何适配器才能发出信号,但尝试相同的软件设置,但同时使用另一个NIC(可能的话,请禁用Broadcom)。测试一下,看看如何进行,我知道我所描述的需要一些额外的硬件,但我想您的IBM代表会很乐意将它们借给您。这是确定的唯一途径。请让我们知道您的发现,我对这些NIC是否有问题(即使是一种奇怪的情况)真的很感兴趣。顺便说一句,下周我将与英特尔和Broadcom会面,讨论完全不相关的内容,但我一定会与他们讨论,并在发现任何感兴趣的内容时告诉您。


1

有关中断的问题是它们如何影响整体系统性能。中断可以抢占用户和内核土地处理的先机,尽管您可能不会看到太多的CPU使用量,但发生了很多上下文切换,这对性能造成了很大的影响。您可以使用vmstat并检查system列,cs每秒中断的标题和每秒的上下文切换(中断包括时钟,因此您必须对其进行加权),也值得一试。


1

简短的直接答案:

如果启用轮询,则将上下文切换(通常是由于中断)从现在的状态(在您的情况下为15kip)减少到预定的数量(通常为1k到2k)。

如果您当前的流量超过了预定数量,则通过启用轮询应该可以有更好的响应时间。反之亦然。除非上下文切换影响性能,否则我不会说这是“必要的”。


1

后续操作:卸载NAT和conntrack模块以及最小化的iptables规则集,我们获得了出色的性能。IPVS负载平衡器已经完成了900 Mbps / 150 kpps的速度。这仍在使用相同的Broadcom bnx2芯片组。

总结一下:中断处理似乎很好,而2.6.38 / 3.0.x内核的Debian的默认设置似乎可以接受。

当然,我希望使用Intel NIC,以便我们可以使用标准Debian软件包。与非免费的bnx2固件进行对抗已经浪费了大量时间。


只是另一个更新。最近,性能再次下降,没有明显的原因。我们回顾了所有先前的优化,但均未成功。英特尔NIC仍然不是一种经济的选择(在新的互连,10GB交换机等方面投资30-40,000美元)。但是,我们找到了一些较新的IBM HS22刀片服务器,这些刀片服务器仍使用笨拙的bnx2,但固件更新。性能要好得多-我们突破了150,000个数据包/秒的障碍。
Wim Kerkhoff 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.