在CentOS中进行NIC/网络性能调整



我们运行一个基于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

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平均/秒(

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

其余均为默认值第1版:我改为繁忙的民意调查-50,能够在整个过程中取得更好的成绩,但并不一致。

  1. 为什么发送方和接收方之间的速率存在差异?可以调整哪些其他NIC/OS参数以实现与发送方相同的吞吐率?

  2. 我使用ethtool观察到的一件奇怪的事情是,这个参数">rx_no_dma_resources"在测试过程中不断快速增加。。听起来有什么吗?

  3. 尽管我在/proc/interrupts和/proc/net/softnet_stat中禁用了"irqbalance",但中断的分布并不均匀
  4. 总的来说,我的最终目标是以最小的数据包丢失实现最佳吞吐量

我没有你所有问题的答案,也没有特定的centos。这是我以前在基于中断的数据包接收方面的经验。

正如您提到的,您需要最好的吞吐量,基于中断的方法并不是一种可行的方法。在我们做的一个项目中,我们发现基于中断的方法由于上下文切换而具有巨大的开销,因此丢弃了大量的数据包。我建议您使用轮询频率较低的轮询。尽管这会导致更多的执行开销。您将能够实现更好的吞吐量。

我希望我的建议对你的项目有用。

最新更新