2. DPDK Hello World
任务目标
编写一个最小DPDK程序,完成EAL初始化并打印一条日志消息,验证DPDK开发环境可用。程序不涉及任何收发包逻辑,仅作为DPDK环境自检。
环境依赖
- DPDK版本:20.11+(建议使用LTS版本)
- 已编译DPDK并设置
RTE_SDK和RTE_TARGET环境变量 - 系统支持hugepage(至少预留1024MB)
- 需要root权限运行(或已配置
rte_eal_init所需权限)
关键完整代码
#include <rte_eal.h>
#include <rte_log.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
int ret;
/* 初始化EAL,解析传入的EAL参数(如 -l, -m 等) */
ret = rte_eal_init(argc, argv);
if (ret < 0) {
rte_log(RTE_LOG_ERR, RTE_LOGTYPE_EAL,
"EAL init failed: %d\n", ret);
return -1;
}
/* 打印DPDK版本和当前lcore信息 */
RTE_LOG(INFO, EAL, "DPDK %s initialized successfully\n",
rte_version());
RTE_LOG(INFO, EAL, "Running on lcore %u\n", rte_lcore_id());
/* 清理EAL资源 */
rte_eal_cleanup();
return 0;
}
编译与运行
# 编译(假设当前目录为hello_world.c所在目录)
gcc -o hello_world hello_world.c \
-I$RTE_SDK/$RTE_TARGET/include \
-L$RTE_SDK/$RTE_TARGET/lib \
-Wl,-rpath,$RTE_SDK/$RTE_TARGET/lib \
-lrte_eal -lrte_log
# 运行(需要root权限,指定使用2个lcore)
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
mount -t hugetlbfs pagesize=2M none /mnt/huge
./hello_world -l 0-1 -m 256
验证方法
程序运行后观察输出:
- 若EAL初始化失败,会输出
EAL init failed及错误码,需检查hugepage配置或权限。 - 成功时输出包含
DPDK 20.11.x initialized successfully和Running on lcore 0的日志。 - 程序退出码为0表示正常完成。
通过条件:看到上述两条INFO日志且无ERROR输出,即证明DPDK环境配置正确、EAL可正常初始化。
常见问题
- EAL init failed: Cannot get hugepage information:hugepage未挂载或数量不足,检查
/sys/kernel/mm/hugepages/配置。 - EAL: Detected 0 lcores:CPU亲和性配置问题,尝试用
-l 0指定单个lcore。 - 编译时找不到头文件:确认
RTE_SDK和RTE_TARGET路径正确,且DPDK已编译完成。