随着价格的下降,目前万兆以太网正在逐渐步入寻常百姓家。万兆以太网的实际性能是人们感兴趣的一个话题。在理想情况下,通过万兆以太网是否能达到10000Mbps的传输速度?许多人对此心存疑虑,而这方面的评测文章目前网上也比较少见。最近用两块万兆网卡,对此问题进行一番实际测试。

测试采用双机直连的方法,没有经过交换机。使用的网卡是两块intel的x520-t2 10Gbase-t万兆网卡,每块网卡拥有2个万兆端口,不过以下的测试只用到了其中的一个端口。两块网卡之间通过一条6类双绞线直连。

测试环境为Linux操作系统,内核版本是3.1.1。测试软件方面,为了达到最高的传输速率,采用的是直接socket编程的方法,在两台机器间通过tcp/ip协议发送/接收数据。实时流量则通过读取Linux系统的/proc/net/dev设备文件得到。这样得到的流量包含了tcp/ip包的头部数据,比程序中看到的要更准确一些。

测试前先用ethtool工具察看网卡的工作状态,确认都已处于10000Mb/s的状态:

root@pc2:~# ./ethtool eth2
Settings for eth2:
Supported ports: [ TP ]
Supported link modes:   1000baseT/Full
10000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes:  1000baseT/Full
10000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 10000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: external
Auto-negotiation: on
MDI-X: Unknown
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes

网卡参数方面,基本上均为系统默认值。所作的唯一优化是把网卡的mtu参数调大了一些,本测试中mtu的值设置为6000。

下面是一些具体的测试结果(这里1MB表示1000000字节):

1. 单向单线程传输测试(从pc1向pc2单线程发送数据)

测试结果:pc1出流量的实测速度约为1036MB/s(涨落<2MB/s)。

这个传输速度相当于约8288Mbps,离万兆网络的理论带宽还有一些差距。

2. 单向双线程传输测试(从pc1向pc2同时用2个线程发送数据)

测试结果:pc1出流量的实测速度约为1245MB/s(涨落<1MB/s)。

这个传输速度(9960Mbps)很不错了,已经达到了万兆理论带宽的99%以上。

[11.12.05补充:经过一些优化后,最终实测稳定的极限速度为1248MB/s(9984Mbps)]

3. 单向多线程传输测试(从pc1向pc2同时用多个线程发送数据)

测试结果:传输速率基本没有什么提升,但涨落幅度变小,从1MB/s降低到0.1MB/s的量级。

4. 双向单线程传输测试(从pc1向pc2单线程发送数据,同时pc2向pc1单线程发送数据)

测试结果:pc1上出流量和入流量之和实测速度约为1700MB/s,涨落比较大,有100MB/s的量级。

5. 双向双线程传输测试(从pc1向pc2双线程发送数据,同时pc2向pc1双线程发送数据)

测试结果:pc1上出流量和入流量之和实测速度约为2330MB/s,涨落变小,只有10MB/s左右。

6. 双向多线程传输测试(从pc1向pc2多线程发送数据,同时pc2向pc1多线程发送数据)

测试结果:与前面单向多线程时不同,继续增加线程数传输速度会进一步缓慢提升。在双向10线程时传输速度之和达到2476MB/s(19808Mbps),同样超过了理论带宽的99%,而涨落则下降到1MB/s左右。

从这些测试结果可以看到,不论是单向传输还是双向传输,万兆以太网的实际带宽都可以很容易地达到理论峰值99%以上。这个结果有点出乎事先的预料。测试结果证实了万兆以太网的理论带宽并非虚标,在实际程序应用中经过一些优化是完全可以达到的。