目录

​简介和区别​

​一、qperf​

​qperf安装​

​qperf使用​

​RDMA测试​

​二、iperf​

​安装iperf​

​使用iperf​

​Iperf参数介绍​



简介和区别

测试:

带宽、延迟、抖动、数据包丢失率、最大传输单元等统计信息。

不同:

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使用
  1. 服务端节点
    直接运行如下,无需任何参数
    #qperf
    默认开启端口号:19765
    通过netstat查看,如下:
    #netstat –tunlup
    tcp 0 0 0.0.0.0:19765 0.0.0.0:* LISTEN 53755/qperf
  2. 客户端

      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 支持多线程,在客户端与服务端支持多重连接。

【测试】Linux网络性能评估工具iperf|qperf|netperf_服务端

安装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]



格式化带宽数输出。支持的格式有: 
'b' = bits/sec 'B' = Bytes/sec 
'k' = Kbits/sec 'K' = KBytes/sec 
'm' = Mbits/sec 'M' = MBytes/sec 
'g' = Gbits/sec 'G' = GBytes/sec 
'a' = adaptive bits/sec 'A' = adaptive Bytes/sec 
自适应格式是kilo-和mega-二者之一。除了带宽之外的字段都输出为字节,除非指定输出的格式,默认的参数是a。 
注 意:在计算字节byte时,Kilo = 1024, Mega = 1024^2,Giga = 1024^3。通常,在网络中,Kilo = 1000, Mega = 1000^2, and Giga = 1000^3,所以,Iperf也按此来计算比特(位)。如果这些困扰了你,那么请使用-f b参数,然后亲自计算一下。



-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地址。 
服务端:$ iperf -s –V 
客户端:$ iperf -c -V 
注意:在1.6.3或更高版本中,指定IPv6地址不需要使用-B参数绑定,在1.6之前的版本则需要。在大多数操作系统中,将响应IPv4客户端映射的IPv4地址。



服务器端专用选项



-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进制数。 
例如,16进制'0x10' = 8进制'020' = 十进制'16'。TOS值1349就是:
IPTOS_LOWDELAY minimize delay 0x10 
IPTOS_THROUGHPUT maximize throughput 0x08 
IPTOS_RELIABILITY maximize reliability 0x04 
IPTOS_LOWCOST minimize cost 0x02



-T, --ttl #



出栈多播数据包的TTL值。这本质上就是数据通过路由器的跳数。默认是1,链接本地。



-F (from v1.2 or higher)



使用特定的数据流测量带宽,例如指定的文件。 
$ iperf -c -F



-I (from v1.2 or higher)



与-F一样,由标准输入输出文件输入数据。



杂项



-h, --help



显示命令行参考并退出 。



-v, --version



显示版本信息和编译信息并退出。