DPDK调用rte_pktmbuf_free释放MBUF时出现编译错误如何解决
问题根因
这个编译错误的核心是当前编译参数未启用SSSE3指令集支持:DPDK的rte_memcpy高性能实现用到了SSSE3指令集中的palignr指令,对应报错中的__builtin_ia32_palignr128编译器内置函数,该函数必须在编译时指定-mssse3参数才能正常编译。
注释掉rte_pktmbuf_free代码后编译正常的原因是:rte_pktmbuf_free的执行路径会调用到优化版本的rte_memcpy,注释后这段涉及SIMD优化的代码不会被编译进目标文件,自然不会触发指令集检查报错。
解决方法
- 首选方案:在编译参数中添加SSSE3指令集支持,x86_64架构下直接在Makefile的CFLAGS中加入
-mssse3即可;如果使用meson构建DPDK程序,确认构建配置未禁用x86 SIMD优化。 - 适配老硬件方案:如果运行程序的CPU确实不支持SSSE3指令集(x86架构2006年之后发布的CPU基本都支持SSSE3),可以重新编译DPDK时禁用SIMD优化,开启配置项
RTE_LIBRTE_EAL_DISABLE_SIMD,或指定-march参数为当前运行CPU的架构,让编译器自动适配支持的指令集。 - 32位程序适配:如果你正在编译32位的DPDK程序,需要同时添加
-m32 -mssse3两个编译参数。
额外注意:你提供的代码片段中,分配的mbuf指针变量名为
m,但释放时传入的是packet_data_mbuf,请确保编译通过后检查该指针的合法性,避免出现野指针访问问题。
内容的提问来源于stack exchange,提问作者Jimmy
相关产品推荐
相关产品推荐

