如何在 Linux 中达到最大网络吞吐量

如何在 Linux 中达到最大网络吞吐量

我想测试一下我们的 Linux 服务器可以处理的最大网络带宽是多少。我使用一台戴尔 R710,配备两个四核英特尔 CPU 和 16GB 内存。我安装了两个英特尔 82575Gb pcie 卡,每个卡有 4 个端口,板载有 4 个 Broadcom BCM5709Gb 端口。所以我总共有 12 个 Gb 网卡端口。

我编写了一个简单的 udp 测试程序,使用 connect() 通过特定网卡发送不间断的虚拟 udp 数据。因此,当我启动一个程序通过一个网卡发送 udp 数据时,我可以看到该网卡的网络吞吐量约为 116MB/s。这是合理的结果。然后我启动另一个测试程序,使用另一个网卡发送 udp。

我最终得到的最大网络吞吐量约为 1GB/s。这意味着我只能启动 10 个测试程序。再启动一个程序就会大幅降低吞吐量。

我的问题是,是否可以使用所有 16 个端口全速发送数据?Linux 是否支持任何吞吐量限制?

我修改了一些 udp sysctl 参数,但没有用。内存似乎足够大,CPU 仍然有足够的资源。有人能帮我调整系统吗?

10Gb 网卡怎么样?如果我安装两个,它们就无法达到全速。

欢迎任何帮助。

谢谢

答案1

仅就最大化流量这一主题而言,无需编写自己的 udp 测试程序,iperf(Debian/Ubuntu 中的 iperf 包)是一个生成 TCP 带宽的好工具,但它需要具有相同或更好网络容量的 Linux 远程主机:

远程主机:

# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------

在我想测试的主机上:

iperf -i 1 -c 192.168.15.6
------------------------------------------------------------
Client connecting to 192.168.15.6, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.15.132 port 37163 connected with 192.168.15.6 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 1.0 sec  11.4 MBytes  95.2 Mbits/sec
[  3]  1.0- 2.0 sec  11.4 MBytes  95.3 Mbits/sec
[  3]  2.0- 3.0 sec  11.1 MBytes  93.1 Mbits/sec
[  3]  3.0- 4.0 sec  11.3 MBytes  94.8 Mbits/sec
[  3]  4.0- 5.0 sec  11.2 MBytes  94.2 Mbits/sec
[  3]  5.0- 6.0 sec  11.1 MBytes  93.5 Mbits/sec
[  3]  6.0- 7.0 sec  11.3 MBytes  95.0 Mbits/sec
[  3]  7.0- 8.0 sec  11.4 MBytes  95.3 Mbits/sec
[  3]  8.0- 9.0 sec  11.4 MBytes  95.2 Mbits/sec
[  3]  9.0-10.0 sec  11.7 MBytes  97.8 Mbits/sec
[  3]  0.0-10.0 sec    113 MBytes  94.6 Mbits/sec

答案2

看起来您已经达到了最大总线带宽。服务器有两个 PCIe x8 插槽,每个插槽几乎可以让您最大程度地使用 4 GB 端口。板载 Broadcom 端口可能与普通的旧 PCI 连接,因此您无法最大程度地使用它们 - 甚至无法接近。

您说得对,它无法最大程度地发挥两个 10GB/s NIC 的性能。硬件根本无法胜任。

相关内容