网络性能检测:吞吐量测量
网络路径性能检测主要包括三方面的内容:
- 带宽测量能够获知网络的硬件特性,如网络的最大容量。
- 吞吐量测量能够获得网络实际可提供的最大容量。
- 数据流测量能够了解真实占用的网络容量。
本文介绍在评估网络性能是否合理时,需要收集的数据及收集方式。
涉及工具包括:ping, pathchar, bing, ttcp, netperf, iperf, netstat。
吞吐量测量
吞吐量不够的原因不仅在于硬件不足,还有可能是网络设计架构的问题。例如,广播域设置得太大,则即使硬件够磅也会造成问题。
解决方案是重构网络,在充分理解数据流模式后,将这类域隔离开或是分段。
吞吐量通常是测量大块数据传输延时来完成的。通常需要在链路各端运行软件。一般这类软件运行在应用层,所以它不仅测量网络也测量了软硬件。
一个比较简单粗放的方式是用FTP。用FTP来传输一份文件并且看一下它report的数据。需要将结果转换成比特率,例如,这是文件传输的最后一行: 1294522 bytes received in 1.44 secs (8.8e+02 Kbytes/sec) 将1,294,522字节乘8转换成bit之后再除以时间,1.44秒。 结果为7,191,789 bps。 这种方法的不足在于磁盘访问时间可能对结果造成影响。如果需要提高精度则需要使用一些工具。
TTCP
运行这一程序首先需要在远端设备运行server,通常用-r和-s选项。之后运行client,用-t和-s选项,以及主机名或地址。
数据从client端发送至server端,测量性能之后,在各端返回结果,之后终止client端和server端。例如,server端如下所示:
$ttcp -r -s
ttcp-r: buflen=8192, nbuf=2048, align=16384/0, port=5001 tcp
ttcp-r: socket
ttcp-r: accept from 205.153.60.247
ttcp-r: 16777216 bytes in 18.35 real seconds = 892.71 KB/sec +++
ttcp-r: 11483 I/O calls, msec/call = 1.64, calls/sec = 625.67
ttcp-r: 0.0user 0.9sys 0:18real 5% 15i+291d 176maxrss 0+2pf 11478+28csw
client端如下所示:
$ ttcp -t -s 205.153.63.239
ttcp-t: buflen=8192, nbuf=2048, align=16384/0, port=5001 tcp -> 205.153.63.239
ttcp-t: socket
ttcp-t: connect
ttcp-t: 16777216 bytes in 18.34 real seconds = 893.26 KB/sec +++
ttcp-t: 2048 I/O calls, msec/call = 9.17, calls/sec = 111.66
ttcp-t: 0.0user 0.5sys 0:18real 2% 16i+305d 176maxrss 0+2pf 3397+7csw
该程序报告中显示了信息传输总量,标识了连接的建立,并且给出了结果,包括raw data,throughput,I/O call信息,执行时间。最有用的信息应该是transfer rate,892.71 KB/sec (or 893.26 KB/sec)。
这一数据反映了数据的传输速率,而不是链路的容量。将这一数据转化成带宽可能是有问题的,因为实际上传输了比这一值更多的比特数。这一程序显示18.35秒传送了16,777,216字节,但是这仅仅是数据。以太网报文封装还包括TCP,IP,以太网报文头,估算容量时,需要把这些值加上去。
吞吐量低通常意味着拥塞,但也并不总是如此。吞吐量也会取决于配置问题,如连接的TCP窗口大小。如果窗口大小不足,会严重影响到性能。
netperf
与ttcp不同,客户端和服务器端是分开的程序。服务器端是netserver,能够单独启动,或通过inetd启动。客户端是netperf。
下例中,服务器和客户端启动于同一台机器:
$ netserver
Starting netserver at port 12865
$ netperf
TCP STREAM TEST to localhost : histogram
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
16384 16384 16384 10.00 326.10
测试的是loop-back接口,报告显示吞吐量为326Mbps。
下例中,netserver启动于主机:
$netserver
Starting netserver at port 12865
netperf加上-H选项指定服务器地址:
$ netperf -H 205.153.60.247
TCP STREAM TEST to 205.153.60.247 : histogram
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
16384 16384 16384 10.01 6.86
大致与ttcp所得出的吞吐量相同。netperf还进行了一些额外的测试。
以下测试中,还计算了连接的transaction rate: $ netperf -H 205.153.60.247 -tTCP_RR TCP REQUEST/RESPONSE TEST to 205.153.60.247 : histogram Local /Remote Socket Size Request Resp. Elapsed Trans. Send Recv Size Size Time Rate bytes Bytes bytes bytes secs. per sec 16384 16384 1 1 10.00 655.84 16384 16384
该程序包含一些测试脚本。也可以使用netperf做各种流测试。
IPERF
如果ttcp和netperf都不符合你的要求,那么可以考虑iperf。iperf也可以用于测试UDP带宽,丢失率,和抖动。 下例是运行iperf服务器端:
$ iperf -s -p3000
------------------------------------------------------------
Server listening on TCP port 3000
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 4] local 172.16.2.236 port 3000 connected with 205.153.63.30 port 1133
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.0 sec 5.6 MBytes 4.5 Mbits/sec
^C 下例是在windows运行客户端:
C:\>iperf -c205.153.60.236
-p3000
------------------------------------------------------------
Client connecting to 205.153.60.236, TCP port 3000
TCP window size: 8.0 KByte (default)
------------------------------------------------------------
[ 28] local 205.153.63.30 port 1133 connected with 205.153.60.236 port 3000
[ ID] Interval Transfer Bandwidth
[ 28] 0.0-10.0 sec 5.6 MBytes 4.5 Mbits/sec
注意使用Ctrl-C来终止服务器端。
在TCP模式下,iperf相当于ttcp。
在研究TCP窗口是否足够大时,使用iperf特别方便。-w选项设置socket buffer大小。对于TCP来说,这就是窗口大小。通过-w选项,用户可以单步调试各种窗口大小来看它们是怎样影响吞吐量的。
treno
treno使用的方法类似于traceroute来计算块容量,路径MTU,以及最小RTP。如下例所示:
$ treno 205.153.63.30
MTU=8166 MTU=4352 MTU=2002 MTU=1492 ..........
Replies were from sloan.lander.edu [205.153.63.30]
Average rate: 3868.14 kbp/s (3380 pkts in + 42 lost = 1.2%) in 10.07 s
Equilibrium rate: 0 kbp/s (0 pkts in + 0 lost = 0%) in 0 s
Path properties: min RTT was 13.58 ms, path MTU was 1440 bytes
XXX Calibration checks are still under construction, use –v
通常来说,netperf,iperf和treno提供更加丰富的feature,但ttcp更加容易找到。