DPDK and 发包软件环境指南

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、测试拓扑图

二、VirtualBox的网卡配置

三、DPDK支持的网卡

四、DPDK安装

1.DPDK向导

1). 英文向导

2). 中文向导

2.DPDK源码下载

3.DPDK源码解压

4.相关依赖包安装

5.DPDK源码编译

6.DPDK示例编译

五、dpdk-kmods安装

1.dpdk-kmods下载

2.dpdk-kmods编译

3.gcc12安装

4.dpdk-kmods安装

5.dpdk-kmods错误解决

六、分配大页内存

七、DPDK绑定网口

八、DPDK解绑定网口

九、DPDK TestPMD

1.概述

1).转发模式

2).Run dpdk-testpmd

2.常用命令

3.Test Case1

1).测试目的

2).测试Topo

3).测试和配置步骤

4.Test Case2

1).测试目的

2).测试Topo

3).测试和配置步骤

十、DPDK L2FWD 

1.概述

1).Run dpdk-l2fwd

2.常用命令

3.Test Case1

1).测试目的

2).测试Topo

3).测试和配置步骤

十一、Trex部署

1.Trex包下载

2.Trex包解压

3.绑定网口并配置 

4.如需修改网卡请编辑配置文件 

1).单实例 

2).多实例

第一个实例,也可以完全采用默认的参数:

5.启动trex

1).先启动trex主程序

2).开启TRex客户端程序

3).客户端中start

4).客户端中stop 

5).客户端中tui 查看实时动态统计

6).客户端中stats可查看流量情况 

7).主程序界面也可以看到实时流量统计 

总结


前言

Ubuntu版本信息:

cat /etc/issue

Ubuntu 22.04.4 LTS \n \l

uname -a

6.5.0-25-generic #25~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Feb 20 16:09:15 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

VirtualBox7.0.14 r161095 (Qt5.15.2)


提示:以下是本篇文章正文内容,下面案例可供参考

一、测试拓扑图

二、VirtualBox的网卡配置

如果使用到了VirtualBox,请参考下面设置网卡:

网卡1:用于上公网,ssh等控制

             连接方式:桥接网卡

             名称:WIFI

             混在模式:拒绝

网卡2:用于DPDK测试

             连接方式:桥接网卡

             名称:笔记本的有线网口或USB扩展网口

             混在模式:全部允许

网卡3:用于DPDK测试

             连接方式:桥接网卡

             名称:笔记本的有线网口或USB扩展网口

             混在模式:全部允许

三、DPDK支持的网卡

Intel网卡

参见:dpdk support intel nics

四、DPDK安装

1.DPDK向导

1). 英文向导

Getting Started Guide for Linux — Data Plane Development Kit 17.05.2 documentation

2). 中文向导

Linux平台上DPDK入门指南 — dpdk 0.11 documentation

2.DPDK源码下载

23.11.0:dpdk-23.11.tar.xz : DPDK

3.DPDK源码解压

tar -xvf dpdk-23.11.tar.xz

4.相关依赖包安装

命令如下:

sudo apt install meson
sudo apt install python3-pyelftools
sudo apt install pkg-config

sudo apt install libnuma-dev

5.DPDK源码编译

命令如下:

cd dpdk-23.11
meson  build
cd build
ninja
sudo ninja install

sudo ldconfig

//查看DPDK安装的版本

pkg-config --modversion libdpdk

卸载只需执行 ninja uninstall 即可

6.DPDK示例编译

命令如下:

cd dpdk-23.11/build
meson configure -Dexamples=all
or
meson configure -Dexamples=helloworld,l2fwd
ninja

编译完的app在build/examples下 直接执行app即可

五、dpdk-kmods安装

1.dpdk-kmods下载

git clone http://dpdk.org/git/dpdk-kmods

2.dpdk-kmods编译

命令如下:

cd dpdk-kmods/linux/igb_uio

make

得到igb_uio.ko 

3.gcc12安装

