DPDK 函数 rte_malloc returns NULL 尚未进行分配
The DPDK function rte_malloc returns NULL while no allocation is made yet
这是我的代码:
int main(int argc, char *argv[]) {
rte_eal_init(argc, argv);
size_t size = 1000;
void *p = rte_malloc(NULL, size, 0);
printf("p: %p\n", p);
return 0;
}
很高兴我得到了以下输出:
p: (nil)
我没有忘记保留大页面,dpdk-hugepages.py -s
证明了这一点。
可能是什么问题?
在对代码进行小的修正后,我能够得到伪代码并 运行 正确。
代码:
$ cat test.c
#include <stdio.h>
#include <rte_eal.h>
#include <rte_malloc.h>
int main(int argc, char *argv[]) {
int ret = rte_eal_init(argc, argv);
if (ret >= 0) {
size_t size = 1000;
void *p = rte_malloc(NULL, size, 0);
printf("p: %p\n", p);
}
return ret;
}
- 静态 DPDK 库编译:gcc test.c $(pkg-config --cflags --libs libdpdk --static)
- 动态 DPDK 库编译:gcc test.c $(pkg-config --cflags --libs libdpdk)
- 运行: sudo ./a.out -l 1 --no-pci --log-level=8
日志:
$ sudo ./a.out -l 1 --no-pci --log-level=8
EAL: Detected CPU lcores: 128
EAL: Detected NUMA nodes: 2
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: VFIO support initialized
TELEMETRY: No legacy callbacks, legacy socket not created
**p: 0x17ffd5b00**
这是我的代码:
int main(int argc, char *argv[]) {
rte_eal_init(argc, argv);
size_t size = 1000;
void *p = rte_malloc(NULL, size, 0);
printf("p: %p\n", p);
return 0;
}
很高兴我得到了以下输出:
p: (nil)
我没有忘记保留大页面,dpdk-hugepages.py -s
证明了这一点。
可能是什么问题?
在对代码进行小的修正后,我能够得到伪代码并 运行 正确。
代码:
$ cat test.c
#include <stdio.h>
#include <rte_eal.h>
#include <rte_malloc.h>
int main(int argc, char *argv[]) {
int ret = rte_eal_init(argc, argv);
if (ret >= 0) {
size_t size = 1000;
void *p = rte_malloc(NULL, size, 0);
printf("p: %p\n", p);
}
return ret;
}
- 静态 DPDK 库编译:gcc test.c $(pkg-config --cflags --libs libdpdk --static)
- 动态 DPDK 库编译:gcc test.c $(pkg-config --cflags --libs libdpdk)
- 运行: sudo ./a.out -l 1 --no-pci --log-level=8
日志:
$ sudo ./a.out -l 1 --no-pci --log-level=8
EAL: Detected CPU lcores: 128
EAL: Detected NUMA nodes: 2
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: VFIO support initialized
TELEMETRY: No legacy callbacks, legacy socket not created
**p: 0x17ffd5b00**