跳转至

Trex 流量测试

Cisco 开源的高性能流量生成器,用于网络设备测试、性能评估与负载测试。

flowchart LR
    A[选择三元组<br/>源IP / 目的IP / 源端口] --> B[基于 pcap 改报文]
    B --> C[按 cps 生成多条流]
    C --> D[按 ipg 控制包间隔]
    D --> E[Trex server 打流]
    E --> F[接收侧统计 Rx/PPS/丢包]

🚀运行模式

无状态 · 有状态 pcap · ASTF。类 IXIA 发包、pcap 模板与脚本化三种模式。

类似 IXIA 发包仪:构造报文按指定速率发送,可用官方 GUI 配置报文。 仓库:https://github.com/cisco-system-traffic-generator/trex-stateless-gui.git

以 pcap 为基础改 IP/端口形成多条流,多个 pcap 即可发混合流量。

更高级,需写 Python 脚本。


📦安装 server

推荐 CentOS 7 / Ubuntu 22.04。二进制包:trex-server.tar.gz

tar -zxvf trex-server.tar.gz && cd trex-server

最小配置 /root/trex_cfg.yaml(前三行必填;无 DPDK 驱动时 interfaces 直接写网卡名):

/root/trex_cfg.yaml
1
2
3
4
5
6
7
8
- port_limit    : 2    # (1)!
  version       : 2
  interfaces    : ['eth3', 'eth4']   # (2)!
  c             : 4                  # (3)!
  port_bandwidth_gb : 10
  port_info:
       - default_gw : 1.1.1.1
         dest_mac   : '00:00:00:01:00:00'
  1. 端口数,与 interfaces 一致。
  2. PCIE 号或网卡名;无 DPDK 驱动时直接写网卡名。
  3. 每对网口使用的 CPU 核数。

启动:

nohup t-rex-64 -i --prefix test1 --hdrh --cfg /root/trex_cfg.yaml &

不同类型网卡可启动多个实例(用不同 --prefix 与 cfg)。


⚙️常用参数

参数 作用
-c 每个接口对使用的 CPU 核数
--cfg 配置文件,默认 /etc/trex_cfg.yaml
-d 测试时长(秒)
-f 流量配置文件
--ipv6 模板转 IPv6
-l 测试同时做延迟测试
--lo 仅做延迟测试
-v 日志等级
-m <num> 流量模板 cps 乘以该数,提高并发会话数

CLI 运行示例(SFR 35Gb/sec):

./t-rex-64 -f avl/sfr_delay_10_1g.yaml -c 4 -m 20 -d 100 -l 1000

Windows GUI 下载:trex-stateless-gui releases,指定版本 trex-stateless-gui-v4.5.6.exe

GUI 报 Java 错误

改用 jdk-20_windows-x64_bin.exe


📊运行字段

Total-Tx · Total-Rx · Total PPS · drop-rate。控制台常见字段含义。

字段 说明
Total-Tx 总发送速率 Mbps
opackets / obytes 发送报文数 / 字节数
ipackets / ibytes 接收报文数 / 字节数
ierrors / oerrors 接收 / 发送错误报文数
Total-Rx 总接收速率 Mbps
Total PPS 当前发送 pps
active-flows / open-flows 活跃会话数 / 启动后创建的总会话数
drop-rate 丢包率

📄流量模板参数

Trex 发送时先选一个三元组(源 IP、目的 IP、源端口),再基于它修改 pcap 报文。

flowchart LR
    A["选择三元组<br/>源 IP / 目的 IP / 源端口"] --> B["修改 pcap 报文"]
    B --> C["按 cps 生成多条流"]
    C --> D["按 ipg 控制包间隔"]
参数 说明
cps 每秒选择的三元组个数,即每秒新建会话数
ipg pcap 内两个报文的时间间隔(微秒),一般 10000(10ms)
w 三元组选择策略,w=3 时连续三次源 IP/目的 IP 不变、源端口变化
limit 限制会话数,limit=3 即 3 条流重复发送,此时 cps 等价 pps,可模拟 stateless
duration 测试时间,也可由命令行 -d 指定
- duration : 10.0
  generator:
          distribution : "seq"          # seq / random
          clients_start : "16.0.0.1"
          clients_end   : "16.0.0.255"
          servers_start : "48.0.0.1"
          servers_end   : "48.0.0.255"
  cap_ipg    : true                     # 使用 pcap 内的时间间隔(建议打开)
  cap_info:
     - name: cap2/dns.pcap
       cps : 10.0
       ipg : 10000
       rtt : 10000                      # 需与 ipg 一致
       w   : 1
       limit: 10
       one_app_server : true
       server_addr : "48.0.0.7"

❓FAQ

dummy 虚拟接口 · low_end · dpdk_setup_ports.py。组网与性能相关问题。

只有一张网卡 / 奇数网卡

dummy 作虚拟接口,每对端口至少有一个非虚拟端口。

    interfaces: ['07:00.0', 'dummy', 'dummy', '8a:00.0']
直接使用本机 Linux 接口

可绕过 DPDK,适用任何 NIC,直接写接口名。

  - port_limit: 2
    version: 2
    interfaces: ['eth2', 'eth3']
查看内核与 DPDK 下的接口对应关系
./dpdk_setup_ports.py -s
发包机器性能较差

配置中加 low_end: true


📚官方手册

Trex 官方文档。完整参数与示例。

https://trex-tgn.cisco.com/trex/doc/