【问题标题】:NIC/Network performance tuning in CentOSCentOS 中的 NIC/网络性能调优
【发布时间】:2019-04-02 11:12:57
【问题描述】:

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

从上面可以看出发送方和接收方数据报包的区别。

丢包观察:

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

其余都是默认值 Edit1:我改为忙碌的投票 - 50 并且能够在整个过程中取得更好的成绩,但并不一致。

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

  2. 我在使用 ethtool 时观察到的一件奇怪的事情是这个参数“rx_no_dma_resources”在测试期间不断快速增加。它会响吗?

  3. 尽管我在 /proc/interrupts 和 /proc/net/softnet_stat 中禁用了“irqbalance”,但中断的分配并不均等。
  4. 总的来说,我的最终目标是在丢包最少的情况下实现最佳吞吐量。

【问题讨论】:

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


    【解决方案1】:

    我没有你所有问题的答案,也没有具体的 centos。这是我之前对基于中断的数据包接收的经验。

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

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

    【讨论】:

    • 是的,确实我改为轮询繁忙轮询(50)并且能够在整个过程中取得更好的成绩,但并不一致。例如,我能够达到 720k 左右,然后突然下降到 600k、580k。这很奇怪,因为除了 rma-no-resources 和 fdir 不匹配不断增加之外,我没有观察到任何丢弃或错误...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2013-07-13
    相关资源
    最近更新 更多