1 简介

Iperf3是一款进行主动测量以发现IP网络上可达到的最大带宽的工具,最初是在Linux,FreeBSD和macOS操作系统上开发的,但是,现在已经有了VxWorks的移植版本了。Iperf3会基于三个BSD许可来提供。

VxWorks是由Wind River构建的实时操作系统。

本文介绍了如何配置和使用在VxWorks上移植的iperf3,配合运用Ubuntu Linux上的iperf3来测量有线网络上的最大网络带宽。

2 前提

本文的说明假定你正在使用:

Windows工作站,其上安装了以下软件:

  • 风河VxWorks 7,SR0620
  • Git客户端
  • Ubuntu Linux 16.04 / 18.04 / 20.04工作站
  • 从UEFI BIOS引导的Intel目标机,例如 戴尔Latitude E6540笔记本电脑
  • 一个USB闪存盘
  • 一台有线网络交换机

3 相关文件

有关本主题的更多信息,请参考:

风河文档:

  • VxWorks对第三方软件的支持
  • itl_generic_readme.md

非风河文档:

  • iperf3, http://software.es.net/iperf/
  • Wind-River/vxworks7-layer-for-iperf, https://github.com/Wind-River/vxworks7-layer-for-iperf
  • git –fast-version-control, https://git-scm.com/

4 将VxWorks 7 lperf3层下载到Windows的工作站

打开一个DOS shell窗口,配置编译环境,然后下载iperf3层的git仓库:


cd <WIND_HOME>                  // your installation directory
wrenv -p vxworks-7
cd vxworks-7\pkgs_v2\net        // the root of the VxWorks 7 networking software directory
                                // clone the iperf3 git repo to download the iperf3 layer
git clone https://github.com/Wind-River/vxworks7-layer-for-iperf

你的工作站现在应该有一个名为\vxworks-7\pkgs_v2\net\vxworks7-layer-for-iperf的新目录。

5 准备启用了IPERF3的VXWORKS项目

5.1 创建和编译iperf3的VxWorks源代码生编译(VSB)项目

从相同的DOS shell窗口,创建然后编译一个新的VxWorks源码编译(VSB)项目:


cd <YOUR_WORKSPACE>             // your workspace
vxprj vsb create iperf3_vsb -bsp itl_generic -smp -force
cd iperf3_vsb                   // your VSB directory
vxprj vsb add IPERF3            // add the new IPERF3 layer to the VSB
make -j 32                      // build the VSB

5.2 创建和编译iperf3的VxWorks镜像项目(VIP)

像下面一样创建一个VxWorks镜像项目:


cd ..
vxprj create -smp itl_generic iperf3_vip -profile PROFILE_INTEL_GENERIC -vsb iperf3_vsb
cd iperf3_vip
vxprj vip component add INCLUDE_MULTI_STAGE_WARM_REBOOT
vxprj vip bundle add BUNDLE_STANDALONE_SHELL
vxprj component add INCLUDE_IPERF3
vxprj component add INCLUDE_IPERF3_CMD
vxprj build

6 编译和配置风河UEFI引导加载程序的USB闪存驱动器

6.1 编译UEFI Boot Loader

像下面一样编译boot loader:


// navigate to the UEFI boot loader directory
cd <WIND_HOME>\vxworks-7\pkgs_v2\boot\uefi-2.0.1.1
make clean
make

6.2 用UEFI引导加载程序来配置USB闪存驱动器

切换到目录\vxworks-7\workspace\uefi_x86_64,拷贝文件BOOTX64.EFI到USB闪存:\EFI\BOOT\BOOTX64.EFI,切换到\iperf3_vip\default\,拷贝并重命名vxWorks文件为\EFI\BOOT\bootapp.sys,完成后你可以看到U盘下的文件和目录如下所示:


EFI
BOOT
----------bootapp.sys
----------BOOTX64.EFI

7 在INTEL的目标机上安装VXWORKS

7.1 将Intel目标机连接到网络交换机

使用网线将英特尔目标机连接到有线交换机。

7.2 将Intel目标机上的VxWorks启动起来

插入U盘并给Intel目标板上电,选择U盘作为启动驱动器,目标机启动后,你将看到VxWorks熟悉的标语以及内核shell的提示符会出现。


-> 

7.3 设置Intel目标机上的VxWorks的IP地址

在内核shell的命令行上,给目标机分配一个空闲的IP地址,如下所示:


-> ifconfig "gei0 down"
-> ifconfig "gei0 inet add 192.168.1.2"  // assumes this IP address is free on your network
-> ifconfig

