testpmd的发包存在txonly与flowgen两种模式,其中txonly只能占用端口后只发不收的,所以相应的也就不太好统计;flowgen可以创立字段步进跳变的报文流量,也可以执行对应的端口统计。
值得注意的是,testpmd所操作的对像包含3个前提:
vfio-pci用于进行网卡的IO独立,加载这个模块ko后可以实现本地kernel的网卡驱动卸载+用户态网卡驱动映射(dpdk-devbind.py脚本实现)
大页内存创立与挂载,完成mounts文件中路径的描述以及大页内存的申明后,EAL初始化的过程中会在指定路径下调用mmap系统函数创立mmap文件句柄,并提供给testpmd使用
使用dpdk-devbind.py命令进行port端口的绑定、端口的状态查询
在完成端口绑定后,执行testpmd命令:
dpdk-testpmd -l 0-3 -n 4 -- -i --portmask=0x3然后,可以在testpmd中进行转发设置
# 开启混杂模式,确保 Port 1 能收到所有包(不管 MAC 地址是否匹配)
set promisc all on
# 设置 Port 0 为仅发送模式 (自源性发包)
set fwd txonly port 0
# 设置 Port 1 为仅接收模式 (用于统计接收流量)
set fwd rxonly port 1
# 设置发送包的大小 (例如 64 字节,最小以太网帧)
set txpkts 64
# 设置每次突发发送的包数量 (根据性能需求调整,例如 32 或 64)
set burst 32
# 启动所有端口
port start all
# 开始转发/发送
start
# 查看所有端口的统计信息
show port stats all
或者使用flowgen
# 启用flowgen端口
set fwd flowgen port 0
# 设置流的数量
set nbcore <N>
# 同样设置流的信息
set txpkts 64 # 设置包长为 64 字节
set burst 32 # 设置突发大小为 32
# 设置目的MAC地址
set eth-peer <port_id> <mac_address>
# 启动端口和转发
port start all
start
# 查看所有端口的统计信息
show port stats all