Netperf是一款开源的网络性能测试工具,主要针对TCP和UDP传输进行测试。它有4种工作模式:TCP_STREAM、TCP_RR、UDP_STREAM、UDP_RR。后续将会对每个工作模式进行详细说明。
关于Linux系统下如何安装,这里不作说明,网上资料有很多很多。有没有Windows版本的Netperf呢?当然有的,需要下载的话,请戳这里:。【请注意它所适用的操作系统版本】经本人亲测,XP SP3确实可以使用。其中,netserver作为server端,netperf作为client端。
在第一次运行netserver时,遇到这样一个问题:
C:\>netserver.exe
-
netserver: fopen of debug file as new stdout failed!: The system cannot find the path specified.
C:\>netserver.exe
netserver: fopen of debug file as new stdout failed!: The system cannot find the path specified.
解决办法,在C盘根目录下创建一个目录temp,就可以了。为什么呢,看源代码:
Source: netserver.c
-
-
#ifndef DEBUG_LOG_FILE
-
#ifndef WIN32
-
#define DEBUG_LOG_FILE "/tmp/netperf.debug"
-
#else
-
#define DEBUG_LOG_FILE "c:\\temp\\netperf.debug"
-
#endif /* WIN32 */
-
#endif /* DEBUG_LOG_FILE */
Source: netserver.c
#ifndef DEBUG_LOG_FILE
#ifndef WIN32
#define DEBUG_LOG_FILE "/tmp/netperf.debug"
#else
#define DEBUG_LOG_FILE "c:\\temp\\netperf.debug"
#endif /* WIN32 */
#endif /* DEBUG_LOG_FILE */
好,这样就可以正常使用了。
netperf常用的全局参数有:
-
-h help
-
-H 指定server端IP
-
-t 指定测试类型,包括TCP_STREAM、TCP_RR、UDP_STREAM、UDP_RR4种。
-
-l 指定测试时间,单位是秒。
1. TCP_STREAM
测试TCP流式通讯时的网络带宽,这是netperf的default测试类型。
C:\>netperf -H 192.168.1.152 -t TCP_STREAM -l 10
-
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.1.152 (192.168.1.152) port 0 AF_INET
-
Recv Send Send
-
Socket Socket Message Elapsed
-
Size Size Size Time Throughput
-
bytes bytes bytes secs. 10^6bits/sec
-
8192 8192 8192 10.00 454.21
C:\>netperf -H 192.168.1.152 -t TCP_STREAM -l 10
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.1.152 (192.168.1.152) port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
8192 8192 8192 10.00 454.21
测试结果表明,TCP带宽为454.21Mbps。
2. UDP_STREAM
测试UDP流式通讯时的网络带宽。值得注意的是,UDP测试时,需要确保发送端数据缓冲区不能大于接收端缓冲区,否则肯定会出现数据包丢失,造成测试结果不准确。-m参数用来指定发送端缓冲区大小,-M参数用来指定接收端缓冲区大小。
C:\>netperf -H 192.168.1.152 -t UDP_STREAM -l 10 -- -m 1024 -M 1024
-
UDP UNIDIRECTIONAL SEND TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.1.152 (192.168.1.152) port 0 AF_INET
-
Socket Message Elapsed Messages
-
Size Size Time Okay Errors Throughput
-
bytes bytes secs. # # 10^6bits/sec
-
8192 1024 10.01 0 386.00
-
8192 10.01 56.27
C:\>netperf -H 192.168.1.152 -t UDP_STREAM -l 10 -- -m 1024 -M 1024
UDP UNIDIRECTIONAL SEND TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.1.152 (192.168.1.152) port 0 AF_INET
Socket Message Elapsed Messages
Size Size Time Okay Errors Throughput
bytes bytes secs. # # 10^6bits/sec
8192 1024 10.01 0 386.00
8192 10.01 56.27
第一行结果是本地的发送统计,也就是本地发送UDP的吞吐量为386Mbps,第二行是server端的接收统计,吞吐量为56.27Mbps。
3. TCP_RR
在一次TCP连接中,client端和server端的transaction次数。
C:\>netperf -H 192.168.1.152 -t TCP_RR
-
TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.1.152 (192.168.1.152) port 0 AF_INET : first burst 0
-
Local /Remote
-
Socket Size Request Resp. Elapsed Trans.
-
Send Recv Size Size Time Rate
-
bytes Bytes bytes bytes secs. per sec
-
8192 8192 1 1 10.00 10076.08
-
8192 8192
C:\>netperf -H 192.168.1.152 -t TCP_RR
TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.1.152 (192.168.1.152) port 0 AF_INET : first burst 0
Local /Remote
Socket Size Request Resp. Elapsed Trans.
Send Recv Size Size Time Rate
bytes Bytes bytes bytes secs. per sec
8192 8192 1 1 10.00 10076.08
8192 8192
测试结果中,第一行是本地统计结果,第二行是远端统计结果,Request和Response报文大小都是1个字节,C/S两端每秒的transaction次数是10076.08。
4. UDP_RR
在基于UDP的连接中,client端和server端的transaction次数。
C:\>netperf -H 192.168.1.152 -t UDP_RR
-
UDP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.1.152 (192.168.1.152) port 0 AF_INET : first burst 0
-
Local /Remote
-
Socket Size Request Resp. Elapsed Trans.
-
Send Recv Size Size Time Rate
-
bytes Bytes bytes bytes secs. per sec
-
8192 8192 1 1 10.00 9120.10
-
8192 8192
C:\>netperf -H 192.168.1.152 -t UDP_RR
UDP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.1.152 (192.168.1.152) port 0 AF_INET : first burst 0
Local /Remote
Socket Size Request Resp. Elapsed Trans.
Send Recv Size Size Time Rate
bytes Bytes bytes bytes secs. per sec
8192 8192 1 1 10.00 9120.10
8192 8192
同样地,测试结果中,第一二行分别是本地和远端统计结果,Request和Response报文大小都是1个字节,C/S两端每秒的transaction次数是9120.10。
那么,在TCP_RR和UDP_RR测试中,Request和Response报文大小如何指定呢?用到的是-r参数。使用方法是,-r req, [rsp]。