DPDK内存池创建失败如何解决?
How to resolve DPDK mempool creation fail?
我一直坚持使用 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 代码或库没有问题。
我一直坚持使用 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 代码或库没有问题。