我想测试一下我们的 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 的性能。硬件根本无法胜任。