【发布时间】: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 并且能够在整个过程中取得更好的成绩,但并不一致。
为什么发送者和接收者之间的速率不同?可以调整哪些其他 NIC/OS 参数以实现与发送方相同的吞吐率?
我在使用 ethtool 时观察到的一件奇怪的事情是这个参数“rx_no_dma_resources”在测试期间不断快速增加。它会响吗?
- 尽管我在 /proc/interrupts 和 /proc/net/softnet_stat 中禁用了“irqbalance”,但中断的分配并不均等。
- 总的来说,我的最终目标是在丢包最少的情况下实现最佳吞吐量。
【问题讨论】:
标签: performance network-programming udp kernel packet-loss