1. 环境搭建与Hugepages配置
任务目标
在Linux系统上完成DPDK编译安装,并配置Hugepages大页内存,最终通过DPDK自带的helloworld示例验证环境可用。
环境依赖
- Linux发行版:Ubuntu 22.04 / CentOS Stream 9(本文以Ubuntu为例)
- 内核版本:≥ 5.4(建议使用较新LTS内核)
- 编译工具:gcc、make、meson、ninja、pkg-config
- Python 3.7+(meson构建依赖)
- NUMA库:libnuma-dev(非NUMA架构可跳过)
安装步骤
首先安装编译依赖并下载DPDK源码(以v23.11 LTS为例):
# Ubuntu
sudo apt update
sudo apt install -y build-essential meson ninja-build python3-pip pkg-config libnuma-dev
pip3 install pyelftools
# 下载并解压
wget https://fast.dpdk.org/rel/dpdk-23.11.tar.xz
tar -xf dpdk-23.11.tar.xz
cd dpdk-23.11
Hugepages配置
DPDK需要大页内存支撑数据包缓冲区。以下配置在系统启动时预留1GB大页(2个页面,共2GB):
# 临时生效(重启失效)
echo 2 | sudo tee /proc/sys/vm/nr_hugepages
sudo mkdir -p /mnt/huge
sudo mount -t hugetlbfs pagesize=1GB /mnt/huge
# 永久生效(写入启动配置)
echo 'vm.nr_hugepages=2' | sudo tee -a /etc/sysctl.conf
echo 'nodev /mnt/huge hugetlbfs pagesize=1GB 0 0' | sudo tee -a /etc/fstab
验证配置:grep Huge /proc/meminfo 应显示 HugePages_Total: 2。
编译与安装
meson setup build
ninja -C build
sudo ninja -C build install
sudo ldconfig
安装完成后DPDK库位于/usr/local/lib,头文件位于/usr/local/include/dpdk。
环境验证
使用DPDK自带示例验证环境是否就绪。编译并运行helloworld程序:
cd examples/helloworld
meson setup build
ninja -C build
sudo ./build/dpdk-helloworld -l 0-1
通过条件:程序输出类似以下内容且无错误退出:
EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: PCI device list...
hello from core 0
hello from core 1
若出现EAL: No free hugepages reported in hugepages,说明大页内存未正确挂载,请检查/mnt/huge挂载状态及nr_hugepages设置。
常见问题
- 编译报错找不到numa.h:安装libnuma-dev后重新执行
meson setup build。 - 运行提示
Operation not permitted:DPDK需要root权限或设置ulimit -l unlimited。 - IOMMU相关警告:若使用VFIO驱动,需在BIOS启用VT-d并在内核参数添加
iommu=pt;仅运行helloworld可忽略此警告。