首页 > 解决方案 > 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);
  ^~~~~~~~~~~~~~~~~~~~
......
......

标签: dpdkstreambuf

解决方案


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)


推荐阅读