dpdk - DPDK:释放 MBUF 时出现编译错误
问题描述
我正在尝试从分配的池中创建一个简单的 MBUF 并释放 MBUF,但是遇到以下编译问题。如果我注释掉 mbuf_free,程序编译得很好。请问有什么指针吗?
代码 :
m = rte_pktmbuf_alloc(pktmbuf_pool);
if (m == NULL)
printf("Cannot allocate mbuf");
if (rte_pktmbuf_pkt_len(m) != 0)
printf("Bad length");
data = rte_pktmbuf_append(m, packet_len);
if (data == NULL)
printf("Cannot append data");
....
rte_pktmbuf_free(packet_data_mbuf); <<<<< COMPLAINS here
错误:
/usr/local/include/dpdk/rte_memcpy.h: In function ‘__rte_pktmbuf_free_direct’:
/usr/local/include/dpdk/rte_memcpy.h:595:64: error: ‘__builtin_ia32_palignr128’ needs isa option -m32 -mssse3
_mm_storeu_si128((__m128i *)((uint8_t *)dst + 0 * 16), _mm_alignr_epi8(xmm1, xmm0, offset)); \
^
/usr/local/include/dpdk/rte_memcpy.h:644:16: note: in expansion of macro ‘MOVEUNALIGNED_LEFT47_IMM’
case 0x01: MOVEUNALIGNED_LEFT47_IMM(dst, src, n, 0x01); break; \
^~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/dpdk/rte_memcpy.h:798:2: note: in expansion of macro ‘MOVEUNALIGNED_LEFT47’
MOVEUNALIGNED_LEFT47(dst, src, n, srcofs);
^~~~~~~~~~~~~~~~~~~~
......
......
解决方案
DPDK API__rte_pktmbuf_free_direct
使用 SIMD 内在函数_mm_alignr_epi8
。这在内部依赖于指令集palignr
的一部分。SSSE3
根据编译器消息 error: ‘__builtin_ia32_palignr128’ needs ISA option -m32 -mssse3
,在构建期间似乎-mssse3
未传递编译器标志。
-mssse3
解决方案:将 CFLAGS 更新为 x86 平台的最低 DPDK 要求。
注意:如果 dpdk 版本大于 19.08,对于自定义安装或发行版 libdpdk,设置正确标志的简单方法是设置CFGLAGS+=$(pkg-config --cflags libdpdk)