[C++][DPDK] 创建具有正确 "private size" 字节对齐的 rte_mempool

[C++][DPDK] Create a rte_mempool with the correct "private size" byte alignment

我对 DPDK 还很陌生,并且通常使用字节。

我正在尝试修改接收到的数据包的长度,方法是将其复制到内存池中,然后使用所述内存池创建一个 rte_mbuf,我可以对其进行修改。 要创建内存池,我使用

    mem_pool = rte_pktmbuf_pool_create(packet, 1,
                        RTE_MBUF_DEFAULT_DATAROOM, <?>,
                        RTE_MBUF_DEFAULT_BUF_SIZE,
                        SOCKET_ID_ANY);

描述于http://dpdk.org/doc/api/rte__mbuf_8h.html#a593921f13307803b94bbb4e0932db962

在这个调用中,我似乎总是得到错误的 priv_size 值,因为我收到此错误:

    MBUF: mbuf priv_size=<variable> is not aligned 
    Segmentation fault

我无法在描述中找到更多信息,并在谷歌上搜索了很多问题,但我找不到解决方案,任何人都可以照亮我吗?

您提供的link to the documentation引号:

priv_size Size of application private are between the rte_mbuf structure and the data buffer. This value must be aligned to RTE_MBUF_PRIV_ALIGN.

所以是的,priv_size 应该与 RTE_MBUF_PRIV_ALIGN 对齐,即 8 个字节。

所以你必须传递给 rte_pktmbuf_pool_create priv_size of 0, 8, 16, 24 etc.