有些时候gcc11编译不过kmods,可以安装gcc12,并把gcc切换到gcc12后进行编译,如果编译成功,请忽略此步骤。

sudo apt install gcc-12
sudo apt install g++-12
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 1 --slave /usr/bin/g++ g++ /usr/bin/g++-11
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 2 --slave /usr/bin/g++ g++ /usr/bin/g++-12
sudo update-alternatives --config gcc

4.dpdk-kmods安装

命令如下:

//装载内核模块

sudo modprobe uio
sudo insmod dpdk-kmods/linux/igb_uio/igb_uio.ko intr_mode=legacy


注意: 加载驱动时要带着参数intr_mode=legacy,如果不加参数,将会有问题!

5.dpdk-kmods错误解决

如果出现错误: insmod: ERROR: could not insert module igb_uio.ko: Invalid parameters

首先使用 uname -r查看当前内核版本
再使用modinfo igb_uio.ko查看vermagic字段是否当前内核版本一致,发现不一致
重新编译dpdk,编译后,查看一致性

六、分配大页内存

sudo mkdir -p /dev/hugepages

sudo mount -t hugetlbfs none /dev/hugepages

sudo echo 1024 | sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

七、DPDK绑定网口

//查看网卡信息

lspci | grep Ethernet
lshw -class network -businfo
usertools/dpdk-devbind.py --status

//绑定网卡到DPDK

sudo usertools/dpdk-devbind.py -b igb_uio enp13s0f0 enp13s0f1

八、DPDK解绑定网口

比如:网卡 enp13s0f0 和 enp13s0f1被 DPDK 占用后,ifconfig 里就没有了,要恢复需要进行如下操作

lspci | grep Eth
两个网卡设备号是 0000:0d:00.0 和 0000:0d:00.1
//解绑两个网卡的 igb_uio 驱动,绑定 e1000 驱动:
dpdk-devbind.py -u 0d:00.0 0d:00.1
dpdk-devbind.py -b e1000  0d:00.0 0d:00.1
//启动网卡
ifconfig enp13s0f0 up
ifconfig enp13s0f1 up

九、DPDK TestPMD

1.概述

dpdk-testpmd是dpdk自带的一个例子程序,用来进行dpdk的包转发测试

1).转发模式

TestPMD有3中不同的转发模式。

Input/output mode: 收发模式,这是TestPMD启动时默认的模式,这种模式下cpu的核从网卡的一个口收包,再从另一个口转发出去,统一网卡即可收包又可发包。
Rx-only mode: 接收模式,这种模式下TestPMD收到包后就丢弃。
Tx-only mode: 发送模式,这种模式下TestPMD产生64字节长度的IP包从网卡的网卡发出。
后两种模式分别用于收发测试。

这三种模式外,其它模式详见 TestPMD documentation.

2).Run dpdk-testpmd

sudo build/app/dpdk-testpmd -l 0,1,2,3 -n 4 -- -i --nb-cores=2

“--”之前的参数为EAL参数;
-l EAL的逻辑核(dpdk中类似于线程的概念)列表。0,1表示有两个逻辑核;

-c:通过十六进制的掩码来设置使用哪些cpu核,就上述的-c 0xf,0xf的二进制是1111,假设我有8个核,所以就是使用0~3号核。
-n EAL的内存通道数(设置每个socket的内存通道数),一般为4;

-b:表示不会使用黑名单中的pci设备

-a:表示白名单中的pci设备
“--”之后的是testpmd程序本身的参数;
-i 启用交互模式,此时可以使用命令行;
--nb-cores 用于转发的逻辑核数目。注意testpmd本身需要一个逻辑核用于交互,所以这个参数的值应>0,≤总逻辑核数-1;
--nb-ports 用于转发的网络接口。如果不指定则使用所有可用的接口;2表示用前两个接口。

–stats:如果不开启交互模式,设置stats值,用来每个一段时间统计信息
–nb:设置转发内核的数量
–rxq:设置rx队列的数量
–txq:设置tx队列的数量

