Trex building packets by advance mode in GUI

背景

之前总结过一些Trex的内容,如下所示,这篇文章主要介绍如何在GUI中的高级模式中创建报文,并变更特定项目,如原/目IP地址,TCP/UDP 原/目端口等,以及如何修复可变TCP/UDP端口号带来的Checksum不正确的问题;另外最后还会使用另一种方法来调用流量模型;

Limited

  • 报文统计数据不能导出到Excel或CVS;
  • IPv6包头不能通过Field Engine改变,但API支持;
  • 如果想打IPv6的报文,需要在网络设备上绑定nd和mac的mapping关系;

Topology

拓扑同上一篇文章:

Trex-Server1 (100.0.0.1)------ (100.0.0.2)Router1 ---- network ----- Router2(100.1.1.2) ------ (100.1.1.1)Trex-Server2

Trex配置文件生成

Trex里有一个程序,可以自动生成配置文件,如下所示,Platform部分是设置内核分配的(如果不设置,默认只有一个core,性能有限),启动时指明需要几个内核,那么系统就会自动按照配置进行分配,如“./t-rex-64 -i -c 27

[root@pktgen-intel-icx] /opt/trex/v2.87$ ./dpdk_setup_ports.py -i --no-ht
By default, IP based configuration file will be created. Do you want to use MAC based config? (y/N)n
+----+------+---------+-------------------+-------------------------------+-----------+----------+----------+
| ID | NUMA |   PCI   |        MAC        |             Name              |  Driver   | Linux IF |  Active  |
+====+======+=========+===================+===============================+===========+==========+==========+
| 0  | 0    | 17:00.0 | 11:11:11:11:11:11 | MT2892 Family [ConnectX-6 Dx] | mlx5_core | ens1f0   |          |
+----+------+---------+-------------------+-------------------------------+-----------+----------+----------+
| 1  | 0    | 17:00.1 | 11:11:11:11:11:11 | MT2892 Family [ConnectX-6 Dx] | mlx5_core | ens1f1   |          |
+----+------+---------+-------------------+-------------------------------+-----------+----------+----------+
| 2  | 0    | 32:00.0 | 11:11:11:11:11:11 | Ethernet Controller 10G X550T | ixgbe     | eth0     | *Active* |
+----+------+---------+-------------------+-------------------------------+-----------+----------+----------+
Please choose an even number of interfaces from the list above, either by ID, PCI or Linux IF
Stateful will use order of interfaces: Client1 Server1 Client2 Server2 etc. for flows.
Stateless can be in any order.
For performance, try to choose each pair of interfaces to be on the same NUMA.
Enter list of interfaces separated by space (for example: 1 3) : 0 1

For interface 0, assuming loopback to its dual interface 1.
Putting IP 1.1.1.1, default gw 2.2.2.2 Change it?(y/N).y
Please enter IP address for interface 0: 100.0.0.1
Please enter default gateway for interface 0: 100.0.0.2
For interface 1, assuming loopback to its dual interface 0.
Putting IP 2.2.2.2, default gw 1.1.1.1 Change it?(y/N).y
Please enter IP address for interface 1: 100.1.1.1
Please enter default gateway for interface 1: 100.1.1.2
Print preview of generated config? (Y/n)y
### Config file generated by dpdk_setup_ports.py ###

- version: 2
  interfaces: ['17:00.0', '17:00.1']
  port_info:
      - ip: 100.0.0.1
        default_gw: 100.0.0.2
      - ip: 100.1.1.1
        default_gw: 100.1.1.2

  platform:
      master_thread_id: 0
      latency_thread_id: 28
      dual_if:
        - socket: 0
          threads: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]

从Trex Team的建议来看,建议用benchmark来测试性能然后进行对比,来查看是否性能需要调整,不过需要注意的是,benchmark测试只需要7个core;详细可以查看这里:https://trex-tgn.cisco.com/trex/doc/trex_stateless_bench.html#_config_creation

基础配置

这部分基本配置信息基本都包含在第一篇文章中了,所以不详细介绍了,有一点说一下,流的pps和端口的pps不是一个概念,如果你的端口pps是2mpps,每个流需要根据需求分配,如下图我是每个流1mpps;在这个例子中,两条流分别是TCP和UDP;

流相关属性

在这里设置一些流的相关参数,如速率,IPG是根据速率自动生成;PG ID比较有用,每个端口的PG ID不能重复,用这个PG ID可以监控流的报文及丢包统计;

构建报文

基础组件及报文大小设置

在Packet Editor中,可以根据需求增加不同的layer,如IP/UDP/TCP等。在高级模式中,报文大小不能直接更改,需要添加Raw信息,以padding的形式存在。如下图所示,这个报文是基于UDP的,IP和UDP端口都可以设置,如果想把报文设置成1400字节,那么在Raw里选择相应的payload类型即可,我这里用了随机Ascii;

