通过 10GbE 传输文件速度慢

通过 10GbE 传输文件速度慢

我有两台通过 10 千兆以太网本地连接的机器。系统信息:

  • 机器 A:Intel Core i7 8700K、32 GB DDR4 内存、Intel X550-T2 10GbE NIC、Arch Linux
  • 机器 B:AMD EPYC 3101、256 GB DDR4 内存、ASRock Rack EPYC3101D4I-2T 板载 10GbE NIC、Debian 11

传输大文件时,速度低于预期。我尝试了几种协议(SMB:250 MB/s、SCP:430 MB/s、HTTP:630 MB/s、FTP:800 MB/s),但没有一种能接近线速,至少在两个方向上都如此。

我已经排除了各种瓶颈。

  • iperf3 显示两个方向均为 9.4 Gb/s (1120 MB/s)
  • 文件从 tmpfs 复制并写入,最低读写速度为 2.8 GB/s
  • 系统监视器显示网络速率与传输速度相似,排除了网络开销

我怀疑主要的瓶颈是机器B中较慢的CPU,不同的协议导致不同的CPU负载,从而导致不同的传输速度。

仔细观察 FTP(inetutils ftp 客户端、vsftpd 服务器),我得到了以下传输速度和 CPU 负载(其中 X <- Y 表示客户端 X 正在从服务器 Y 下载,X -> Y 表示客户端 X 正在上传到服务器 Y):

  • A <- B:1120 MB/s(A:60% CPU,B:30% CPU)
  • A -> B:809 MB/s(A:30% CPU,B:100% CPU)
  • B <- A:704 MB/s(B:100% CPU,A:10% CPU)
  • B -> A:1120 MB/s(B:75% CPU,A:30% CPU)

在我的测试中,主动模式和被动模式没有什么区别。

看起来接收比发送占用更多的 CPU 负载,而 FTP 客户端的 CPU 负载比 FTP 服务器更大。这样,我从 B 传输到 A 时接近线速,但反过来却不是这样。

如何才能在不受到 CPU 瓶颈限制的情况下双向传输文件?

相关内容