如何在Linux中达到最大的networking吞吐量

我想testing我们的Linux服务器可以处理的最大networking带宽是多less。 我使用了一个带有两个四核英特尔CPU和16GB内存的戴尔R710。 我安装了两个Intel 82575Gb pcie卡,每个卡有4个端口,板载有4个Broadcom BCM5709Gb端口。 所以我有12个Gb nic端口。

我写了一个简单的udptesting程序,使用connect()通过特定的nic发送不间断的虚拟udp数据。 所以当我启动一个程序通过一个网卡发送udp数据时,我可以看到networking吞吐量在116MB / s左右。 这是合理的结果。 然后我开始另一个testing程序,使用另一个nic发送udp。

我得到的最大最大networking吞吐量大约是1GB / s。 这意味着我只能启动10个testing程序。 另外一个启动程序将大大降低吞吐量。

我的问题是,有可能使用全部16个端口全速发送数据? Linux支持有吞吐量限制吗?

我修改了一些udp的sysctl参数,但没有工作。 内存似乎足够大,CPU仍然有足够的资源。 任何人都可以帮助我如何调整系统?

10Gb nic呢? 如果我安装其中两个,我不能让他们达到全速。

任何帮助是受欢迎的。

谢谢

看起来你正在达到最大的总线带宽。 该服务器有两个PCIe x8插槽,每个插槽都可以让您最大限度地使用4 GB的端口。 板载Broadcom端口可能与普通的旧PCI相连接,因此您无法将这些端口最大化 – 甚至无法接近。

你是对的,它将无法最大限度地两个10GB /秒的网卡。 硬件不能胜任。

iperf(Debian / Ubuntu中的iperf包)是生成TCP带宽的一个很好的工具,但是它需要一个具有相同或更好的networking容量的Linux的远程主机,而不需要编写自己的udptesting程序。

远程主机:

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

在主机上我想testing:

 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