传统上,路由器已使用商业流量生成器进行测试,而性能通常使用每秒数据包 (PPS) 指标进行测量。随着路由器功能和服务变得越来越复杂,有状态流量生成器已成为提供更真实流量场景的必要条件。
现实流量生成器的优点:
准确的性能指标。
发现现实交通场景中的瓶颈。
1.1.1 当前挑战:
成本:商业状态流量生成器非常昂贵。
规模:带宽不能很好地随着特征复杂性而扩大。
标准化:交通模式和方法缺乏标准化。
灵活性:当需要灵活性和定制化时,商业工具不够灵活。
1.1.2 影响
不同团队花费的高成本本支出。
小规模测试和外推成为一种常见做法。这是不理想的,并且无法指示现实场景中出现的瓶颈。
团队使用不同的基准测试方法,因此结果没有标准化。
由于依赖测试工具功能而导致开发和测试延迟。
开发不同的临时工具和测试方法的资源和努力投资。
TRex 通过创新和可扩展的软件实施以及利用标准和开放软件以及 x86/UCS 硬件来解决与商业状态流量生成器相关的问题。
生成和分析 L4-7 流量。在一个包中,提供商业 L7 工具的功能。
基于真实流量模板的预处理和智能回放的状态流量生成器。
生成并放大客户端和服务器端流量。
可以添加自定义功能。
一个 UCS 可扩展到 200Gb/秒(使用 Intel 40Gb/秒 NIC)。
低成本。
可以轻松安装和部署的独立包。
虚拟接口支持使 TRex 可以在没有物理 NIC 的完全虚拟环境中使用。
示例用例:
亚马逊AWS
思科 LaaS
笔记本电脑上的 TRex

