如何解决 DPDK 20.11 中出现的错误 "MBUF: error setting mempool handler"

How to address the error "MBUF: error setting mempool handler" seen with DPDK 20.11

我将 libdpdk 静态链接到我的应用程序,当我启动应用程序时 EAL 初始化失败。

日志:

EAL: Detected 80 lcore(s)
EAL: Detected 2 NUMA nodes
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: Probing VFIO support...
EAL: VFIO support initialized
EAL: No legacy callbacks, legacy socket not created
MBUF: error setting mempool handler
EAL: Error - exiting with code: 1
  Cause: Cannot init packet mbuf pool Invalid argument

我使用以下命令在我的测试服务器中安装了 DPDK-20.11。

# meson build
#cd build
#ninja ; ninja install

我以 l2fwd Makefile 为例构建了我的应用程序 Makefile,不确定我缺少什么。

寻找建议。

[编辑-1]

int main(int argc, char **argv)
{ 

int ret; unsigned lcore_id; 

ret = rte_eal_init(argc, argv); 
if (ret < 0) 
rte_panic("Cannot init EAL\n"); 

struct rte_mempool *mp = 
rte_pktmbuf_pool_create("packet_pool", 8192, 64, 0, RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id()); 

return 0;
}

如何建造

  1. 将 makefile 从 l2fwd 复制到自定义应用程序文件夹
  2. 执行make static
  3. 运行 应用程序 sudo ./a.out

[EDIT-1] 从实时调试更新

目标OS:CENTOS 7 DPDK版本:20.11.1

导致错误的原因有多种

  1. 安装 Mellanox libverbs 会影响 dpdk 的 cflags 和 ldflags libdpdk.pc
  2. DPDK 21.11.1 介子构建 (meson -Dexamples=l2fwd build; ninja -C install) 不匹配 l2fwd Makefile option of make static
  3. 使用已安装目标的 pkg-config 也不正确。

为了修复错误,我们编辑了 /usr/local/lib64/pkgconfig/libdpdk.pc 以包含 -Wl,--whole-archive-Wl,--no-whole-archive

下的静态库

有效

#include <rte_cycles.h>
#include <rte_prefetch.h>
#include <rte_lcore.h>
#include <rte_per_lcore.h>
#include <rte_branch_prediction.h>
#include <rte_interrupts.h>
#include <rte_random.h>
#include <rte_debug.h>
#include <rte_ether.h>
#include <rte_ethdev.h>
#include <rte_mempool.h>
#include <rte_mbuf.h>
#include <rte_string_fns.h>


int main(int argc, char **argv)
{

int ret; unsigned lcore_id;

ret = rte_eal_init(argc, argv);
if (ret < 0)
rte_panic("Cannot init EAL\n");

struct rte_mempool *mp =
rte_pktmbuf_pool_create("packet_pool", 8192, 64, 0, RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id());
if (mp == NULL)
        rte_panic("Cannot init EAL\n");

printf("done!!!!!!!!!!!!");

return 0;
}

构建:sudo make static

输出

$ sudo ./build/l2fwd
EAL: Detected 32 lcore(s)
EAL: Detected 2 NUMA nodes
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: Probing VFIO support...
done!!!!!!!!!!!!