我们运行一个基于UDP的应用服务器,在其中我们期望高流量。因此,我正在对NIC进行调优,以获得高吞吐量(降低一些延迟)的最佳性能。
为了进行测试,我使用了以下配置的2台机器。
机器详细信息
CPU : 40core
Threads per core: 2
Cores per socket : 2
NUMA node : 2
Model name : Intel(R) Xenon(R ) CPU E5-2630v4
CPU MHx: 2199.841
NUMA 0: 0-9, 20-29
NUMA 1: 10-19, 30-39
RAM: 128GB网络详细信息:
Driver: ixgbe
Version : 4.4.0-k-rh7.3
10G capable在进行简单的负载测试时,我发现接收速率(数据包/秒)与发送方不一样。
(通过SAR命令观察数据)发件人:(sar -n UDP 1) odgm/s
1098825.00
1097993.00
1098103.00接收机: Idgm/s
622742.00
616321.00
649075.00从上面的内容,您可以看到发送方和接收方数据报数据包之间的区别。
丢包观察:
伦理工具,netstat,sar -在所有这些工具中观察到的统计数据,这里没有丢包的报告.
当前已调优:(通过此调优,我能够在接收端达到630 K/秒的最大值)
IRQBALANCE : disabled
CPU affinity : manually distributed (each rx-tx queue / CPU)
Interrupt coalesce : rx-usecs 15
Flow control : on
Ring Buffer : rx 512
Rx Queue : 40
rmem_default = 16777216
rmem_max = 16777216Rest都是默认值Edit1:我更改为繁忙的轮询- 50,并且能够在整个过程中取得更好的效果,但不一致。
发布于 2018-10-31 14:08:57
我没有你所有的问题的答案,也没有具体的中心。这是我以前在基于中断的数据包接收方面的经验。
正如您所提到的,您需要最好的吞吐量,基于中断的方法并不是一种方法。在我们所做的一个项目中,我们发现基于中断的方法由于上下文切换而具有巨大的开销,因此丢弃了大量的数据包。我建议您使用低轮询频率的轮询。尽管它会导致更多的执行开销。您将能够获得更好的吞吐量。
我希望我的建议对你的项目有帮助。
https://stackoverflow.com/questions/53046896
复制相似问题