表 1. TRex 硬件
TRex并不支持所有受支持的DPDK接口
| UCS 类型 | 注释 |
|---|---|
| UCS C220 Mx | 首选低端。540-D2 支持高达 40Gb/秒。使用较新的 Intel NIC(推荐),支持 1RU 的 80Gb/秒。请参阅下表描述组件。 |
| UCS C200 | 早期的 UCS 模型。 |
| UCS C210 Mx | 支持高达 40Gb/秒的 PCIe3.0。 |
| UCS C240 Mx | 首选的高端支持高达 200Gb/秒。6x XL710 NICS (PCIex8) 或 2xFM10K (PCIex16)。请参阅下表描述组件。 |
| UCS C260M2 | 支持高达 30Gb/秒(受 V2 PCIe 限制)。 |
表 2. 首选 UCS 硬件
| 组件 | 细节 |
|---|---|
| 中央处理器 | 2x E5-2620 @ 2.0 GHz。 |
| CPU 配置 | 2 路 CPU 配置(也适用于 1 个 CPU)。 |
| Memory | 每个 CPU 有 2x4 个存储库。8 个共 32GB。 |
| RAID | 没有 RAID。 |
表 3. 低端 UCS C220 Mx - 内部组件
| 成分 | 细节 |
|---|---|
| 中央处理器 | 2x E5-2667 @ 3.20 GHz。 |
| PCIe | 1x Riser PCI 扩展卡选项 A PID UCSC-PCI-1A-240M4 启用 2 PCIex16。 |
| CPU 配置 | 2 路 CPU 配置(也适用于 1 个 CPU)。 |
| Memory | 每个 CPU 有 2x4 个存储库。8 个共 32GB。 |
| RAID | 没有 RAID。 |
| Riser 1/2 | 左右两边都应该支持 x16 PCIe。右侧 (Riser1) 应来自选项 A x16,左侧 (Riser2) 应为 x16。两者都需要订购。 |
表 4. 高端 C240 Mx - 内部组件
在所有裸机情况下,拥有 4 个 DRAM 通道非常重要。更少的频道会带来性能问题。要对其进行测试,您可以运行sudo dmidecode -t memory | grep CHANNEL并检查 CHANNEL x
| 芯片组 | 带宽(Gb/秒) | LSO | LRO | 例子 |
|---|---|---|---|---|
| 任何内核 Linux 接口 | X | X | X | |
| Intel I350 | 1 | + | - | 英特尔 4x1GE 350-T4 网卡 |
| Intel 82599 | 0.1/1/2.5/5/10 | + | + | Cisco 部件 ID:N2XX-AIPCI01 Intel x520-D2、Intel X520 双端口 10Gb SFP+ 适配器。X550-T2、x540-T2 用于 tbase Cisco 部件 ID:UCSC-PCIE-ID10GC |
| Intel 82599 VF | X | + | + |
|
| Intel X710 | 10 | + | - | Cisco 部件 ID:UCSC-PCIE-IQ10GF SFP+,硬件Silicom PE310G4i71L中每个流统计的首选支持 |
| Intel XL710 | 40 | + | - | Cisco 部件 ID:UCSC-PCIE-ID40GF、QSFP+(铜/光纤)硬件中每个流统计的首选支持 |
| Intel XXV710 | 25 年 1 月 10 日 | + | - | SFP28 Intel XXV710 硬件中每个流统计的首选支持 |
| Intel XL710/X710 VF | X | + | - |
|
| Napatech SmartNIC NT40E3-4 | 10 | - | - | ./b configure --with-ntacc 来构建库 |
| Napatech SmartNIC NT80E3-2 | 40 | - | - | ./b configure --with-ntacc来构建库 |
| Napatech SmartNIC NT100E3-1 | 100 | - | - | ./b configure --with-ntacc 来构建库。我们回归中唯一的 Napatech NIC。更多信息 |
| Napatech SmartNIC NT200A01 | 100 | - | - | ./b configure --with-ntacc 以构建库 注意:此 NIC 需要具有 PCIe 分叉支持的 BIOS。 PCIe 分叉 |
| Mellanox ConnectX-4/Lx | 25/40/50/56/100 | + | + | SFP28/QSFP28、ConnectX-4 ConnectX-4-brief(铜/光纤)从 v2.11 开始支持更多详细信息和问题TRex 支持 |
| Mellanox ConnectX-5/6 | 25/40/50/56/100/200 | + | + | 支持,请参阅问题TRex 支持 |
| 思科 1300 系列 | 40 | + | - | QSFP+、VIC 1380、VIC 1385、VIC 1387 查看更多TRex 支持 |
| VMXNET3 | VMware 半虚拟化 | + | - | 使用 VMware vSwitch 连接 |
| E1000 | 半虚拟化 | + | - | VMware/KVM/VirtualBox |
| Virtio | 半虚拟化 | + | - | 虚拟机 |
| 亚马逊 ENA | 半虚拟化 | + | - | 亚马逊云 |
| MS Failsafe | 半虚拟化 | + | - | 支持 DPDK mlx5 的 Azure |
| memif | 共享内存环 | + | - | 参见memif support multi core for STL。ASTF 只有一个核心 |
表 5. 支持的 NIC
LSO( Large Segment Offload)和 LRO(Large Receive Offload)是通过减少 CPU 监听来增加高带宽网络连接中的出口和入口吞吐量的技术。这些通常使用多包缓冲来完成。当应用于 TCP 时,LSO 也称为 TCP 分段卸载 (TSO),或通用分段卸载 (GSO)。有关详细信息:
网络虚拟化中的 offload 技术:LSO/LRO、GSO/GRO、TSO/UFO、VXLAN_yeasy的博客-CSDN博客_offload
| SFP+ | 英特尔以太网融合 X710-DAX | Silicom PE310G4i71L(开放式光纤) | 82599EB 10-Gigabit |
|---|---|---|---|
| 不支持 | 支持的 | 支持的 | |
| 不支持 | 支持的 | 支持的 | |
| 支持的 | 支持的 | 支持的 | |
| 支持的 | 支持的 | 支持的 |
表 6. SFP+ 支持
Intel X710 NIC(示例:FH X710DA4FHBLK)仅*使用Intel SFP+。对于开放式光纤,请使用Silicom PE310G4i71L NIC,可从以下位置获得:
http://www.silicom-usa.com/PE310G4i71L_Quad_Port_Fiber_SFP+_10_Gigabit_Ethernet_PCI_Express_Server_Adapter_49
对于Intel XXV710 Cisco NIC,请确保至少将cimc升级到v4.0(2f),XXV710的固件将升级到能够支持大多数SFP的v6。
| QSFP+ | 英特尔以太网融合 XL710-QDAX | Silicom PE340G2Qi71开放式光纤 |
|---|---|---|
| QSFP+ SR4 光学器件 | 支持:批准的光学元件。不支持:思科 QSFP-40G-SR4-S | 支持:思科 QSFP-40G-SR4-S |
| QSFP+ LR-4 光学器件 | 支持:批准的光学元件。不支持:思科 QSFP-40G-LR4-S | 支持:思科 QSFP-40G-LR4-S |
| QSFP 有源光缆 (AoC) | 支持:思科 QSFP-H40G-AOC | 支持:思科 QSFP-H40G-AOC |
| 支持 QSFP+ Intel 以太网模块 | 不适用 | 不适用 |
| QSFP+ DA 双轴电缆 | 不适用 | 不适用 |
| 有源 QSFP+ 铜缆 | 支持:思科 QSFP-4SFP10G-CU | 支持:思科 QSFP-4SFP10G-CU |
表 7. XL710 NIC 基本 QSFP+ 支持
对于Intel XL710 NIC,Cisco SR4/LR QSFP+不工作。使用带开放式光学元件的Silicom。
| QSFP28 | 连接X-4 |
|---|---|
| QSFP28 SR4 光学器件 | 不适用 |
| QSFP28 LR-4 光学器件 | 不适用 |
| QSFP28 (AoC) | 支持:思科 QSFP-100G-AOCxM |
| QSFP28 DA 双轴电缆 | 支持:思科 QSFP-100G-CUxM |
表 8. ConnectX-4 NIC 基础 QSFP28 支持 (100gb)
| QSFP+ | 英特尔以太网融合 XL710-QDAX |
|---|---|
| QSFP+ SR4 光学器件 | 不适用 |
| QSFP+ LR-4 光学器件 | 不适用 |
| QSFP 有源光缆 (AoC) | 支持:思科 QSFP-H40G-AOC |
| QSFP+ 英特尔以太网模块化光学 | 不适用 |
| QSFP+ DA 双轴电缆 | 不适用 |
| 有源 QSFP+ 铜缆 | 不适用 |
表 9. Cisco VIC NIC 基本 QSFP+ 支持
| QSFP28 | Example |
|---|---|
| 将支持 | 将支持 |
表 10. FM10K QSFP28 支持
Intel SFP+ 10Gb/sec 是标准 Linux 驱动程序默认支持的唯一一种。TRex 还支持 Cisco 10Gb/秒 SFP+。
对于运行高速吞吐量(例如:多个 Intel XL710 40Gb/秒),为不同的 NIC 使用不同的NUMA节点。
验证 NUMA 和 NIC 拓扑:lstopo (yum install hwloc)
显示 CPU 信息,包括 NUMA 节点:lscpu
NUMA 使用情况:示例
对于 Intel XL710 NIC,验证 NVM 是 v5.04。信息。
- > sudo ./t-rex-64 -f cap2/dns.yaml -d 0 *-v 6* --nc | grep NVM
- PMD: FW 5.0 API 1.5 NVM 05.00.04 eetrack 800013fc
| 组件 | 数量 |
|---|---|
| UCSC-C220-M3S | 1 |
| UCS-CPU-E5-2650 | 2 |
| UCS-MR-1X041RY-A | 8 |
| A03-D500GC3 | 1 |
| N2XX-AIPCI01 | 2 |
| UCSC-PSU-650W | 1 |
| SFS-250V-10A-IS | 1 |
| UCSC-CMA1 | 1 |
| UCSC-HS-C220M3 | 2 |
| N20-BBLKD | 7 |
| UCSC-PSU-BLKP | 1 |
| UCSC-RAIL1 | 1 |
表 11. 推荐的具有 4 个 10Gb 端口的低端 Cisco UCSC-C220-M3S 的样品订单
单独购买 10Gb/秒 SFP+。思科可以使用 TRex(但不适用于普通的 Linux 驱动程序)。
2.2.1 支持的版本
支持的 Linux 版本:
CentOS/RHEL 7.6,64 位内核(非 32 位)(推荐)——这是 ConnectX-4 的唯一工作选项。
通过编译必要的驱动程序可以支持其他操作系统版本。
要检查内核是否为 64 位,请验证以下命令的输出是否为x86_64.
- [ bash ]> unname -m
- x86_64
2.2.2 验证 Intel NIC 安装
用于lspci验证 NIC 安装。
示例:4x 10Gb/sec TRex 配置(见下面的输出):
I350管理端口
4 个英特尔以太网融合网络适配器型号 x520-D2(82599 芯片组)
- [bash]>lspci | grep Ethernet
- 01:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01) #1
- 01:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01) #2
- 03:00.0 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01) #3
- 03:00.1 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01)
- 82:00.0 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01)
- 82:00.1 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01)
说明:
1:管理端口
2:CIMC端口
3:10Gb/秒流量端口(英特尔 82599EB)
用于ssh连接到 TRex 机器并执行下面描述的命令。
仅支持https。
最新(稳定)版本:
- [bash]>mkdir -p /opt/trex
- [bash]>cd /opt/trex
- [bash]>wget --no-cache https://trex-tgn.cisco.com/trex/release/latest
- [bash]>tar -xzvf latest
最新(前沿)版本:
[bash]>wget --no-cache https://trex-tgn.cisco.com/trex/release/be_latest
要获取特定版本:
[bash]>wget --no-cache https://trex-tgn.cisco.com/trex/release/vX.XX.tar.gz #1
说明:
1:其中 X.XX = major.minor 版本号,根据https://trex-tgn.cisco.com/trex/doc/release_notes.html
为获得最佳性能,请在同一NUMA 上回送接口(由同一物理处理器控制)。如果您无法检查这一点,请继续执行此步骤。
如果您使用的是基于 Intel 520-D2 NIC 的 10Gbs NIC,并且您使用 SFP+ 在同一个 NIC 上环回端口,则设备可能无法同步,从而导致无法链接。
许多类型的 SFP+(英特尔/思科/SR/LR)已经过验证工作。
如果遇到链路问题,请尝试从不同的 NIC 环回接口,或使用Cisco twinax 铜缆。