-h EAL参数帮助

-- -h testpmd程序本身的参数帮助

2.常用命令

//查看转发配置

testpmd> show config fwd

//使用“start”命令开启转发

testpmd> start

//stop命令后停止程序,此时会显示出各个端口的独立统计和总体统计

testpmd> stop

//查看当前所有在用端口的相关统计

testpmd> show port stats all

//清除当前所有在用端口的相关统计

testpmd> clear port stats all

//查看当前转发相关统计

testpmd> show fwd stats all

//清除当前转发相关统计

testpmd> clear fwd stats all

//设置TestPMD为接收模式

testpmd> stop

testpmd> set fwd rxonly
testpmd> start

//获取帮助信息

testpmd> help

testpmd> help display

 

3.Test Case1

1).测试目的

TestPMD应用程序把两个以太网口连接到外部的流量发生器。在不同的网络工作负载下测试两块网卡间的数据收发,吞吐量和功能。

2).测试Topo

3).测试和配置步骤

sudo build/app/dpdk-testpmd -l 0,1,2,3 -n 4 -- -i --nb-cores=2

//进入testpmd命令行

testpmd> show config fwd

testpmd> start

testpmd> clear port stats all

testpmd> show port stats all

testpmd> clear fwd stats all

testpmd> show fwd stats all

在另外一端的PC机或Virtualbox上run trex或 pktgen

//使用trex或pktgen发包进行测试,详细命令和参数使用,参照trex和pktgen章节

4.Test Case2

1).测试目的

TestPMD应用程序把两个以太网端口连成环回模式。 在没有外部流量发生器的情况下检查网络设备的接收和传输功能,测试同一块网卡两个口之间的数据收发。

2).测试Topo

3).测试和配置步骤

sudo build/app/dpdk-testpmd -l 0,1,2,3 -n 4 -- -i --nb-cores=2

//进入testpmd命令行

testpmd> show config fwd

//使用参数tx_first,无参数时,有时候无法发包

testpmd> start tx_first

testpmd> clear port stats all

testpmd> show port stats all

testpmd> clear fwd stats all

testpmd> show fwd stats all

十、DPDK L2FWD 

1.概述

dpdk-l2fwd是DPDK中的非常经典的例子。二层转发模型。

就是在相邻的网卡接口间互相传递报文。

网口0和网口1之间报文互传。

网口2和网口3之间报文互传。

............

1).Run dpdk-l2fwd

sudo build/examples/dpdk-l2fwd -l 0-1 -n 2 -a 0d:00.0 -a 0d:00.1 -- -q 1 -p 0x3 --no-mac-updating -P

注意:一定要加入参数 -P 打开端口混杂模式(允许全部mac地址通过,而不是只是接收本端口的mac地址)

EAL options

  • -l:测试的端口list(0,1或0-1表示port0和port1;0,1,2,3或0-3表示port0,port1,port2和port3)

  • -c:指定分配给DPDK使用的逻辑数 (-c 1 只使用一个cpu core) (-c 和 -l是互斥的,不能同时使用)
  • -n:每个CPU的内存通道数
    • DPDK EAL的默认参数,必须参数为-c COREMASK -n NUM。
    • COREMASK:一个十六进制位掩码表示分配的逻辑内核数量。
    • NUM:一个十进制整数表示内存通道数量。

--:(破折号)分开了EAL参数和应用程序参数

  • -p PORTMASK
    PORTMASK:一个十六进制位掩码表示分配的端口 (-c 0x3 表示port0和port1)。

  • -q NQ
    NQ:表示分配给每个逻辑内核的收发队列数量(-q 8 表示8个队列)。

  • -T t
    t: 表示打印统计数据到屏幕上的时间间隔,默认为10秒。

2.常用命令

sudo build/examples/dpdk-l2fwd -l 0-1 -n 2 -a 0d:00.0 -a 0d:00.1 -- -q 1 -p 0x3 --no-mac-updating -P

3.Test Case1

