我无法达到英特尔双端口 82599EB 10 千兆的预期吞吐量。我尝试了很多方法,想知道是否有什么我可以尝试但遗漏的方法。
我的硬件配置
两台服务器均装有 OpenSUSE 和 Intel 双端口 82599EB 10GbE。它们手动配置为静态 IP,并且一台机器上的每个端口都连接到第二台机器上的端口。
lspci -vv
吞吐量测试
我正在使用 iperf 进行测试。这些卡由 ixgbe 驱动。
在接收端,我运行
iperf -s
在发射机端:
iperf -c 192.168.1.10 -t 20 -B 192.168.1.20
iperf -c 192.168.1.11 -t 20 -B 192.168.1.21
现在每个接口大约有 4.x Gb。如果我只运行一个接口,我就能得到 9.x Gb。
配置尝试
我浏览了 SE 网站和许多其他文章。以下是我发现的三篇有用的文章。
- 网络连接 — 调整英特尔® 以太网适配器吞吐量性能
- https://www.kernel.org/doc/Documentation/networking/ixgbe.txt
- http://www.redhat.com/promo/summit/2008/downloads/pdf/Thursday/Mark_Wagner.pdf(PDF)
真正有帮助的两件事:
- 通过将 MTU 设置为 9000 来使用巨型帧。
- 增加 rmem 设置
/etc/sysctl.conf
但是,两个通道的总速度仍然在 9.5Gbe 左右。我认为每个通道应该达到 9Gbe 或更多。
我尝试过但没有取得多大成功的方法:
- 使用 ethtool -c 来改变中断合并
- 使用 ethtool 禁用/启用流量控制
根据评论进行编辑
为了测试 CPU 利用率,我使用了mpstat -P ALL 5
。在传输服务器上,我看到利用率为 61%。
01:12:59 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
...
01:12:59 PM 4 0.00 0.00 61.33 0.00 0.00 9.38 0.00 0.00 29.29
那应该没问题吧?在接收器上我看到最大值是 30%。
使用 lspci,我得到了以下信息。如果需要,我可以发布完整的输出,但我认为这显示了所需的 pcie 信息:
发件人:
1: LnkCap: Port #16, Speed 5GT/s, Width x8, ASPM L0s, Latency L0 <2us, L1 <32us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 5GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range ABCD, TimeoutDis+
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-, Selectable De-emphasis: -6dB
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
2: LnkCap: Port #16, Speed 5GT/s, Width x8, ASPM L0s, Latency L0 <2us, L1 <32us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 5GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range ABCD, TimeoutDis+
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-, Selectable De-emphasis: -6dB
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
接收者:
1: LnkCap: Port #0, Speed 5GT/s, Width x8, ASPM L0s, Latency L0 <1us, L1 <8us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 5GT/s, Width x4, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range ABCD, TimeoutDis+
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-, Selectable De-emphasis: -6dB
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
2: LnkCap: Port #0, Speed 5GT/s, Width x8, ASPM L0s, Latency L0 <1us, L1 <8us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 5GT/s, Width x4, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range ABCD, TimeoutDis+
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-, Selectable De-emphasis: -6dB
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
5 G/T x8 应该够了吧?