10GbE 网络上的吞吐量非常低

NPE*_*NPE 5 networking performance ethernet 10gbethernet

我有两台 Linux 机器,每台机器都配备了Solarflare SFN5122F 10GbE NIC。两个 NIC 使用 SFP+ 直连电缆连接在一起。

我正在使用netperf来测量两台机器之间的 TCP 吞吐量。在一个盒子上,我运行:

netserver
Run Code Online (Sandbox Code Playgroud)

另一方面:

netperf -t TCP_STREAM -H 192.168.x.x -- -m 32768
Run Code Online (Sandbox Code Playgroud)

我得到:

MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.x.x (192.168.x.x) port 0 AF_INET
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

 87380  16384  32768    10.02    1321.34   
Run Code Online (Sandbox Code Playgroud)

测得的吞吐量为 1.3Gb/s。这比理论最大值低 7.5 倍,仅比 1GbE 快 30%。

我可以采取哪些步骤来解决此问题?

pQd*_*pQd 6

几样东西:

  • 您是否尝试调整 mtu 以使用巨型帧
  • 你确定两台服务器之间的链路没有丢包吗?
  • ethtool 是否会向您显示两端接口上的任何错误?
  • 在长时间的测试期间,top/atop 说了什么 - 您是否看到 iowait 完全占用了任何内核?

您 [很可能] 不会在单个 tcp 会话中实现完整的 10gbit,但是您可以通过调整 tcp 处理和与网卡本身的通信来进行一些额外的调整以接近它 - 请查看此处此处