TRex 流量生成器是一种工具,旨在使用真实流量对平台进行基准测试。
学习和测试 TRex 的工具之一是虚拟机实例或 Docker,它可以完全模拟 TRex,而无需任何额外的硬件。
使用一些命令,您可以在 docker 内以低性能/低占用空间运行 TRex。
您需要在系统上安装具有特权的 docker。
我们在这个例子中使用的是 RedHat 7.4
Docker hub 位于docker hub
拉取trex图像
- [bash]>docker pull trexcisco/trex #1
- [bash]>docker run --rm -it --privileged --cap-add=ALL trexcisco/trex #2
- [bash]root@d8ec7a3a09d9 v2.36]./t-rex-64 -i #3
说明:
1:拉取trex镜像可能是更高版本。
2:进入 docker shell
3:以无状态模式运行 TRex
从另一个终端,运行无状态 Console
- [bash]>docker ps
- CONTAINER ID IMAGE COMMAND
- *d4f956743f62* trexcisco/trex:2.36 "/bin/bash" #1
- [bash]>docker exec -it d4f956743f62 bash #2
- [bash]root@d4f956743f62 v2.36]./trex-console #3
1:拉取trex图像可能是更高版本
2:进入 docker 容器(从 $1 中获取 CONTAINER ID)
3:运行无状态控制台
- [root@d8ec7a3a09d9 v2.36]./trex-console
-
- Using 'python' as Python interpeter
-
-
- Connecting to RPC server on localhost:4501 [SUCCESS]
-
-
- Connecting to publisher server on localhost:4500 [SUCCESS]
-
-
- Acquiring ports [0, 1]: [SUCCESS]
-
-
- Server Info:
-
- Server version: v2.36 @ STL
- Server mode: Stateless
- Server CPU: 1 x Intel(R) Xeon(R) CPU E5-2667 v3 @ 3.20GHz
- Ports count: 2 x 10Gbps @ Unknown
-
- -=TRex Console v2.0=-
-
- Type 'help' or '?' for supported actions
-
- trex>start -f stl/imix.py -m 10kpps --port 0 #1
-
- trex>tui #2
-
- Global Statistics
-
- connection : localhost, Port 4501 total_tx_L2 : 28.90 Mb/sec
- version : v2.36 total_tx_L1 : 30.50 Mb/sec
- cpu_util. : 1.35% @ 1 cores (1 per port) total_rx : 28.90 Mb/sec
- rx_cpu_util. : 0.0% / 9.99 Kpkt/sec total_pps : 9.99 Kpkt/sec
- async_util. : 0.41% / 1.28 KB/sec drop_rate : 0.00 b/sec
- queue_full : 0 pkts
-
- Port Statistics
-
- port | 0 | 1 | total
- ----------------------------------------------------------------------
- owner | root | root |
- link | UP | UP |
- state | TRANSMITTING | IDLE |
- speed | 10 Gb/s | 10 Gb/s |
- CPU util. | 1.35% | 0.0% |
- -- | | |
- Tx bps L2 | 28.90 Mbps | 0.00 bps | 28.90 Mbps
- Tx bps L1 | 30.50 Mbps | 0 bps | 30.50 Mbps
- Tx pps | 9.99 Kpps | 0.00 pps | 9.99 Kpps
- Line Util. | 0.31 % | 0.00 % |
- --- | | |
- Rx bps | 0.00 bps | 28.90 Mbps | 28.90 Mbps
- Rx pps | 0.00 pps | 9.99 Kpps | 9.99 Kpps
- ---- | | |
- opackets | 189282 | 0 | 189282
- ipackets | 0 | 189282 | 189282
- obytes | 68489264 | 0 | 68489264
- ibytes | 0 | 68489264 | 68489264
- opackets | 189.28 Kpkts | 0 pkts | 189.28 Kpkts
- ipackets | 0 pkts | 189.28 Kpkts | 189.28 Kpkts
- obytes | 68.49 MB | 0 B | 68.49 MB
- ibytes | 0 B | 68.49 MB | 68.49 MB
- ----- | | |
- oerrors | 0 | 0 | 0
- ierrors | 0 | 0 | 0
-
- status: \
-
- Press 'ESC' for navigation
说明:
1:在端口 0 上启动流量(imix 配置文件)
2:显示统计数据
TRex 配置文件 /etc/trex_cfg.yaml
- - port_limit : 2
- version : 2
- low_end : true #1
- interfaces : ["veth0", "veth1"] #2
- port_info : # set eh mac addr
- - ip : 1.1.1.1
- default_gw : 2.2.2.2
- - ip : 2.2.2.2
- default_gw : 1.1.1.1
说明:
1:低占用模式(需要更少的资源),使用一个线程
2:使用 veth0/veth1 作为连接到内部交换机的 DP 端口 (指定端口)
您需要重定向以下端口 4500/4501/4507 以使用外部 GUI,您可以使用此命令
[bash]>docker run --rm -it --privileged --cap-add=ALL -p 4500:4500 -p 4501:4501 -p 4507:4507 trexcisco/trex
从 GitHub trex-gui-release下载 GUI
TRex 虚拟机基于 Oracle 的 Virtual Box 免费软件,它旨在使 TRex 新手无需任何特殊资源即可探索此工具。
3.1.1 设置
为了使用 TRex VM,有几个简单的步骤:
图 1. VM 导入
浏览并选择您在步骤 2 中下载的 .ova 文件,然后单击继续。
单击下一步,然后确保不要选中“重新初始化所有网卡的 MAC 地址”复选框。
单击导入并等待导入过程完成。准备出发了!
3.1.2 启动并登录机器
首先,通过在虚拟机菜单中选择虚拟机并点击开始按钮来启动虚拟机。
图 2. TRex VM 启动
您可能会遇到“VT-x is disabled”错误,如下图所示。
在这种情况下,请参阅此链接并按照提供的步骤来解决此问题。
图 3. VT-x disabled 可能的错误消息
机器完成启动后,使用以下凭据登录它:
用户名:trex
密码:trex
图 4. TRex 虚拟机登录
可以使用以下命令设置从主机中的任何位置到机器的远程连接:ssh -p 3022 trex@127.0.0.1
3.1.3. 运行 TRex 流量生成器
升级到最新的 trex 包 看看如何升级
例如,将目录更改为更新的最新版本cd /home/trex/v2.20/
。(不要在OVA中使用旧版本)
运行所需的 TRex 命令。
启动 TRex 命令时,请注意确保sudo
在命令行开头使用前缀,并且您更新到最新的。
v1.62 是非常旧的版本
例如,让我们使用 DNS 流量运行 TRex。命令是:
- [trex@localhost v1.62]$ sudo ./t-rex-64 -f cap2/dns.yaml -d 100 -m 1 --nc
- Starting TRex 1.62 please wait ...
- found configuration file at /etc/trex_cfg.yaml
- zmq publisher at: tcp://*:4500
-
- ...
- 1 Output trimmed.
- ...
-
- -Per port stats table
- ports | 0 | 1
- -----------------------------------------------------------------------------------------
- opackets | 17 | 17
- obytes | 1241 | 1513
- ipackets | 17 | 17
- ibytes | 1513 | 1241
- ierrors | 0 | 0
- oerrors | 0 | 0
- Tx Bw | 582.35 bps | 709.99 bps
-
- -Global stats enabled
- Cpu Utilization : 0.8 % 0.0 Gb/core
- Platform_factor : 1.0
- Total-Tx : 1.29 Kbps
- Total-Rx : 1.29 Kbps
- Total-PPS : 1.99 pps
- Total-CPS : 1.00 cps
-
- Expected-PPS : 2.00 pps
- Expected-CPS : 1.00 cps
- Expected-BPS : 1.30 Kbps
-
- Active-flows : 0 Clients : 511 Socket-util : 0.0001 %
- Open-flows : 17 Servers : 255 Socket : 17 Socket/Clients : 0.0
- drop-rate : 0.00 bps
- current time : 18.7 sec
- test duration : 81.3 sec
- 1 Output trimmed.
- Now, lets review the generated packets as they are observed by our promiscuous interface (interface #2 in the picture at the bottom).
- Notice that (depending on your virtual box CPU performance), tcpdump output might be delayed.
-
- [trex@localhost ~]$ sudo tcpdump -i enp0s8
- tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
- listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
- 09:38:53.953651 IP 16.0.0.2.1024 > 48.0.0.2.domain: 48 A? www.cisco.com. (31)
- 09:38:53.963969 IP 48.0.0.2.domain > 16.0.0.2.1024: 48* 1/0/0 A 100.100.100.100 (47)
- 09:38:54.960361 IP 16.0.0.3.1024 > 48.0.0.3.domain: 48 A? www.cisco.com. (31)
- 09:38:54.970358 IP 48.0.0.3.domain > 16.0.0.3.1024: 48* 1/0/0 A 100.100.100.100 (47)
- 09:38:55.967200 IP 16.0.0.4.1024 > 48.0.0.4.domain: 48 A? www.cisco.com. (31)
- 09:38:55.977222 IP 48.0.0.4.domain > 16.0.0.4.1024: 48* 1/0/0 A 100.100.100.100 (47)
- 09:38:56.975355 IP 16.0.0.5.1024 > 48.0.0.5.domain: 48 A? www.cisco.com. (31)
- 09:38:56.985379 IP 48.0.0.5.domain > 16.0.0.5.1024: 48* 1/0/0 A 100.100.100.100 (47)
- 09:38:57.981659 IP 16.0.0.6.1024 > 48.0.0.6.domain: 48 A? www.cisco.com. (31)
- 09:38:57.992358 IP 48.0.0.6.domain > 16.0.0.6.1024: 48* 1/0/0 A 100.100.100.100 (47)
- 09:38:58.990979 IP 16.0.0.7.1024 > 48.0.0.7.domain: 48 A? www.cisco.com. (31)
- 09:38:59.000952 IP 48.0.0.7.domain > 16.0.0.7.1024: 48* 1/0/0 A 100.100.100.100 (47)
- 09:39:00.009403 IP 16.0.0.8.1024 > 48.0.0.8.domain: 48 A? www.cisco.com. (31)
- 09:39:00.019456 IP 48.0.0.8.domain > 16.0.0.8.1024: 48* 1/0/0 A 100.100.100.100 (47)
- 09:39:01.015810 IP 16.0.0.9.1024 > 48.0.0.9.domain: 48 A? www.cisco.com. (31)
- Let’s have a look at another example.
- We want to generate simple http traffic. The command will look like:
-
- [trex@localhost v1.62]$ sudo ./t-rex-64 -f cap2/http_simple.yaml -d 100 -l 1000 -m 1 --nc
- Starting TRex 1.62 please wait ...
- found configuration file at /etc/trex_cfg.yaml
- zmq publisher at: tcp://*:4500
-
- ...
- 1
- ...
-
- -Per port stats table
- ports | 0 | 1
- -----------------------------------------------------------------------------------------
- opackets | 40983 | 41946
- obytes | 2563951 | 6015664
- ipackets | 41946 | 40983
- ibytes | 6015664 | 2563951
- ierrors | 0 | 0
- oerrors | 0 | 0
- Tx Bw | 520.83 Kbps | 1.27 Mbps
-
- -Global stats enabled
- Cpu Utilization : 3.1 % 0.1 Gb/core
- Platform_factor : 1.0
- Total-Tx : 1.79 Mbps
- Total-Rx : 1.79 Mbps
- Total-PPS : 2.11 Kpps
- Total-CPS : 2.84 cps
-
- Expected-PPS : 102.71 pps
- Expected-CPS : 2.78 cps
- Expected-BPS : 764.51 Kbps
-
- Active-flows : 0 Clients : 255 Socket-util : 0.0000 %
- Open-flows : 107 Servers : 65535 Socket : 0 Socket/Clients : 0.0
- drop-rate : 0.00 bps
- current time : 39.6 sec
- test duration : 60.4 sec
-
- -Latency stats enabled
- Cpu Utilization : 1.0 %
- if| tx_ok , rx_ok , rx ,error, average , max , Jitter , max window
- | , , check, , latency(usec),latency (usec) ,(usec) ,
- ----------------------------------------------------------------------------------------
- 0 | 39490, 39489, 0, 0, 1276 , 106714, 91 | 1737 1880
- 1 | 39490, 39490, 0, 0, 226 , 107619, 203 | 1694 1041
有关工具功能和选项的完整了解,请参阅TRex 完整手册。
3.1.4 更新 TRex
请参阅相关手册部分
3.1.5 TRex 实时监控
一旦我们启动并运行了 TRex,我们就可以使用 TRexViewer 应用程序监控它的性能(仅在 Windows 操作系统上支持)。
这可以通过以下步骤来完成:
下载最新版本的 TrexViewer 应用程序并使用此链接进行安装。
启动应用程序并填写以下内容:
Trex ip: 127.0.0.1:4500
单击播放按钮。
图 5. TRex 查看器开始截图
现在来自 TRex 的实时数据将显示在屏幕上。
图 6. TRex 查看器监控截图
确保 TRex 正在运行,否则 TRexViewer 将无法提供数据。
3.1.6 架构和网络设计
由于没有使用硬件,TRex 使用名为trex_intnet的虚拟内部网络模拟流量。
下图描述了虚拟机的虚拟“接线”以支持 TRex 流量模拟。
图 7. TRex 虚拟连接
VM 使用单个客户端和单个服务器端口运行 TRex。这些端口中的每一个生成的流量通过trex_intnet虚拟网络切换并由另一端接收。
TRex 仅识别由其中一个流量端口专门发送的数据包,并在另一个端口上接收它们。因此,客户端端口生成的数据包将被服务器端口接收,反之亦然。
网络适配器 #4 可用于捕获 TRex 的两个端口生成的所有流量。
一般建议:为获得最佳性能,请在“裸机”硬件上运行 TRex,无需任何类型的 VM。VM 上的带宽可能会受到限制,并且可能无法完全支持 IPv6。
在特殊情况下,在 VM 上运行 TRex 可能是合理或有利的:
如果您已经安装了 VM,并且不需要高性能。
虚拟 NIC 可用于在 TRex 和 TRex 不支持的 NIC 之间进行桥接。
3.3.1 配置 ESXi 以运行 TRex
单击主机,然后选择配置 → 网络。其中一个 NIC 必须连接到主 vSwitch 网络,以便为 TRex 客户端和 ssh 建立“外部”连接:
用于 TRex 流量的其他 NIC 必须位于单独的 vSwitch 中:
2. 右键单击客户机 → 编辑设置 → 确保将 NIC 设置为其网络:
在 2.10 版本之前,以下命令无法正常运行:
sudo ./t-rex-64 -f cap2/dns.yaml --lm 1 --lo -l 1000 -d 100
vSwitch 未正确路由数据包。当 TRex 开始支持 ARP 时,此问题已在 2.10 版中得到解决。
3.3.2 配置直通
直通允许从 VM 内直接使用主机 NIC。直通访问通常仅受 NIC/硬件本身的限制,但可能偶尔会出现延迟峰值(约 10 毫秒)。直通设置无法保存到 OVA。
单击主机。进入配置→高级设置→编辑。
标记所需的 NIC。
3. 重新引导 ESXi 以应用。
4. 右键单击客户机。编辑设置 → 添加 → PCI 设备→ 单独选择 NIC。