1).测试目的

2).测试Topo

3).测试和配置步骤

sudo build/examples/dpdk-l2fwd -l 0-1 -n 2 -a 0d:00.0 -a 0d:00.1 -- -q 1 -p 0x3 --no-mac-updating -P

在另外一端的PC机或Virtualbox上run trex或 pktgen

//使用trex或pktgen发包进行测试,详细命令和参数使用,参照trex和pktgen章节

十一、Trex部署

TRex是cisco基于Intel dpdk开发的软件程序

1.Trex包下载

Index of /trex/release (cisco.com) 下载v3.04.tar.gz

2.Trex包解压

mkdir trex

cd trex

tar -xvf ../Downloads/v3.04.tar.gz

3.绑定网口并配置 

//装载内核模块

sudo modprobe uio
sudo insmod ../../dpdk-kmods/linux/igb_uio/igb_uio.ko

//绑定网卡到DPDK

sudo usertools/dpdk-devbind.py -b igb_uio enp13s0f0 enp13s0f1

sudo ./dpdk_setup_ports.py -i

weiy@weiy-VirtualBox:~/work/trex/v3.04$ sudo ./dpdk_setup_ports.py -i
By default, IP based configuration file will be created. Do you want to use MAC based config? (y/N)y
+----+------+---------+-------------------+-------------------------------------+---------+----------+----------+
| ID | NUMA |   PCI   |        MAC        |                Name                 | Driver  | Linux IF |  Active  |
+====+======+=========+===================+=====================================+=========+==========+==========+
| 0  | -1   | 00:03.0 | 08:00:27:e4:f1:fb | 82540EM Gigabit Ethernet Controller | e1000   | enp0s3   | *Active* |
+----+------+---------+-------------------+-------------------------------------+---------+----------+----------+
| 1  | -1   | 00:08.0 | 08:00:27:99:33:25 | 82540EM Gigabit Ethernet Controller | igb_uio |          |          |
+----+------+---------+-------------------+-------------------------------------+---------+----------+----------+
| 2  | -1   | 00:09.0 | 08:00:27:40:93:58 | 82540EM Gigabit Ethernet Controller | igb_uio |          |          |
+----+------+---------+-------------------+-------------------------------------+---------+----------+----------+
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.
Enter list of interfaces separated by space (for example: 1 3) : 1 2

For interface 1, assuming loopback to its dual interface 2.
Destination MAC is 08:00:27:40:93:58. Change it to MAC of DUT? (y/N).
For interface 2, assuming loopback to its dual interface 1.
Destination MAC is 08:00:27:99:33:25. Change it to MAC of DUT? (y/N).
Print preview of generated config? (Y/n)
### Config file generated by dpdk_setup_ports.py ###

- version: 2
  interfaces: ['00:08.0', '00:09.0']
  port_info:
      - dest_mac: 08:00:27:40:93:58 # MAC OF LOOPBACK TO IT'S DUAL INTERFACE
        src_mac:  08:00:27:99:33:25
      - dest_mac: 08:00:27:99:33:25 # MAC OF LOOPBACK TO IT'S DUAL INTERFACE
        src_mac:  08:00:27:40:93:58

  platform:
      master_thread_id: 0
      latency_thread_id: 1
      dual_if:
        - socket: 0
          threads: [2,3]


Save the config to file? (Y/n)
Default filename is /etc/trex_cfg.yaml
Press ENTER to confirm or enter new file: 
File /etc/trex_cfg.yaml already exist, overwrite? (y/N)y
Saved to /etc/trex_cfg.yaml.

 上面操作修改部分看红框:

4.如需修改网卡请编辑配置文件 

1).单实例 

用默认配置文件即可

sudo vim /etc/trex_cfg.yaml

2).多实例

在同一台PC上可以运行多个Trex实例。
优点:每个server都是独立的,互相不影响。在我看来最大的优点是可以避开最多显示4(官方理由是console界面的宽度不够)端口属性的限制。如果想同时看4*n个端口,就开n个示例
限制:不是完全独立,例如一个实例运行时,另外的实例也不能运行端口配置的程序dpdk_setup。

