c - 如何解决 DPDK 内存池创建失败?
问题描述
我坚持使用rte_mempool_create
,无论我给出什么配置,函数都只是 return NULL
。
下面是我的代码,
int main(argc, **argv) {
int ret;
ret = rte_eal_init(argc, argv);
if (ret < 0)
printf("eal init fail!!!\n");
unsigned lcore_id;
lcore_id = rte_lcore_id();
printf("lcore %u\n", lcore_id);
struct rte_mempool *mp;
mp = rte_mempool_create("MP", 1024,
32, 32, 0,
NULL, NULL, NULL, NULL,
0, 0);
if (NULL == mp) {
printf("mempool init fail\n");
return -1;
}
printf("mempool init pass\n");
rte_mempool_free(mp);
printf("mempool uninit pass\n");
return 0;
}
而运行结果,
EAL: Detected 96 lcore(s)
EAL: Detected 4 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: No available hugepages reported in hugepages-32768kB
EAL: No available hugepages reported in hugepages-64kB
EAL: No available hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: VFIO support initialized
EAL: No legacy callbacks, legacy socket not created
lcore 0
mempool init fail
如何正确创建池?
解决方案
DPDK 代码或库没有问题。修改了代码片段,用如下配置测试
- DPDK 版本:19.11.5 LTS
- CPU:Intel(R) Xeon(R) CPU E5-2699 v4,88线程
- 巨页:Hugepagesize:1048576 kB,HugePages_Total:16,HugePages_Free:15
- 命令:./build/test
[EDIT-1] 在@LinconFive 的评论中更新,问题是没有为正确的 NUMA 设置大页面(忽略交叉编译,因为 arm 二进制文件不会在 x86 上运行)
测试结果:通过
代码:
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <errno.h>
#include <sys/queue.h>
#include <rte_memory.h>
#include <rte_launch.h>
#include <rte_eal.h>
#include <rte_per_lcore.h>
#include <rte_lcore.h>
#include <rte_debug.h>
int
main(int argc, char **argv)
{
int ret;
ret = rte_eal_init(argc, argv);
if (ret < 0)
printf("eal init fail!!!\n");
unsigned lcore_id;
lcore_id = rte_lcore_id();
printf("lcore %u\n", lcore_id);
struct rte_mempool *mp;
mp = rte_mempool_create("MP", 1024,
32, 32, 0,
NULL, NULL, NULL, NULL,
0, 0);
if (NULL == mp) {
printf("mempool init fail\n");
return -1;
}
printf("mempool init pass\n");
while(1);
rte_mempool_free(mp);
printf("mempool uninit pass\n");
return 0;
}
日志:
lcore 0
mempool init pass
笔记:
- 由于我怀疑平台和配置,因此向@LinconFive 提出了关于版本、平台和特定错误的多个请求。
- DPDK 代码或库没有问题。
推荐阅读
- mysql - 如何将 phpmyadmin 连接到 mysql?
- python - 启动两个永无止境的 Python 脚本
- c# - c#WebApi如何对控制器操作是否使用具有特定参数的授权属性进行单元测试
- javascript - Node.js 请求中止
- python - 有没有办法在 Python 中显示每一列的类型?
- angular - 模板解析错误:无法绑定到“formGroup”,因为它不是“form”的已知属性。("
- html - 希望有一个消失并再次变得稳固但不会消失的代码
- python-3.x - 如何回到代码的开头?
- pic - PIC I2C PPS 配置
- vim - Vim:根据文件内容设置文件类型