dpdk-pktgen 的安装和基本使用

        下面快速记录一下 dpdk-pktgen 的安装和基本使用过程。

        前置工作:安装 dpdk-20.11,可以参看 dpdk-20.11 编译和安装 教程。

        dpdk-pktgen 有独立的 git 仓库,并且可以基于 meson 和 ninja 进行构建,因此安装过程比较简单。由于 pktgen 依赖 dpdk,因此在使用时,要注意它们之间的版本对应关系,否则可能会出现编译报错问题。上面安装的是 dpdk-20.11,对应 pktgen 可以选择 pktgen-21.03.1 版本。

        安装过程如下:

$ git clone git://dpdk.org/apps/pktgen-dpdk
$ cd pktgen-dpdk
$ git checkout pktgen-21.03.1
$ meson build
$ cd build
$ ninja
$ ls -l app/pktgen  //编译出来的可执行程序
-rwxr-xr-x 1 root root 477672 10月 19 12:59 app/pktgen

        基本使用方法:

Usage: ./app/pktgen [EAL options] -- [-h] [-v] [-P] [-G] [-T] [-f cmd_file] [-l log_file] [-s P:PCAP_file] [-m <string>] 

        pktgen 支持的命令行参数还是挺多的,具体可以通过 pktgen --help 来详细查看。不过它像大多数基于 dpdk 的测试程序一样,命令行参数主要有两部分组成:

  • EAL options
  • pktgen 自有参数

        其中,EAL options 参数部分可以参看 DPDK EAL parameters,最重要的一个参数就是 -l 参数,用它来指定使用的核列表,比如:-l 1,2 或者 -l 1-2,表示使用核 1 和核 2。值得注意的是,pktgen 至少要指定两个核,因为 pktgen 需要一个核与用户进行交互,比如响应测试过程中用户的输入。
        pktgen 自有参数部分最重要的是 -m 参数,用它来指定网口与核之间的对应关系,比如:-m 2.0,表示让核 2 来处理网口 0。值得注意的是,若要指定多个对应关系(使用多个网卡和多个核),则需多次使用 -m 参数。如果要收包,最好也指定一下 -P 参数,表示让所有网口进入混杂模式,以便接收到所有数据包。

        运行效果:

$ ./build/app/pktgen -l 1-3 -- -P -m 2.0 -m 3.1

        可以在上面提供的 "Pktgen:/> " 命令交互行中进行各种设置,pktgen 支持很多命令,具体可以使用 "help" 命令进行查看,下面介绍几个常用的命令:

Pktgen:/> set 0 size 64 // 将网口 0 所发包的帧大小设置 64 字节
Pktgen:/> set 0 src ip 192.168.0.1/32 // 将网口 0 所发包的源 IP 设置为 192.168.0.1
Pktgen:/> set 0 dst ip 192.168.0.2 // 将网口 0 所发包的目的 IP 设置为 192.168.0.2
Pktgen:/> set 0 count 100000000  // 将网口 0 的发包数设置为 100000000
Pktgen:/> set 0 rate 20 // 将网口 0 的发包速率设置为最大速率的 20%
Pktgen:/> start 0 // 启动网口 0 的发包过程
Pktgen:/> stop 0 // 停止网口 0 的发包过程
Pktgen:/> stp // 停止所有网口的发包过程
Pktgen:/> clr // 清除屏幕上的收发包统计信息
Pktgen:/> quit // 退出 pktgen 程序

        MBits/s 速率统计问题

        在 pktgen-dpdk 中通过 "set 0 size xxx" 设置发包包长时,其长度还包含了 4 字节的帧校验序列(CRC)。因此,在转发测试过程中,若将 pktgen 发包包长设置为 64 字节,则实际发出的数据包的有效载荷长度为 60 字节,对端转发回来、pktgen 收到的数据包的长度也是 60 字节(不包括 CRC 长度)。

        同时,在 pktgen 中,统计收到的数据帧长度时,还包含了以下内容:7 字节的前同步码、1 字节的帧开始定界符、4 字节的帧校验序列、12 字节的帧间距,一共 24 字节。而在 testpmd 中统计发出的数据帧长度时,只额外包含了 4 字节的帧校验序列。

        因此,在观察转发速率时,会发现 pktgen 中统计的接收 bps 和 testpmd 中统计的发送 bps 相差较大。具体而言,如果在 pktgen 中将发包大小设置为 64 字节(包含 CRC 长度),则 pktgen 中看到的收包速率是 testpmd 看到的发包速率的 (60+24)/(60+4) = 1.3 倍左右。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值