注意启动不同实例时用--cfg /etc/xxx.yaml指定不同的配置文件,启动trex-console时,指定配置文件里面的端口号,使用默认端口号的,可以不指定:比如:./trex-console --port 4503 --async_port 4502

第一个实例,也可以完全采用默认的参数:

 第二个实例,所有的参数都要和第一个实例不冲突:

5.启动trex

1).先启动trex主程序

sudo chmod 777 /home/weiy

sudo ./t-rex-64 -i

weiy@weiy-VirtualBox:~/work/trex/v3.04$ sudo ./t-rex-64 -i
Starting Scapy server.......... Scapy server is started
The ports are bound/configured.
Starting  TRex v3.04 please wait  ... 
 set driver name net_e1000_em 
 driver capability  : TCP_UDP_OFFLOAD  SLRO 
 set dpdk queues mode to ONE_QUE 
 Number of ports found: 2
zmq publisher at: tcp://*:4500
 wait 1 sec .
port : 0 
------------
link         :  link : Link Up - speed 1000 Mbps - full-duplex
promiscuous  : 0 
port : 1 
------------
link         :  link : Link Up - speed 1000 Mbps - full-duplex
promiscuous  : 0 
 number of ports         : 2 
 max cores for 2 ports   : 1 
 tx queues per port      : 3 
 -------------------------------
RX core uses TX queue number 65535 on all ports
 core, c-port, c-queue, s-port, s-queue, lat-queue
 ------------------------------------------
 1        0      0       1       0      0  
 -------------------------------

-Per port stats table 
      ports |               0 |               1 
 -----------------------------------------------------------------------------------------
   opackets |               0 |               0 
     obytes |               0 |               0 
   ipackets |               0 |               0 
     ibytes |               0 |               0 
    ierrors |               0 |               0 
    oerrors |               0 |               0 
      Tx Bw |       0.00  bps |       0.00  bps 

-Global stats enabled 
 Cpu Utilization : 0.0  %
 Platform_factor : 1.0  
 Total-Tx        :       0.00  bps  
 Total-Rx        :       0.00  bps  
 Total-PPS       :       0.00  pps  
 Total-CPS       :       0.00  cps  

 Expected-PPS    :       0.00  pps  
 Expected-CPS    :       0.00  cps  
 Expected-BPS    :       0.00  bps  

 Active-flows    :        0  Clients :        0   Socket-util : 0.0000 %    
 Open-flows      :        0  Servers :        0   Socket :        0 Socket/Clients :  -nan 
 drop-rate       :       0.00  bps   
 current time    : 5.4 sec  
 test duration   : 0.0 sec  
 

2).开启TRex客户端程序

启动TRex服务端进入 stateless 模式, 可配置-c指定CPU.

./t-rex-64  --cfg mlx5-02.yaml --ipv6 --no-ofed-check -i 
./trex-console -s 127.0.0.1 

help(帮助命令,显示所支持的命令,如:发包命令start,停止发包stop,图形化显示命令tui)
cmd -h (对于每条命令,加上-h或—help可以显示具体的帮助信息)

打开一个终端运行./trex-console

weiy@weiy-VirtualBox:~/work/trex/v3.04$ ./trex-console 

Using 'python3' 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:   v3.04 @ STL
Server mode:      Stateless
Server CPU:       1 x 12th Gen Intel(R) Core(TM) i5-1240P
Ports count:      2 x 1Gbps @ 82540EM Gigabit Ethernet Controller    

-=TRex Console v3.0=-

Type 'help' or '?' for supported actions

详细的帮助:

模式是以下之一:
    -f <file> :带有流量模板配置的 YAML 文件(将以“有状态”模式运行 TRex)
    -i : 在“无状态”模式下运行 Trex
