提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
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安装
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-configsudo apt install libnuma-dev
5.DPDK源码编译
命令如下:
cd dpdk-23.11
meson build
cd build
ninja
sudo ninja installsudo 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 2For 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:58platform:
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 cpsExpected-PPS : 0.00 pps
Expected-CPS : 0.00 cps
Expected-BPS : 0.00 bpsActive-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.1help(帮助命令,显示所支持的命令,如:发包命令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。