在接触到ZYNQ7020开发板后,需要对网口的速率进行测试。上网查了下资料,发现iperf是个好工具,于是就想着用它来测试。然后就开始查资料、进行各种尝试。我在尝试的过程中遇到了各种各样的问题,比如交叉编译的时候出错、移植后无法运行等。由于本人是个小白,对这种问题束手无策······只想能简简单单跟着步骤、输入命令就解决问题,所以放弃了其他博客里的修改文档等办法。幸好最后在两篇博客的指导下,终于实现了iperf3的移植,实现了预期的目的,感谢两位博主!
https://blog.csdn.net/u013625961/article/details/53892821
http://blog.51cto.com/dingtongxue1990/1854124
实现最初的想法后就感觉很满足哈哈哈,于是就写下这第一篇博客,纪念这次探索,也希望能够对有同样问题的开发者提供帮助~
注:通过本文的方法有可能在开发板断电重启后,输入iperf的相关命令就无效了,这是因为开发板植入的根文件系统目录无法配置与保存。本人也在想办法解决这个问题,实践成功后再与大家分享!
iperf是一个基于Client/Server的网络性能测试工具,可以测试TCP、UDP和SCTP带宽质量,能够提供网络吞吐率信息,以及震动、丢包率,最大段和最大传输单元大小等统计信息,帮助我们测试网络性能,定位网络瓶颈。其中抖动和丢包率适应于UDP测试,而带宽测试适应于TCP和UDP。
iperf的好处是纯粹发包和接收,防止硬盘拖后腿,影响测试结果。对于时延,iperf无能无力。但是iperf能够计算抖动。在iperf测试中需要发送大量的包,因此计算出来的抖动值,就是连续发送时延差值的平均值。
下载最新版本源码包,下载地址:http://downloads.es.net/pub/iperf/
# mkdir ~/iperf
# cp iperf-3.0.3.tar.gz ~/iperf
# cd ~/iperf
# tar xzf iperf-3.0.3.tar.gz
# cd iperf-3.0.3
比如在Linux主机上面工作的用户是:alinx,那么命令中的“~”就代表路径:/home/alinx/目录。
# mkdir ../install
# source /opt/Xilinx/SDK/2017.4/settings64.sh #设置交叉编译器的系统环境变量
# ./configure --host=arm-linux-gnueabihf --prefix=/home/alinx/iperf/install
本机使用的交叉编译器是arm-linux-gnueabihf,读者可以根据自己具体使用的交叉编译器进行修改,相应的环境变量也请自行修改
# make
# sudo make install # 安装完成后,文件会自动安装到上面指定的 install 目录。
使用交叉编译工具 strip 去除镜像的调试信息,在不影响使程序使用的情况下,程序大小一般可以减小50%左右。本程序我们仅用到其中2个文件,bin下的iperf3 和 lib下的libiperf.so.0.0.0。
# cd ../install # 进入安装目录
# arm-linux-gnueabihf-strip bin/iperf3 # 去除iperf3镜像调试信息
# arm-linux-gnueabihf-strip lib/libiperf.so.0.0.0 # 去除共享库的调试信息
# rm lib/libiperf.a lib/libiperf.la # 删除两个不用的库文件
# tar jcf iperf-3.0.3.tar.bz2 bin lib # 压缩bin和lib目录
# mount -t nfs -o nolock 192.168.0.3:/home/alinx/linux_sdk_work /mnt //开发板端挂载nfs服务
# cp /mnt # 进入到nfs目录
# tar jxf iperf-3.0.3.tar.bz2 bin -C /usr # 解压镜像到/usr/bin
# tar jxf iperf-3.0.3.tar.bz2 lib -C /usr # 解压库文件到/usr/lib
使用的是iperf-3-current.tar.gz
因为iperf-3.0.3在编译的时候会出错,而这个版本不会
提示:iperf的2版本只能跟2版本的对测,iperf3版本的只能跟3版本的对测
# tar xzf iperf-3-current.tar.gz
# cd iperf-3.4
# ./configure# make
# sudo make install
如果运行 iperf3 命令时提示错误:
“iperf3: error while loading shared libraries: libiperf.so.0: cannot open shared object file: No such file or directory”
可以制作一个软连接可解决,命令如下:
# sudo ln -s /usr/local/lib/libiperf.so.0.0.0 /usr/lib/libiperf.so.0
默认情况客户端使用TCP协议
服务器端:
# iperf3 -s -s:指明是服务器端
客户端:
# iperf3 -c <目标地址> -c: 指明是客户端
# iperf3 -c <目标地址>
# iperf3 -c <目标地址> -l 100M
服务端:
# iperf3 -s
客户端:
# iperf3 -c 192.168.1.100 -u -b <传输带宽> -t <测量时间[秒]> -i <输出报告时间间隔>
-u:指定是udp报文
-b:指定发送带宽
# iperf3 -c 192.168.1.100 -u -b 10M -t 60 -i 2
# iperf3 -c 192.168.1.100 -u -b 10M -t 60 -i 2 -d
# iperf3 -c 192.168.1.100 -u -b 10M -t 60 -i 2 -P 3
服务器端:
# iperf3 -s -V
客户端:
# iperf3 -c <服务器的IPv6地址> -V
服务器端:
# iperf3 -s -p 2480
客户端:
# iperf3 -u -c 192.168.0.222 -b 100M -p 2480