可用选项有:
 --astf :启用高级状态模式。配置文件应该是 py 格式而不是 YAML 格式
 --astf-server-only :ASTF 服务仅启用服务器端端口(1,3..)。流量不会在客户端端口上传输。
 --astf-client-mask :仅启用具有 ASTF 服务的特定客户端端口。
                              例如,设置 4 个端口。 0x1 表示仅启用端口 0。端口 2 将不会启用。
                              不能与 --astf-server-only 一起使用。

 --stl :以无状态模式启动。必须与“-i”一起提供以用于交互模式
 --active-flows :一个实验性的开关,用于增加或减少活动流的数量。
                              由于流量调度器的量化,它不准确,并且在某些情况下不起作用。
                              示例 --active-flows 500000 将活动流的大概范围设置为 ~0.5M
 --allow-coredump : 允许创建核心转储
 --arp-refresh-period :为我们的地址发送免费 ARP 之间的时间间隔(以秒为单位)。值 0 表示“从不发送”
 -c <num>> :为每个端口对分配的硬件线程数。覆盖配置文件中的“c”参数
 --cfg <file> : 使用文件作为 TRex 配置文件而不是默认的 /etc/trex_cfg.yaml
 --checksum-offload :已弃用,默认启用。使用 DPDK 启用 IP、TCP 和 UDP tx 校验和卸载。这需要所有使用的接口来支持这个
 --checksum-offload-disable :使用 DPDK 禁用 IP、TCP 和 UDP tx 校验和卸载。这需要所有使用的接口来支持这个
 --tso-disable : 禁用 TSO(高级 TCP 模式)
 --lro-disable : 禁用 LRO(高级 TCP 模式)
 --client-cfg <file> :描述客户端配置的 YAML 文件
 --close-at-end :调用 rte_eth_dev_stop 并在退出时关闭。在旧版本中调用这些函数会导致链接断开问题,
                               所以我们现在不默认调用它们。如果有人认为这对他有帮助,请将此作为选项
                               这是它的临时选项。将来会被移除
 -d :以秒为单位的测试持续时间(默认为 3600)。也看看--nc
 -e : 与 -p 类似,但 src/dst IP 将根据端口选择(即在客户端端口上发送所有带有客户端 src 和服务器 dest 的数据包,反之亦然在服务器端口上
 --flip :每个流都将从客户端发送到服务器,从服务器发送到客户端。当流量不对称时,这可以实现更好的端口利用率
 --hdrh :使用高动态范围直方图报告延迟 (http://hdrhistogram.org)
 --hops <hops> :如果启用了 rx 检查,则可以分配跳数。详见说明书
 --iom <mode> : 服务器输出的 IO 模式 [0- 静默, 1- 正常, 2- 短]
 --ipv6 : 在 ipv6 模式下工作
 -k <num> :在开始测试之前运行“预热”流量 num 秒。
                               仅适用于延迟测试(-l 选项)
-l <rate> : 与测试并行,运行延迟检查,从每个接口以每秒速率发送数据包
 --l-pkt-mode <0-3> : 设置发送延迟数据包的模式
      0(默认)发送 SCTP 数据包
      1 发送ICMP请求包
      2 从客户端发送ICMP请求,从服务器端响应(用于防火墙)
      3 从双方发送序列 ID 为 0 的 ICMP 请求
    零率意味着没有延迟检查
 --learn(已弃用)。替换为 --learn-mode。要获得较旧的行为,请使用 --learn-mode 2
 --learn-mode [1-3] :用于在 NAT 环境中工作。动态学习 DUT 完成的 NAT 转换
      1 在 TCP 流的情况下,在第一个 SYN 中使用 TCP ACK 来传递 NAT 转换信息。初始 SYN 数据包必须是 TCP 流中的第一个数据包
           对于 UDP 流,NAT 转换信息将在流中第一个数据包的 IP ID 字段中传递。这意味着这个字段被TRex改变了
      2 添加特殊的 IP 选项,将 NAT 转换信息传递给每个流的第一个数据包。如果某些防火墙丢弃带有 IP 选项的数据包,则它们将无法在某些防火墙上工作
      3 与 1 类似,但不支持服务器-> 客户端方向上的序列号随机化。性能(流量/秒)优于 1
 --learn-verify : 测试 NAT 转换机制。当设置中没有 NAT 时应该使用
 --limit-ports :限制使用的端口数。必须是偶数(TRex 总是使用端口对)
 --lm :应该发送流量的核心的十六进制掩码
                              例如:0x5 的值将导致仅端口 0 和 2 发送流量
 --lo : 只运行延迟测试
 -m <num> :比率乘数。将模板的基本速率乘以这个数字
 --mbuf-factor : 数据包内存的因素
 --nc : 如果设置,在终止之前不会等待所有流关闭 - 有关更多信息,请参阅手册
 --no-flow-control-change :默认情况下,TRex 禁用流量控制。如果给出这个选项,它不会触及它
 --no-hw-flow-stat :仅与 Intel x710 无状态模式相关。不要将硬件计数器用于流量统计
                            :启用此项将支持较低的流量速率,但也会报告 RX 字节计数统计信息。请参阅手册了解更多详情
 --no-key : 守护进程模式,不要从键盘获取输入
 --no-ofed-check : 禁用 OFED 版本检查
 --no-scapy-server : 在无状态时禁用 Scapy 服务器隐式启动
 --scapy-server : 在 ASTF 启用 Scapy 服务器隐式启动
 --no-termio : 不要使用 TERMIO。在需要使用 GDB 和 ctrl+c 时很有用。
 --no-watchdog : 禁用看门狗
 --rt : 实时优先运行 TRex DP/RX 内核
 -p :从同一接口(在客户端广告服务器端口之间随机选择)发送所有流数据包,而不更改它们的 src/dst IP
 -pm :平台因素。如果设置中有拆分器,则可以将总结果乘以这个系数
                              例如 --pm 2.0 将乘以这个因子中的所有结果 bps
 --prefix <nam> :用于在同一台机器上运行多个 TRex 实例。每个实例应该有不同的名称
 --prom : 为 ASTF/STF 模式启用混杂
 -pubd : 禁用监视器发布者
 --queue-drop :不要在失败时重试发送数据包(队列已满等)
 --rpc-log <file> : 将 RPC 对话的日志保存在日志文件中
 --rx-check <rate> : 启用 rx 检查。 TRex 将以 1/速率采样流并检查顺序、延迟等
 -s:单核。仅运行一个数据路径核心。用于调试
 --send-debug-pkt <proto> :不要运行流量生成器。只需发送调试数据包并转储接收队列
                              支持的协议有 1 为 icmp,2 为 UDP,3 为 TCP,4 为 ARP,5 为 9K UDP
 --sleeps :在调度程序中使用睡眠而不是忙等待(不太准确,更省电)
 --software : 不要配置任何硬件规则。在这种模式下,我们使用 1 个内核,每个端口一个 RX 队列和一个 TX 队列
 --unbind-unused-ports :自动取消绑定同一网卡中所有未使用的绑定端口,而不是错误退出(仅限 i40e)
 -v <verbosity level> :值越高,打印更多调试信息
 --vlan :仅与 Intel 82599 10G NIC 的无状态模式相关
                              在配置每个流的流统计和延迟规则时,假设所有流都使用 VLAN
 -w <num> : 在接口初始化和发送流量之间等待 num 秒,默认为 1

示例:基本 trex 运行 20 秒,乘数为 10
  t-rex-64 -f cap2/dns.yaml -m 10 -d 20

3).客户端中start

 trex> start -f stl/bench.py -m 100% -d 60 -t vm=cached,size=1518


###################################
-m 表示使用多大的带宽,对于10G网卡,90%表示发送9G左右的流量。
-d 测试时间,60秒后自动停止发包。
-f 指定脚本,脚本用于构造发送什么样的数据。
-t 这些参数会传给 -f 参数所指定的脚本,对于 stl/bench.py 我们可以使用 size 指定数据包大小。

其他示例:

start -f stl/bench.py -t size=64,vm=cached —p 0 -m 100%
IPv6 SYN-FLOOD
start -m 100% -p 0 --force -f stl/syn_attack.py 
IPv6 UDP
start -m 100% -p 0 --force -f stl/imix_ipv6.py
IPv6 SYN-FLOOD
start -m 100% -p 0 --force -f stl/syn_ipv6.py  
 

帮助:

trex>start -h 
usage: start [-h] [-p PORTS [PORTS ...] | -a] [--total] [--force] -f FILE
             [-d TIME] [-t T1=VAL[,T2=VAL ...]] [-m MULT] [-n]
             [--pin | --core_mask CORE_MASK [CORE_MASK ...]] [--sync]

Start selected traffic on specified ports on TRex

optional arguments:
  -h, --help            show this help message and exit
  -p PORTS [PORTS ...], --port PORTS [PORTS ...]
                        A list of ports on which to apply the command
  -a                    Set this flag to apply the command on all available
                        ports
  --total               traffic will be divided between all ports specified
  --force               Set if you want to stop active ports before appyling
                        command.
  -f FILE               File path to use
  -d TIME               Set duration time for job.
  -t T1=VAL[,T2=VAL ...]
                        Sets tunables for a profile. Example: '-t
                        fsize=100,pg_id=7'
  -m MULT, --multiplier MULT
                        Multiplier should be passed in the following format:
                        [number][<empty> | bps | kbps | mbps | gbps | pps |
                        kpps | mpps | % ]. no suffix will provide an absoulute
                        factor and percentage will provide a percentage of the
                        line rate. examples '-m 10', '-m 10kbps', '-m
                        10kbpsl1', '-m 10mpps', '-m 23% ' '-m 23%' : is 23% L1
                        bandwidth '-m 23mbps': is 23mbps in L2 bandwidth
                        (including FCS+4) '-m 23mbpsl1': is 23mbps in L1
                        bandwidth
  -n, --dry             Dry run - no traffic will be injected
  --pin                 Pin cores to interfaces - cores will be divided
                        between interfaces (performance boot for symetric
                        profiles)
  --core_mask CORE_MASK [CORE_MASK ...]
                        Core mask - only cores responding to the bit mask will
                        be active
  --sync                Run the traffic with syncronized time at adjacent
                        ports. Need to ensure effective ipg is at least 1000
                        usec.

4).客户端中stop 