3.1.1 识别端口
使用以下命令来识别端口。
- [bash]>sudo ./dpdk_setup_ports.py -s
-
- Network devices using DPDK-compatible driver
- ============================================
-
- Network devices using kernel driver
- ===================================
- 0000:03:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb #1
- 0000:03:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb
- 0000:13:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb
- 0000:13:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb
- 0000:02:00.0 '82545EM Gigabit Ethernet Controller (Copper)' if=eth2 drv=e1000 unused=igb_uio *Active* #2
-
- Other network devices
- =====================
- <none>
说明:
1:如果您尚未运行任何 DPDK 应用程序,命令输出将显示绑定到内核或根本未绑定的接口列表。2:标记为活动的接口是您的 ssh 连接使用的接口。切勿将此接口放入 TRex 配置文件中。
选择要使用的端口并按照下一节中的说明创建配置文件。
3.1.2 创建最小配置文件
默认配置文件名:/etc/trex_cfg.yaml.
有关 YAML 配置文件选项的完整列表,请参阅平台 YAML。
出于多种目的,从 cfg 文件夹中提供的基本配置文件模板的副本开始是很方便的:
[bash]>cp cfg/simple_cfg.yaml /etc/trex_cfg.yaml
接下来,编辑配置文件,添加接口和 IP 地址详细信息。
例子:
- <none>
- - port_limit : 2
- version : 2
- #List of interfaces. Change according to your setup. Use ./dpdk_setup_ports.py -s to see available options.
- interfaces : ["03:00.0", "03:00.1"] #1
- port_info : # Port IPs. Change according to your needs. In case of loopback, you can leave as is.
- - ip : 1.1.1.1
- default_gw : 2.2.2.2
- - ip : 2.2.2.2
- default_gw : 1.1.1.1
编辑此行以匹配您正在使用的接口。所有 NIC 必须具有相同的类型 - 不要在一个配置文件中混合使用不同的 NIC 类型。有关详细信息,请参阅trex-201。
可以使用一个脚本来自动化根据您的需要定制基本配置文件的过程。该脚本让您开始,然后您可以直接编辑生成的配置文件以获取高级选项。有关详细信息,请参阅平台 YAML。
有两种方法可以运行脚本:
交互模式:脚本提示您输入参数。
命令行模式:使用命令行选项提供所有参数。
3.2.1 交互模式
该脚本提供了一个可用接口列表以及与接口相关的信息。按照说明创建基本配置文件。
[bash]>sudo ./dpdk_setup_ports.py -i
3.2.2 命令行模式
运行以下命令,显示所有接口列表和接口相关信息:
[bash]>sudo ./dpdk_setup_ports.py -t
在环回和/或只有L1-L2 交换机的情况下,不需要 IP 和目标 MAC。该脚本假定以下接口连接:0↔1、2↔3 等。
运行以下命令:
[bash]>sudo ./dpdk_setup_ports.py -c <TRex interface 0> <TRex interface 1> ...
如果是路由器(或其他下一跳设备,例如L3 交换机),请指定路由器的 TRex IP 和默认网关或 MAC,如下所述。
| 争论 | 描述 | 例子 |
|---|---|---|
| -C | 通过指定接口(PCI地址或Linux名称:eth1等)创建配置文件 | -c 03:00.1 eth1 eth4 84:00.0 |
| --dump | 将创建的配置转储到屏幕。 |
|
| -o | 将配置输出到文件。 | -o /etc/trex_cfg.yaml |
| --dest-macs | 每个接口要使用的目标 MAC。将此选项用于基于 MAC 的配置,而不是基于 IP 的配置。不要将此选项与 --ip 和 --def_gw 一起使用 | --dest-macs 11:11:11:11:11:11 22:22:22:22:22:22 |
| --ip | 用于每个接口的 IP 列表。如果未指定 --ip 和 --dest-macs,则脚本假定环回连接(0↔1、2↔3 等)。 | --ip 1.2.3.4 5.6.7.8 |
| --def-gw | 用于每个接口的默认网关列表。使用 --ip 选项时,还要使用 --def_gw 选项。 | --def-gw 3.4.5.6 7.8.9.10 |
| --ci | 核心包括: 要使用的核心白名单。为每个 NUMA 包含足够的内核。 | --ci 0 2 4 5 6 |
| --ce | 核心排除:要排除的核心黑名单。排除核心时,确保每个 NUMA 有足够的剩余。 | --ci 10 11 12 |
| --no-ht | 无超线程:仅使用配置文件中指定的每个内核的一个线程。 |
|
| --prefix | (高级选项)在并行实例的情况下在 TRex 配置中使用的前缀。 | --prefix first_instance |
| --zmq-pub-port | (高级选项)在并行实例的情况下,在 TRex 配置中使用 ZMQ Publisher 端口。 | --zmq-pub-port 4000 |
| --zmq-rpc-port | (高级选项)在并行实例的情况下,在 TRex 配置中使用的 ZMQ RPC 端口。 | --zmq-rpc-端口 |
| --ignore-numa | (高级选项)忽略 NUMA 进行配置创建。此选项可能会降低性能。仅在必要时使用 - 例如,在不同 NUMA 的一对接口的情况下。 |
表 12. 配置文件创建脚本的命令行选项 (dpdk_setup_ports.py -c)