文章

网络性能测试

iperf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
非常流行的网络性能测试工具,支持 TCP 和 UDP 协议。它可以测试带宽、延迟、抖动等

sudo apt-get install iperf3   # 对于 Debian/Ubuntu
sudo yum install iperf3      # 对于 CentOS/RHEL


iperf3 -s   # 在一个节点上启动服务器
iperf3 -c <server_ip>   # 在另一个节点上作为客户端连接服务器

-s: 以服务端模式运行
-B IP: 绑定特定的 IP 地址, 表示服务器将只在这个指定的 IP 地址上接受连接
-i num:  设置报告间隔,默认为 1 秒
-p: 监听的端口号,默认为5201
-c IP: 连接服务器,指定ip地址
-t num: 持续时间运行时间

eg:
启动服务:
iperf3 -s -B 10.200.0.11 -i 1 -p 6666
以本机IP为: 10.200.0.11的网卡启动6666的端口,报告间隔为 1 秒

客户端连接:
iperf3 -c 10.200.0.11 -B 10.200.0.12 -p 6666 -t 60 -i 1
以本机网卡IP为: 10.200.0.12 连接服务端: 10.200.0.11 的6666端口,并间隔1s发送60s的请求

================================================================================
...
...
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-60.00  sec   102 MBytes  14.3 Mbits/sec  85010             sender
[  5]   0.00-60.01  sec   101 MBytes  14.1 Mbits/sec                  receiver

iperf Done.

----------------------------------------------------------------
解释
    [ ID]: 流的标识符。在这个例子中是 5。
    Interval: 测试运行的时间区间。在这个例子中是 0.00-60.00 秒。
    Transfer: 传输的数据量。在这个例子中是 102 MBytes 。
    Bitrate: 平均传输速率(带宽)。在这个例子中是 14.3 Mbits/sec。
    Retr: TCP 重传次数。这表示发送方在测试期间重新发送了 85010 次数据包。


分析
    传输速率(Bitrate):
        发送方报告的传输速率为 14.3 Mbits/sec。
        接收方报告的传输速率为 14.1 Mbits/sec。

    这两个速率非常接近,表明测试是有效的。

    重传次数(Retr):
        发送方报告的重传次数为 85010。

    重传次数非常高,表明在传输过程中有很多数据包丢失或其他问题,导致需要重新发送数据包。可能的原因包括网络拥塞、链路质量差或其他网络问题。

================================================================================

netperf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
是一个强大的网络性能测试工具,支持各种网络性能测试模式,包括 TCP 和 UDP。

sudo apt-get install netperf   # 对于 Debian/Ubuntu
sudo yum install netperf       # 对于 CentOS/RHEL


netserver   # 在一个节点上启动服务器
netperf -H <server_ip>   # 在另一个节点上作为客户端连接服务器

netserver:

	-D: 不以守护进程方式运行
	-d: 增加调试输出
	-f: 不为每个测试生成子进程,串行运行
	-L name,family: 使用指定名称和地址族(family)选择监听地址
	-N: 禁止调试输出,即使 netperf 请求
	-p portnum: 监听指定端口上的连接请求
	-4: 使用 IPv4
	-6: 使用 IPv6
	-v verbosity: 指定详细级别, 1、2、3
	-Z passphrase: 期望在接收到的第一件事中包含密码

netperf:

	-H host: 指定主机IP
	-c/C: 报告 本地/远端 cpu占用率
	-d: 增加调试输出
	-D num: 每个时间间隔显示临时结果
	-l num: 指定测试时间
	-o send,recv: 设置本地发送、接收缓冲区偏移量
	-O send,recv: 设置远程发送、接收缓冲区偏移量
	-n num: 设置CPU util的处理器数
	-N: 没有建立控制连接,只做发送端
	-p port,lport*: 指定netserver端口号, 或者本地端口号
	-t testname: 指定要执行的测试类型(例如 TCP_STREAM, UDP_STREAM)
	-f G|M|K|g|m|k: 设置输出单位(Gbits, Mbits, Kbits, gbytes, mbytes, kbytes)
	-v level: 设置详细级别(默认 1,最小 0)



eg:
netserver -p 12866 -4 -D -d
或
netserver -L 192.168.1.100,4 -p 12866 -D -d
开启(指定)监听地址为 192.168.1.100, 端口号 12866 并使用 IPv4,以前台运行,增加调试输出


netperf -H 192.168.1.100 -p 12866 -l 60 -f M -c -C -D 10 -s 256K -S 256K
连接指定服务地址为 192.168.1.100:12866 ,测试1分钟,以M单位输出,同时输出本地和远端的CPU信息,每10s输出一次测试结果,设置 发送256k和接收256k数据,增加发送和接收缓冲区的大小(以提高吞吐量)

================================================================================
Sorry, Demo Mode not configured into this netperf.
Please consider reconfiguring netperf with
--enable-demo=yes and recompiling
MIGRATED TCP STREAM TEST from (null) (0.0.0.0) port 0 AF_INET to (null) () port 0 AF_INET
Recv   Send    Send                          Utilization       Service Demand
Socket Socket  Message  Elapsed              Send     Recv     Send    Recv
Size   Size    Size     Time     Throughput  local    remote   local   remote
bytes  bytes   bytes    secs.    MBytes  /s  % O      % S      us/KB   us/KB

131072 131072 131072    60.68         1.68   20.63    2.70     957.562  2008.344 

-----------------------------------------------------------------------

Recv Socket Size (bytes): 接收缓冲区的大小,以字节为单位。这里是 131072 字节(128 KB)。
Send Socket Size (bytes): 发送缓冲区的大小,以字节为单位。这里是 131072 字节(128 KB)。
Send Message Size (bytes): 发送消息的大小,以字节为单位。这里是 131072 字节(128 KB)。
Elapsed Time (secs.): 测试持续时间。这里是 60.68 秒。
Throughput (MBytes/s): 吞吐量,以每秒兆字节为单位。这里是 1.68 MB/s。
Utilization (%O and %S):

    %O (Send): 本地发送端的 CPU 使用率。这里是 20.63%。
    %S (Recv): 远程接收端的 CPU 使用率。这里是 2.70%。

Service Demand (us/KB):

    Local (us/KB): 本地发送端每 KB 数据的服务时间(微秒)。这里是 957.562 us/KB。
    Remote (us/KB): 远程接收端每 KB 数据的服务时间(微秒)。这里是 2008.344 us/KB。

================================================================================
本文由作者按照 CC BY 4.0 进行授权