CentOS中的NIC /网络性能调整

时间:2018-10-29 13:47:38

标签: performance network-programming udp kernel packet-loss

我们运行的是基于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,虽然在整个过程中都能取得更好的成绩,但并不一致。

  1. 为什么发送方和接收方的速率不同?可以调整以实现与发送方相同的吞吐率的所有其他NIC / OS参数吗?

  2. 我使用ethtool观察到的一件奇怪的事情是该参数“ rx_no_dma_resources ”在测试过程中一直在快速增加。它会响起什么吗?

  3. 即使我在/ proc / interrupts和/ proc / net / softnet_stat中禁用了“ irqbalance”,也没有相等的中断分布。
  4. 总的来说,我的最终目标是以最小的数据包丢失率实现最佳的吞吐量。

1 个答案:

答案 0 :(得分:2)

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

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

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