选择需要变量的报文信息

在这种模式中,如何定义IP地址及UDP端口的变化?直接右击鼠标,选择“Field Engine”中的“Simple variable”即可,然后就可以去“Field Engine”中定义想变更的信息了;

设置变量规则

如在这里,设置初始值(init_value),max和min的值,变量步长,变量方式等,主要设置STLVmFlowVar内的内容即可;下面我拿了两个例子,一个是原IP,另一个是UDP的目的端口;

修复Checksum

当你把UDP设置变量后,会发现Checksum不正确(不会变化,一直保持一个固定值),导致路由器或交换机直接把报文drop掉,此问题需要在“Field Engine”中选择一个变量进行修复,如下所示:

流量统计信息

端口统计

在这里可以根据端口来统计总共的流量

基于流的统计

这个比端口统计要友善的多,可以直接看到流的drop信息,这个流是基于PG ID来区分的;不过有个问题就是没办法把这个数据直接导出或复制到Excel,这点不是特别人性化,希望以后可以改善(话说目前GUI和程序内核版本还是差了几个小版本的…);

流量图展示

这个类似专业的流量测试仪,可以通过图形直接体现流的收/发/丢包等信息,非常不错,但有个问题,pps这块感觉随着时间推进,会出现抖动,此问题需要等有测试环境再研究下了;

通过Trex-console控制流量

对于上面的那个问题,GUI的数据无法复制下来,只能截屏,不是很方便,那么是否有更好的方法呢?GUI中的配置可以导出成Yaml文件,这个Yaml文件可以直接在Trex-console中调用,只是默认输出中不带有drop信息,根据沟通,用API的方式调用就非常灵活了,关于API调用方式,等有时间并需要时在研究了;

[root@trex-161 v2.87]# ./trex-console 
......
trex>start -f /opt/trex/dc2isp.yaml -p 1 

Removing all streams from port(s) [1._]:                     [SUCCESS]


Attaching 2 streams to port(s) [1._]:                        [SUCCESS]


Starting traffic on port(s) [1._]:                           [SUCCESS]

53.42 [ms]

trex>start -f /opt/trex/isp2dc.yaml -p 0 

Removing all streams from port(s) [0._]:                     [SUCCESS]


Attaching 2 streams to port(s) [0._]:                        [SUCCESS]


Starting traffic on port(s) [0._]:                           [SUCCESS]

74.41 [ms]

trex>tui
Global Statistitcs

connection   : localhost, Port 4501                       total_tx_L2  : 0 bps                          
version      : STL @ v2.87                                total_tx_L1  : 0 bps                          
cpu_util.    : 0.01% @ 1 cores (1 per dual port)          total_rx     : 0 bps                          
rx_cpu_util. : 0.0% / 0 pps                               total_pps    : 0 pps                          
async_util.  : 0.11% / 10.04 Kbps                         drop_rate    : 0 bps                          
total_cps.   : 0 cps                                      queue_full   : 0 pkts                         

Streams Statistics

  PG ID    |         1         |         2         |         3         |         4         
-----------+-------------------+-------------------+-------------------+------------------
Tx pps     |             0 pps |             0 pps |             0 pps |             0 pps 
Tx bps L2  |             0 bps |             0 bps |             0 bps |             0 bps 
Tx bps L1  |             0 bps |             0 bps |             0 bps |             0 bps 
---        |                   |                   |                   |                   
Rx pps     |             0 pps |             0 pps |             0 pps |             0 pps 
Rx bps     |             0 bps |             0 bps |             0 bps |             0 bps 
----       |                   |                   |                   |                   
opackets   |               242 |               242 |               241 |               241 
ipackets   |                 0 |                 0 |                 0 |                 0 
obytes     |             22990 |             19360 |            337400 |            289200 
ibytes     |                 0 |                 0 |                 0 |                 0 
-----      |                   |                   |                   |                   
opackets   |          242 pkts |          242 pkts |          241 pkts |          241 pkts 
ipackets   |            0 pkts |            0 pkts |            0 pkts |            0 pkts 
obytes     |          22.99 KB |          19.36 KB |          337.4 KB |          289.2 KB 
ibytes     |               0 B |               0 B |               0 B |               0 B 

status:  /

Press 'ESC' for navigation panel...
status: 

tui>
本文出自 Frank's Blog

版权声明:


本文链接:Trex building packets by advance mode in GUI
版权声明:本文为原创文章,仅代表个人观点,版权归 Frank Zhao 所有,转载时请注明本文出处及文章链接
你可以留言,或者trackback 从你的网站

留言哦

blonde teen swallows load.xxx videos