//停止Tx任务

trex>stop -a

5).客户端中tui 查看实时动态统计

实时全局统计 & 端口统计
trex>tui
trex>quit

6).客户端中stats可查看流量情况 

trex>stats

参数说明:

trex>stats  -h
usage: stats [-h] [--port PORTS [PORTS ...] | -a]
             [-g | -p | --ps | -s | -l | --lh | -c | -m | -x | --xz]

Show various statistics

optional arguments:
  -h, --help            show this help message and exit
  --port PORTS [PORTS ...]
                        A list of ports on which to apply the command
  -a                    Set this flag to apply the command on all available
                        ports
  -g                    Fetch only global statistics 获取全局统计
  -p                    Fetch only port statistics 获取端口状态
  --ps                  Fetch only port status data 获取端口统计
  -s                    Fetch only streams stats
  -l                    Fetch only latency stats
  --lh                  Fetch only latency histogram
  -c                    Fetch only CPU utilization stats
  -m                    Fetch only MBUF utilization stats
  -x                    Fetch xstats of port, excluding lines with zero values
  --xz, --zx            Fetch xstats of port, including lines with zero values

7).主程序界面也可以看到实时流量统计 


总结

本操作过程,在PC机和虚拟机VirtualBox(如果笔记本上run virtualbox,网卡不够可以外接带网口的扩展坞进行测试)上验证成功,一方发包,一方run dpdk-l2fwd,vice verse。

  • 49
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值