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