如果你看到你的网络设备被分配了多个IP地址,请删除其他IP地址,直到仅保留192.168.1.1,例如:


-> ifconfig "gei0 inet delete 90.0.0.50"

使能网络连接,如下所示:


-> ifconfig "gei0 up"

8 在VXWORKS上用回环(LOOPBACK)的模式测试IPERF3

运行iperf3服务端,如下所示:


-> sp iperf3, "-s -B 0.0.0.0"

运行iperf3客户端以测试目标回环连接的带宽:


-> cmd
[vxWorks *]# iperf3 -c192.168.1.2 -t3

客户端将报告为回环连接计算出来的网络带宽详细信息。

重新启动英特尔目标机。

在VxWorks内核shell程序上,将gei0的IP地址重置为192.168.1.2。

9 为UBUNTU LINUX工作站配置IPERF3

9.1 将Ubuntu Linux工作站连接到网络交换机

用网线将Ubuntu Linux工作站连接到有线交换机,加电启动Ubuntu工作站,将Ubuntu有线网络连接的IP地址设置为192.168.1.1。

9.2 在Ubuntu Linux工作站上安装iperf3

在Ubuntu工作站上,打开Linux shell命令行,然后输入以下内容:


:~$ sudo apt update
:~$ sudo apt install iperf3

9.3 在Ubuntu工作站上禁用无线网络

在执行有线网络带宽测量之前,我们必须关闭Ubuntu工作站上无线连接。

10 检查VXWORKS与UBUNTU之间的网络连接

在Ubuntu工作站的在命令shell上输入以下内容:


:~$ ping 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.576 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.316 ms

用CTRL + X可以停止ping操作。

在运行VxWorks的Intel目标机上,在内核shell上输入以下内容:


-> ping "192.168.1.1"

Pinging 192.168.1.1 (192.168.1.1) with 64 bytes of data:
Reply from 192.168.1.1 bytes=64 ttl=64 seq=0 time<1ms

--- 192.168.1.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0 ms
rtt min/avg/max = 0/0/0 ms
value = 0 = 0x0

如果任何一边的ping命令失败,请检查并验证英特尔目标机和Ubuntu工作站上的网络连接和IP地址设置。

11 运行IPERF3进行网络带宽测量

11.1 在Ubuntu Linux工作站上运行iperf3服务端程序

在Ubuntu工作站命令行shell上,输入以下内容以在后台运行iperf3服务端程序:


:~$ iperf3 -s -B 0.0.0.0&

11.2 在Intel目标机的VxWorks的shell上运行iperf3客户端程序

在VxWorks内核shell上,输入以下内容以启动iperf3客户端程序,开始带宽测量:


-> cmd
[vxWorks *]# iperf3 -c192.168.1.1 -t3

11.3 在Intel目标机的VxWorks控制台上观察iperf3测得的网络带宽输出

在内核shell上,你应该看到类似以下的内容:


Connecting to host 192.168.1.1, port 5201
[  9] local 192.168.1.2 port 57747 connected to 192.168.1.1 port 5201
[ ID] Interval           Transfer     Bitrate
[  9]   0.00-1.00   sec  11.1 MBytes  93.0 Mbits/sec
[  9]   1.00-2.00   sec  11.2 MBytes  93.8 Mbits/sec
[  9]   2.00-3.00   sec  11.2 MBytes  93.8 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  9]   2.00-3.00   sec  33.5 MBytes  93.6 Mbits/sec                 sender
[  9]   2.00-3.01   sec  33.5 MBytes  93.3 Mbits/sec                 receiver

iperf Done.

看起来在此网络连接上实现的最大带宽约为93 Mbits/sec。

11.4 在Ubuntu工作站上观察iperf3测得的网络带宽输出

在Ubuntu工作站命令shell上,你应该看到类似以下的内容:


Accepted connection from 192.168.1.2, port 57929
[  5] local 192.168.1.1 port 5201 connected to 192.168.1.2 port 57747
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  11.0 MBytes  92.3 Mbits/sec
[  5]   1.00-2.00   sec  11.2 MBytes  93.8 Mbits/sec
[  5]   2.00-3.00   sec  11.2 MBytes  93.8 Mbits/sec
[  5]   2.00-3.01   sec  81.8 KBytes  94.8 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-3.01   sec  33.5 MBytes  93.3 Mbits/sec                 receiver
-----------------------------------------------------------
Server listening on 5201

这证实了此网络连接上实现的最大带宽约为93 Mbits / sec