DPDK jumbo test

本文介绍了在DPDK环境中使用pktgen和testpmd进行jumbopacket测试的两种方法,包括TX和RX模式,以及解决DPDK19segmentationfault的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做DPDK jumbo部分内容,需要jumbo test的测试方法,在网络上搜索了很久,没有特别详尽的方法,所以我来做一下介绍,供大家参考。直入主题,jumbo test我介绍下面两种测试方法。

1 pktgen to testpmd

这就是最经典的一个测试方法。pktgen发包,testpmd收包。

1.1 pktgen作为TX

pktgen发包,他的命令为:

./build/app/pktgen -l 0-3 -n 3 -- -P -m"1.0" -j

也就是需要在之前的基础上加上-j option,这并不复杂,但是有一个注意点,我不清楚为什么,对于DPDK 19而言,利用这一cmd发包的时候会有segmentation fault。所以我是利用DPDK 21 with pktgen 22来发送的,这里ok。

启动pktgen之后,输入下述命令,这里的x都是需要你们根据需要来填入的数字,当然之前的命令也是,不绝对,主要就是一个-j的option。

/* 设置目标的mac地址 */
set 0 dst mac xx:xx:xx:xx:xx:xx:xx
/* 设置要发的包数 */
set 0 count xxxx
/* 设置要发的包的大小 */
set 0 size xxxx
/* 开始发包 */
start 0

如下图所示,就是这样,这里我设置的size为9000,发送的包数为10000。 

1.2 testpmd作为RX 

testpmd作为rx,他的命令为:

./x86_64-native-linux-gcc/app/testpmd -- -i --max-pkt-len=9000

 同样的,这里唯一重要的就是--max-pkt-len=xxxx的设置,我这里设置的是9000,其他的option大家根据需要选择。

启动testpmd之后,因为是作为rx,所以执行下述cmd:

/* 设置rxonly */
set fwd rxonly
/* 这个可有可无 */
set promisc all off
/* 这里看port的数据*/
show port stats 0
/* 开始 */
start

如下图所示, 即为收到了包之后的情况,从图中可以看出,收到了两笔,每笔都是10000个包,大小也可以对应上。

 2 pktgen互打

这个就简单很多,pktgen的命令还是和之前一样加上-j。进入app后,只要设置好size,就可以直接str了。这里可以看到,一切正常,jumbos也开始计数。

 

当然了,你也可以选择pktgen to pktgen这种做法,这是ok的,我也有测试过。

 

如果觉得这篇文章有用的话,可以点赞、评论或者收藏,万分感谢,goodbye~

### 关于DPDK测试文档和方法 #### 测试环境配置 为了成功运行基于DPDK的应用程序并执行相关测试,需确保已正确设置DPDK环境。对于启用加密功能的Nvidia网卡(如mlx5_pci驱动),需要特别配置DPDK环境以支持加密操作[^1]。这可以通过SPDK事件库完成,具体方式是调整`spdk_app_opts`结构体中的`env_context`成员变量。 另一种实现途径是在命令行界面传递相应的参数,例如通过指定设备BDF地址、类别以及密钥文件路径来允许特定硬件资源被访问。典型的形式如下所示: ```bash --allow=<BDF>,class=<device_class>,wcs_file=<path_to_credentials> ``` 例如: ```bash --allow=0000:01:00.0,class=crypto,wcs_file=/path/credentials.txt ``` 此过程有助于验证DPDK环境中加密模块的功能性及其与其他组件的兼容性。 #### OVS-DPDK集成与CentOS平台应用实例 针对CentOS 6.5操作系统下的OVS-DPDK部署指南提供了详细的安装说明和依赖项解析流程[^2]。该文档不仅涵盖了基础构建步骤还涉及性能调优建议,这对于开展全面的DPDK功能性及效能评估具有重要指导意义。 此外,在AMD CPU架构上优化DPDK表现的相关讨论也值得关注[^3]。这些资料可能提供额外视角帮助理解不同计算平台上如何最大化利用DPDK框架优势。 #### 示例代码片段展示基本测试逻辑 下面给出一段简单的C语言代码用于演示如何初始化EAL(Environment Abstraction Layer),这是任何进一步开发之前必不可少的基础工作之一: ```c #include <rte_eal.h> int main(int argc, char **argv) { int ret; // Initialize EAL. ret = rte_eal_init(argc, argv); if (ret < 0) rte_exit(EXIT_FAILURE, "Error during EAL initialization\n"); printf("EAL initialized successfully.\n"); return 0; } ``` 上述例子展示了最基本的入口点创建过程,实际项目中还需加入更多复杂业务处理部分才能构成完整的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值