网口速率测试工具 iperf

后面重新整理的基于 iperf3 的测试总结:https://blog.csdn.net/engrossment/article/details/97791972 - 2019年8月2日

iperf 官网:https://iperf.fr/

iperf 的基本用法是,在辅助设备(PC)启动一个服务端,然后在待测网口的板卡设备启动一个客户端,进行 CS 通信,统计测试情况。所以,从这里可以看出这个测试牵涉到几个东西,包括网线、交换机、路由器、PC 网口、PC 系统。这整个链路里的设备,都有可能对最终的测试结果产生影响。务必留意以下几点。

  • 最好全部辅助测试设备都是支持千兆网络的,当待测网口就是千兆网口时就必须如此。而 PC 的网络,最好不要使用无线网卡,而是使用有线网络。
  • 如果对当前使用的这些辅助设备的性能没有把握,可以先使用另一个已经验证过的板卡来对辅助设备(网络)进行确认测试。再用它来测试待测板卡网口。
  • 另外,为避免网络中其他设备的影响,需要独立的测试网络,不要把上述辅助设备接入到公司共用网络中。而是整个测试网络只有一个 PC、一个待测板卡设备。
  • 运行测试时,PC 和板卡都应停掉系统中占用 CPU 资源的服务、程序。因为这个测试中 CPU 可能是性能瓶颈,对千兆网口来说尤其如此。所以要排除其他程序的影响。

基于 TCP 的基本测试

基于 TCP 的通信是常规用法,做这项测试是有必要的。

服务端 PC 执行以下命令:

iperf -s

客户端板卡执行以下命令:

iperf -c 192.168.0.233

这里 -c 的含义和用法有点不很直观,含义是 client,表示当前使用客户端模式,而后接的却是服务端的 IP地址。

使用默认参数,测试时长 10 秒。完成之后可以看到统计结果。一般来说,做严格的测试需要使用 -t 选项设定更长的测试时间,重复执行多次测试,对所有结果做平均值、方差等统计分析。还有一个值得注意的参数选项是 -w(TCP window size),这个在高级的 TCP 通信中会涉及到。

网口速率测试工具 iperf_第1张图片

基于 UDP 测试丢包率

服务端以下命令:

iperf -s -u

客户端执行以下命令:

iperf -u -c 192.168.0.233 -b 100M

UDP 的特点是不确认数据包的送达,也就没有数据重发。在服务器客户端的整个链路里任何环节出现问题都可能导致数据丢包,而 TCP 是要重发,从而影响带宽。所以在大部分情况下 UDP 对网口带宽的测试会比 TCP 的测试数据更接近真实情况。

参数中的 -b 的数值需要从小到大多测几个,一直增大到比 UDP 客户端统计的带宽还要大为止。留意下图,设定 100M 时,UDP 能达到这个带宽,只是会存在丢包。而设定 500M 时,UDP 带宽 242 M/bits 就去到了最高了,而去除丢包后的带宽 94.7 M/bits 也更高了,只是此时的丢包率会更高。

 

网口速率测试工具 iperf_第2张图片

网口速率测试工具 iperf_第3张图片

对于以上测试结果,需要结合实际硬件环境进行分析。涉及到外部设备的测试,一般都会把问题变复杂。可以采用的分析方法是,控制变量做独立对比。链路中的每一个环节都要独立排查分析。不能轻易下结论。

补充:交叉编译

以 TL572x-EasyEVM 为例:

source ~/57x/ti-processor-sdk-linux-rt-am57xx-evm-04.03.00.05/linux-devkit/environment-setup
./configure --host=arm-linux-gnueabihf --prefix=/home/jack/57x/demo/install LDFLAGS="-static"
make && make install

廖杰良 - 2018-11-27

 

你可能感兴趣的:(嵌入式硬件测试)