目录
简介和区别
RDMA测试
测试:
带宽、延迟、抖动、数据包丢失率、最大传输单元等统计信息。
不同:
qperf和iperf/netperf一样可以评测两个节点之间的带宽和延时,相比netperf和iperf,支持RDMA是qperf工具的独有特性。(qperf -h 可以看到qpperf有很多测试RDMA的选项)
一、qperf特点:第一可以支持RDMA测量,第二可进行循环遍历测试。
- qperf安装
可以直接通过yum源安装。#yun install qperf
同时会安装两个依赖包(libibverbs, librdmacm),是直接和rdma功能相关的,不然无法启动rdma功能。也可以通过,https://pkgs.org/download/qperf 官方网页下载安装。
- qperf使用
- 服务端节点
直接运行如下,无需任何参数
#qperf
默认开启端口号:19765
通过netstat查看,如下:
#netstat –tunlup
tcp 0 0 0.0.0.0:19765 0.0.0.0:* LISTEN 53755/qperf - 客户端
TCP带宽测试
#qperf 11.165.67.18 tcp_bw
(11.165.67.18:服务端的IP,tcp_bw:本次测试的命名)
TCP延时测试
#qperf 11.165.67.18 tcp_lat
同时测试tcp带宽和延时
#qperf 11.165.67.18 tcp_bw tcp_lat
UDP协议测试同TCP协议测试类似,只需命令参数中将tcp_bw和tcp_lat改成udp_bw和udp_lat即可。
指定测试运行时间(使用-t参数)来实现
测试10秒tcp带宽:
#qperf 11.165.67.18 -t 10 tcp_bw
循环loop遍历测试 (递增测试)
在做网卡性能摸底测试的时候,很多时候需要得到网卡的带宽和延时性能曲线。通过qperf提供的循环loop测试,可以一个命令得到所有数据。循环多次测试,每次改变消息大小
例如从16K增加到64K,每次大小翻倍直到64K。
#qperf 11.165.67.18 -oo msg_size:1:64K:*2 -vu tcp_bw tcp_lat
tcp_bw:
bw = 3.06 MB/sec
msg_size = 1 bytes
tcp_bw:
bw = 6.15 MB/sec
msg_size = 2 bytes
tcp_bw:
bw = 12 MB/sec
……
可以最后将测试数据图形化。得到msg_size从1到64K变化的过程中,带宽,延时增长趋势和临界点。这个临界点对于服务器性能评估是很有帮助的。
RDMA测试
如果网卡支持RDMA功能,例如IB卡,那么可以进行RDMA性能测试:
为了使用 RoCE 运行 qperf,应该在客户端添加 -cm1 标志。(mellonx)
#qperf 11.165.67.18 ud_bw
服务端:
qperf
客户端
qperf -cm1 172.17.31.51 rc_lat
qperf -cm1 172.17.31.51 rc_bw
数据包size: -m
qperf -cm1
172.17.31.51 -m 1M rc_bw
数据包数量: -n
qperf -cm1 172.17.31.51 -m 1M -n 1000 rc_bw
polling或者wait event模式:-cp 0 wait 其他poll
qperf -cm1 172.17.31.51 -m 1M -cp 0 rc_bw 或者用-cp1 表示开启polling模式
设置持续时间:-t 默认是s, 加m、h、d 可表示分钟、小时、天
qperf -cm1 172.17.31.51 -m 1M -t 20 rc_bw #20s
qperf -cm1 172.17.31.51 -m 1M -t 20m rc_bw #20分钟
使用rdam_cm apo: -cm1 Use RDMA Connection Manager
qperf -cm1 172.17.31.51 -m 1M -t 20 rc_bw
qperf -h 可以看到qpperf有很多测试RDMA的选项
[root@rdma63 test]# qperf --help tests
Miscellaneous
conf Show configuration
quit Cause the server to quit
Socket Based
rds_bw RDS streaming one way bandwidth
rds_lat RDS one way latency
sctp_bw SCTP streaming one way bandwidth
sctp_lat SCTP one way latency
tcp_bw TCP streaming one way bandwidth
tcp_lat TCP one way latency
udp_bw UDP streaming one way bandwidth
udp_lat UDP one way latency
RDMA Send/Receive
rc_bi_bw RC streaming two way bandwidth
rc_bw RC streaming one way bandwidth
rc_lat RC one way latency
uc_bi_bw UC streaming two way bandwidth
uc_bw UC streaming one way bandwidth
uc_lat UC one way latency
ud_bi_bw UD streaming two way bandwidth
ud_bw UD streaming one way bandwidth
ud_lat UD one way latency
xrc_bi_bw XRC streaming two way bandwidth
xrc_bw XRC streaming one way bandwidth
xrc_lat XRC one way latency
RDMA
rc_rdma_read_bw RC RDMA read streaming one way bandwidth
rc_rdma_read_lat RC RDMA read one way latency
rc_rdma_write_bw RC RDMA write streaming one way bandwidth
rc_rdma_write_lat RC RDMA write one way latency
rc_rdma_write_poll_lat RC RDMA write one way polling latency
uc_rdma_write_bw UC RDMA write streaming one way bandwidth
uc_rdma_write_lat UC RDMA write one way latency
uc_rdma_write_poll_lat UC RDMA write one way polling latency
InfiniBand Atomics
rc_compare_swap_mr RC compare and swap messaging rate
rc_fetch_add_mr RC fetch and add messaging rate
Verification
ver_rc_compare_swap Verify RC compare and swap
ver_rc_fetch_add Verify RC fetch and add
二、iperf/iperf3(1)TCP方面
1 测试网络带宽。
2 支持多线程,在客户端与服务端支持多重连接。
3 报告MSS/MTU值的大小。
4 支持TCP窗口值自定义并可通过套接字缓冲。
(2)UDP方面
1 可以设置指定带宽的UDP数据流
2 可以测试网络抖动值、丢包数
3 支持多播测试
4 支持多线程,在客户端与服务端支持多重连接。
安装iperf
yum install iperf
使用iperf
iperf3 同理
TCP
服务端-s:
iperf -s
客户端-c:
iperf -c 198.51.100.5
UDP
服务端-s:
iperf -s -u
客户端-c:
iperf -c 198.51.100.5 -u
默认情况下,iperf讲UDP客户端的带宽限制为每秒1Mbit,可以用-b标志更改此值,将数字替换为要测试的最大带宽速率。如果需要测试网络速度,可以将数字设置为高于网络提供商提供的最大带宽上限:
iperf -c 198.51.100.5 -u -b 1000m
这将告诉客户端我们希望尽可能达到每秒1000Mbits的最大值,该-b标志仅在使用UDP连接时有效,因为iperf未在TCP客户端上设置带宽限制。
双向测试
在某些情况下,可能希望测试两台服务器以获得最大吞吐量。使用iperf提供的内置双向测试功能可以轻松完成此测试。
服务端-s:
iperf -s
客户端-c:
iperf -c 198.51.100.5 -d
该命令使得iperf将在服务器上启server和client (198.51.100.6)连接--即当客户端又当服务端,iperf会将iperf服务器连接到客户端,该连接现在既充当服务器连接又充当客户端连接。
测试单线程TCP
iperf -s -p 12345 -i 1 -M
iperf -c server-ip -p server-port -i 1 -t 10 -w 20K
-c:客户端模式,后接服务器ip
-p:后接服务端监听的端口
-i:设置带宽报告的时间间隔,单位为秒
-t:设置测试的时长,单位为秒
-w:设置tcp窗口大小,一般可以不用设置,默认即可
测试多线程TCP (-P)
在客户端添加-P参即可测试多线程的TCP性能,如下为使用两个线程的测试情况
iperf -c server-ip -p server-port -i 1 -t 10 -w 20K -P 2
测试单线程UDP(默认带宽)
服务端
iperf -s -u -p 12345 -i 1
客户端
iperf -c server-ip -p server-port -i 1 -t 10 -b,其中参数说明如下:
-c:客户端模式,后接服务器ip
-p:后接服务端监听的端口
-i:设置带宽报告的时间间隔,单位为秒
-t:设置测试的时长,单位为秒
-b:设置udp的发送带宽,单位bit/s
测试单线程UDP(带宽为10Mbit/s)
设置客户端带宽为10M即可,使用参数-b指定
返回信息:
其中,Jitter为抖动,lost/total为丢包数量,Datagrams为包数量。
Iperf参数介绍
命令行选项 | 描述 |
客户端与服务器共用选项 | |
-f, --format [bkmaBKMA] | 格式化带宽数输出。支持的格式有: |
-i, --interval # | 设置每次报告之间的时间间隔,单位为秒。如果设置为非零值,就会按照此时间间隔输出测试报告。默认值为零。 |
-l, --len #[KM] | 设置读写缓冲区的长度。TCP方式默认为8KB,UDP方式默认为1470字节。 |
-m, --print_mss | 输出TCP MSS值(通过TCP_MAXSEG支持)。MSS值一般比MTU值小40字节。通常情况 |
-p, --port # | 设置端口,与服务器端的监听端口一致。默认是5001端口,与ttcp的一样。 |
-u, --udp | 使用UDP方式而不是TCP方式。参看-b选项。 |
-w, --window #[KM] | 设置套接字缓冲区为指定大小。对于TCP方式,此设置为TCP窗口大小。对于UDP方式,此设置为接受UDP数据包的缓冲区大小,限制可以接受数据包的最大值。 |
-B, --bind host | 绑定到主机的多个地址中的一个。对于客户端来 说,这个参数设置了出栈接口。对于服务器端来说,这个参数设置入栈接口。这个参数只用于具有多网络接口的主机。在Iperf的UDP模式下,此参数用于绑 定和加入一个多播组。使用范围在224.0.0.0至239.255.255.255的多播地址。参考-T参数。 |
-C, --compatibility | 与低版本的Iperf使用时,可以使用兼容模式。不需要两端同时使用兼容模式,但是强烈推荐两端同时使用兼容模式。某些情况下,使用某些数据流可以引起1.7版本的服务器端崩溃或引起非预期的连接尝试。 |
-M, --mss #[KM} | 通过TCP_MAXSEG选项尝试设置TCP最大信息段的值。MSS值的大小通常是TCP/IP头减去40字节。在以太网中,MSS值 为1460字节(MTU1500字节)。许多操作系统不支持此选项。 |
-N, --nodelay | 设置TCP无延迟选项,禁用Nagle's运算法则。通常情况此选项对于交互程序,例如telnet,是禁用的。 |
-V (from v1.6 or higher) | 绑定一个IPv6地址。 |
服务器端专用选项 | |
-s, --server | Iperf服务器模式 |
-D (v1.2或更高版本) | Unix平台下Iperf作为后台守护进程运行。在Win32平台下,Iperf将作为服务运行。 |
-R(v1.2或更高版本,仅用于Windows) | 卸载Iperf服务(如果它在运行)。 |
-o(v1.2或更高版本,仅用于Windows) | 重定向输出到指定文件 |
-c, --client host | 如果Iperf运行在服务器模式,并且用-c参数指定一个主机,那么Iperf将只接受指定主机的连接。此参数不能工作于UDP模式。 |
-P, --parallel # | 服务器关闭之前保持的连接数。默认是0,这意味着永远接受连接。(客户端:线程数。指定客户端与服务端之间使用的线程数。默认是1线程。需要客户端与服务器端同时使用此参数。) |
客户端专用选项 | |
-b, --bandwidth #[KM] | UDP模式使用的带宽,单位bits/sec。此选项与-u选项相关。默认值是1 Mbit/sec。 |
-c, --client host | 运行Iperf的客户端模式,连接到指定的Iperf服务器端。 |
-d, --dualtest | 运行双测试模式。这将使服务器端反向连接到客户端,使用-L 参数中指定的端口(或默认使用客户端连接到服务器端的端口)。这些在操作的同时就立即完成了。如果你想要一个交互的测试,请尝试-r参数。 |
-n, --num #[KM] | 传送的缓冲器数量。通常情况,Iperf按照10秒钟发送数据。-n参数跨越此限制,按照指定次数发送指定长度的数据,而不论该操作耗费多少时间。参考-l与-t选项。 |
-r, --tradeoff | 往复测试模式。当客户端到服务器端的测试结束时,服务器端通过-l选项指定的端口(或默认为客户端连接到服务器端的端口),反向连接至客户端。当客户端连接终止时,反向连接随即开始。如果需要同时进行双向测试,请尝试-d参数。 |
-t, --time # | 设置传输的总时间。Iperf在指定的时间内,重复的发送指定长度的数据包。默认是10秒钟。参考-l与-n选项。 |
-L, --listenport # | 指定服务端反向连接到客户端时使用的端口。默认使用客户端连接至服务端的端口。 |
-P, --parallel # | 线程数。指定客户端与服务端之间使用的线程数。默认是1线程。需要客户端与服务器端同时使用此参数。 |
-S, --tos # | 出栈数据包的服务类型。许多路由器忽略TOS字段。你可以指定这个值,使用以"0x"开始的16进制数,或以"0"开始的8进制数或10进制数。 |
-T, --ttl # | 出栈多播数据包的TTL值。这本质上就是数据通过路由器的跳数。默认是1,链接本地。 |
-F (from v1.2 or higher) | 使用特定的数据流测量带宽,例如指定的文件。 |
-I (from v1.2 or higher) | 与-F一样,由标准输入输出文件输入数据。 |
杂项 | |
-h, --help | 显示命令行参考并退出 。 |
-v, --version | 显示版本信息和编译信息并退出。 |