我们运行的是基于UDP的应用程序服务器,预计该服务器中的流量会很高。因此,我正在调整NIC以实现高吞吐量的最佳性能(减少了一点延迟)。
为了进行测试,我将使用具有以下配置的两台机器。
机器详细信息
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
NIC详细信息:
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
从上面,您可以看到发送方和接收方数据报包之间的区别。
数据包丢失观察:
Ethtool,netstat,sar-在所有这些工具中观察到的统计信息,并且这里没有报告丢包的情况。
当前已调整:(通过这种调整,我能够在接收器端达到630k avg / sec的最大值)
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 = 16777216
其余所有均为默认值 Edit1:我改为忙碌民意测验-50,虽然在整个过程中都能取得更好的成绩,但并不一致。
为什么发送方和接收方的速率不同?可以调整以实现与发送方相同的吞吐率的所有其他NIC / OS参数吗?
我使用ethtool观察到的一件奇怪的事情是该参数“ rx_no_dma_resources ”在测试过程中一直在快速增加。它会响起什么吗?
答案 0 :(得分:2)
我没有您所有问题的答案,也没有特定的centos。这是我以前基于中断的数据包接收的经验。
正如您提到的那样,您需要最好的吞吐量,基于中断的方法不是可行的方法。在我们所做的一个项目中,我们确定基于中断的方法由于上下文切换而具有巨大的开销,因此会丢弃大量的数据包。我建议您使用低轮询频率的轮询。尽管这会导致更多的执行开销。您将能够实现更好的吞吐量。
我希望我的建议对您的项目有用。