配置完成后,使用以下命令启动基本的 TRex 运行 10 秒(它将使用默认配置文件名 /etc/trex_cfg.yaml):
[bash]>sudo ./t-rex-64 -f cap2/dns.yaml -c 4 -m 1 -d 10
1.1 TRex 输出
成功运行 TRex 后,输出将类似于以下内容:
- $ sudo ./t-rex-64 -f cap2/dns.yaml -d 10
- Starting TRex 2.09 please wait ...
- zmq publisher at: tcp://*:4500
- number of ports found : 4
- port : 0
- ------------
- link : link : Link Up - speed 10000 Mbps - full-duplex 1
- promiscuous : 0
- port : 1
- ------------
- link : link : Link Up - speed 10000 Mbps - full-duplex
- promiscuous : 0
- port : 2
- ------------
- link : link : Link Up - speed 10000 Mbps - full-duplex
- promiscuous : 0
- port : 3
- ------------
- link : link : Link Up - speed 10000 Mbps - full-duplex
- promiscuous : 0
-
-
- -Per port stats table
- ports | 0 | 1 | 2 | 3
- -------------------------------------------------------------------------------------
- opackets | 1003 | 1003 | 1002 | 1002
- obytes | 66213 | 66229 | 66132 | 66132
- ipackets | 1003 | 1003 | 1002 | 1002
- ibytes | 66225 | 66209 | 66132 | 66132
- ierrors | 0 | 0 | 0 | 0
- oerrors | 0 | 0 | 0 | 0
- Tx Bw | 217.09 Kbps | 217.14 Kbps | 216.83 Kbps | 216.83 Kbps
-
- -Global stats enabled
- Cpu Utilization : 0.0 % 2 29.7 Gb/core 3
- Platform_factor : 1.0
- Total-Tx : 867.89 Kbps 4
- Total-Rx : 867.86 Kbps 5
- Total-PPS : 1.64 Kpps
- Total-CPS : 0.50 cps
-
- Expected-PPS : 2.00 pps 6
- Expected-CPS : 1.00 cps 7
- Expected-BPS : 1.36 Kbps 8
-
- Active-flows : 0 9 Clients : 510 Socket-util : 0.0000 %
- Open-flows : 1 10 Servers : 254 Socket : 1 Socket/Clients : 0.0
- drop-rate : 0.00 bps 11
- current time : 5.3 sec
- test duration : 94.7 sec
说明:
1、链接必须为 TRex 工作。
2、发送器线程的平均 CPU 利用率。为获得最佳效果,该值应低于 80%。
3、每个 DP 核心生成 Gb/秒。越高越好。
4、Total Tx 必须与运行结束时的 Rx 相同。
5、Total Rx 必须与运行结束时的 Tx 相同。
6、每秒预期的数据包数(在没有延迟数据包的情况下计算)。
7、每秒预期的连接数(在没有延迟数据包的情况下计算)。
8、每秒预期的比特数(在没有延迟数据包的情况下计算)。
9、TRex 活动“流”的数量。由于老化问题,可能与路由器流的数量不同。通常活动流的 TRex 数量远低于路由器的数量,因为路由器老化流较慢。
10、自启动以来打开的 TRex 流总数(包括活动流和已经关闭的流)。
11、掉率。
2 测量抖动/延迟
虽然上述输出中不存在,但测量延迟和抖动是可能的!
要使用独立流(SCTP 或 ICMP)测量抖动/延迟,请使用-l <Hz>
where Hz 定义每秒从每个端口发送的数据包数,此选项测量延迟和抖动。
--l-pkt-mode <0-3>我们可以使用该选项定义用于延迟测量的流量类型。
选项 ID | 类型 |
---|---|
0 |
默认,SCTP包 |
1 |
来自双方的 ICMP 回显请求数据包 |
2 |
从一侧发送 ICMP 请求,并从另一侧匹配 ICMP 响应。 如果您的 DUT 丢弃来自外部的流量,并且您需要打开针孔以获取外部流量(例如在测试防火墙时),这将特别有用 |
3 |
从双方发送序号为常数 0 的 ICMP 请求包。 |
2.1 解释抖动/延迟输出
启用延迟统计的实用程序的命令输出t-rex
类似于以下内容:
- -Latency stats enabled
- Cpu Utilization : 0.2 % 1 5 6 7 8
- if| tx_ok , rx_ok , rx check ,error, latency (usec) , Jitter max window
- | , 2 , 3 , 4 , average , max , (usec)
- ------------------------------------------------------------------------------------------------------
- 0 | 1002, 1002, 0, 0, 51 , 69, 3 | 0 69 67 ...
- 1 | 1002, 1002, 0, 0, 53 , 196, 2 | 0 196 53 ...
- 2 | 1002, 1002, 0, 0, 54 , 71, 5 | 0 71 69 ...
- 3 | 1002, 1002, 0, 0, 53 , 193, 2 | 0 193 52 ...
说明:
1、Rx 检查和延迟线程 CPU 利用率。
2、tx_ok
对于所有配对端口,端口 0 上的值应等于rx_ok
端口 1 上的值,反之亦然。
3、Rx 检查率按照--rx-check
. 有关 Rx 检查的更多信息,请参考下面的流顺序/延迟验证部分。
4、检测到的数据包错误数。(各种原因,见stateful_rx_core.cpp
)
5、自启动以来所有样本的平均延迟(以微秒为单位) 。
6、自启动以来所有样本的最大延迟(以微秒为单位) 。
7、根据 RC3550 附录 A.8 计算抖动。
8、500 毫秒滑动窗口内的最大延迟。根据终端宽度,每个端口显示的值很少。最旧的值在左侧,最近的值(最新的 500 毫秒样本)在右侧。这有助于在一段时间后识别高延迟清除的峰值。最大延迟(<6>)是整个测试持续时间的总最大值。为了更好地理解这一点,请使用延迟选项 (-l) 运行 TRex 并观察结果。
3 流顺序/延迟验证
在正常模式下(未启用该功能),软件不会检查接收到的流量。在测试结束时对丢弃的数据包进行硬件(英特尔 NIC)测试。唯一的例外是延迟/抖动数据包。这是使用 TRex无法检查终止流量的功能(例如 TCP 代理)的原因之一。
要启用此功能,请添加 --rx-check <sample>到命令行选项,其中 <sample> 是采样率。将发送到软件进行验证的流数为 (1/(sample_rate)。对于 40Gb/秒的流量,您可以使用 1/128 的采样率。
注意 Rx CPU% 利用率。
此功能将采样流的 TTL 更改为 255,并期望接收 TTL 为 254 或 255(一个路由跃点)的数据包。如果您的设置中有多个跃点,请使用--hops
将其更改为更高的值。如果在 TRex 客户端和 TRex 服务器端之间有多个路由器,则可能有超过一跳。
此功能可确保:
数据包按顺序离开 DUT(从每个流的角度来看)。
没有丢包(无需等待测试结束)。如果没有此标志,您必须等待测试结束才能识别丢包,因为由于 RTT,TX 和 Rx 之间总是存在差异。
完整示例
- [bash]>sudo ./t-rex-64 -f avl/sfr_delay_10_1g.yaml -c 4 -p -l 100 -d 100000 -m 30 --rx-check 128
-
- Cpu Utilization : 0.1 % 1
- if| tx_ok , rx_ok , rx ,error, average , max , Jitter , max window
- | , , check, , latency(usec),latency (usec) ,(usec) , 2
- --------------------------------------------------------------------------------
- 0 | 1002, 1002, 2501, 0, 61 , 70, 3 | 60
- 1 | 1002, 1002, 2012, 0, 56 , 63, 2 | 50
- 2 | 1002, 1002, 2322, 0, 66 , 74, 5 | 68
- 3 | 1002, 1002, 1727, 0, 58 , 68, 2 | 52
-
- Rx Check stats enabled 3
- -------------------------------------------------------------------------------------------
- rx check: avg/max/jitter latency, 94 , 744, 49 | 252 287 309 4
-
- active flows: 7 10, fif: 6 308, drop: 0, errors: 0 5
- -------------------------------------------------------------------------------------------
说明:
1、Rx 线程的 CPU%。如果它太高,增加采样率。
2、特定于延迟的数据包测量部分。
3、Rx 检查部分。如需更多详细信息,请在测试期间或测试结束时 按r 。
4、模板流上的平均延迟、最大延迟和抖动(以微秒为单位)。这通常高于延迟检查数据包,因为该功能在此数据包上工作得更多。
5、丢弃计数器和错误计数器应为零。如果没有,请按r查看完整报告或在测试结束时查看报告。
6、fif - 流量第一。Rx 线程处理的新流数。
7、活动流 - rx 线程处理的活动流数
按 R 显示完整报告
- m_total_rx : 2
- m_lookup : 2
- m_found : 1
- m_fif : 1
- m_add : 1
- m_remove : 1
- m_active : 0
- 1
- 0 0 0 0 1041 0 0 0 0 0 0 0 0 min_delta : 10 usec
- cnt : 2
- high_cnt : 2
- max_d_time : 1041 usec
- sliding_average : 1 usec 2
- precent : 100.0 %
- histogram
- -----------
- h[1000] : 2
- tempate_id_ 0 , errors: 0, jitter: 61 3
- tempate_id_ 1 , errors: 0, jitter: 0
- tempate_id_ 2 , errors: 0, jitter: 0
- tempate_id_ 3 , errors: 0, jitter: 0
- tempate_id_ 4 , errors: 0, jitter: 0
- tempate_id_ 5 , errors: 0, jitter: 0
- tempate_id_ 6 , errors: 0, jitter: 0
- tempate_id_ 7 , errors: 0, jitter: 0
- tempate_id_ 8 , errors: 0, jitter: 0
- tempate_id_ 9 , errors: 0, jitter: 0
- tempate_id_10 , errors: 0, jitter: 0
- tempate_id_11 , errors: 0, jitter: 0
- tempate_id_12 , errors: 0, jitter: 0
- tempate_id_13 , errors: 0, jitter: 0
- tempate_id_14 , errors: 0, jitter: 0
- tempate_id_15 , errors: 0, jitter: 0
- ager :
- m_st_alloc : 1
- m_st_free : 0
- m_st_start : 2
- m_st_stop : 1
- m_st_handle : 0
说明:
1、此处显示的错误(如果有)
2、延迟事件的有效平均值的低通滤波器
3、每个模板信息的错误
注意事项和限制:
为了接收数据包,TRex 执行以下操作:
将 TTL 更改为 0xff 并期望 0xFF(环回)或 oxFE(路由)。(--hop
用于配置此值。)
添加 24 字节的元数据作为 ipv4/ipv6 选项标头。