Linux下dpdk安装步骤
一、环境准备与依赖安装
内核:建议使用较新的长期支持内核(如 5.4+),以避免驱动/大页兼容性问题。
BIOS:在 x86 上开启 VT-d/AMD-Vi 与相关 IOMMU 选项(尤其是使用 VFIO 时)-L2-L3】。
工具链:需要 Python3、meson、ninja、numa 库等(DPDK 当前官方构建体系是 meson+ninja)-L2-L5】。
1) Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y build-essential python3 python3-pip pkg-config \
libnuma-dev libelf-dev linux-headers-$(uname -r) \
meson ninja-build
# 如遇到依赖缺失,可再安装(可选)
sudo apt-get install -y libpcap-dev libibverbs-dev rdma-core
2) RHEL/CentOS/Rocky/Alma
sudo yum install -y gcc gcc-c++ make kernel-devel kernel-headers \
numactl-devel libatomic python3-devel python3-pip \
meson ninja-build python3-pyelftools elfutils-libelf-devel
# 可能需要额外开发包(视驱动需求)
sudo yum install -y libibverbs-devel rdma-core-devel
二、下载并解压 DPDK 源码
官方下载页:http://core.dpdk.org/download/
以 23.11 LTS 为例(可按需替换版本号):
wget https://fast.dpdk.org/rel/dpdk-23.11.tar.xz
tar xJf dpdk-23.11.tar.xz
cd dpdk-23.11
三、编译与安装(使用 meson+ninja,官方推荐)
# 配置构建目录
meson setup build
# 编译
ninja -C build
# 安装到系统(默认 /usr/local,需要 root)
sudo meson install -C build
sudo ldconfig
若安装后在某些发行版(如 Fedora/Red Hat)找不到库,可将 /usr/local/lib 或 /usr/local/lib64 加入 ld.so.conf.d 再执行 ldconfig-L4-L5】。
可选:调整构建参数(例如最大逻辑核数量、关闭特定驱动等):
meson setup build -Dmax_lcores=1024
# 或在已有 build 目录下修改
meson configure -Dmax_lcores=1024
可同时构建示例应用,例如 l2fwd、l3fwd:
meson setup build -Dexamples=l2fwd,l3fwd
# 或全量示例
meson setup build -Dexamples=all
这些示例随后可在 build/examples/ 下找到。
四、(可选)使用 Make 的传统编译方式(老版本兼容)
如果是旧版本(如 ≤20.11),仍可用 Make:
make config T=x86_64-native-linuxapp-gcc
make
sudo make install
但在新版本中推荐使用 meson+ninja。
五、配置大页内存(Huge Pages)
DPDK 依赖大页内存提升性能。常见做法:
1) 临时配置(2 MB 大页,重启失效)
# 分配 1024 个 2 MB 页(总计 2 GB)
echo 1024 | sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
# 检查
cat /proc/meminfo | grep -i huge
2) 持久化配置(重启保留)
编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX_DEFAULT 或 GRUB_CMDLINE_LINUX 中添加:
若使用 2 MB 大页:default_hugepagesz=2M hugepagesz=2M hugepages=1024
若使用 1 GB 大页(注意:需要机器支持):default_hugepagesz=1G hugepagesz=1G hugepages=8
更新 grub 并重启:
sudo update-grub # Ubuntu/Debian
# 或
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL/CentOS
sudo reboot
重启后检查:
cat /proc/meminfo | grep -i huge
六、加载内核驱动与绑定网卡
DPDK 需要专用内核驱动接管网卡。推荐方式:
1) 驱动选择
vfio-pci:生产环境推荐(支持更完善的 IOMMU、在安全启动场景也更可靠)-L4-L5】。
igb_uio / uio_pci_generic:传统方式(在启用安全启动的系统上可能不可用)。
2) 加载 vfio-pci(推荐)
sudo modprobe vfio-pci
若未开启 IOMMU 或测试环境无 IOMMU,可能需要启用不安全模式(请评估风险后再用):
sudo modprobe vfio enable_unsafe_noiommu_mode=1
echo 1 | sudo tee /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
sudo modprobe vfio-pci
3) 若需要 igb_uio(旧环境)
有些场景仍需 UIO 模块,需单独编译 dpdk-kmods(现代内核可能不自带):
git clone http://dpdk.org/git/dpdk-kmods
cd dpdk-kmods/linux/igb_uio
make
sudo make install
sudo modprobe igb_uio
4) 使用 dpdk-devbind.py 绑定/解绑网卡
进入源码目录的 usertools:
cd dpdk-23.11/usertools # 或你的源码解压路径
查看当前设备状态:
sudo ./dpdk-devbind.py --status
找到目标网卡的 PCI 地址(例如 0000:01:00.0)。
先把该网卡对应的接口关闭(避免在使用中绑定失败):
sudo ip link set dev enp1s0f0 down # 改成你的实际接口名
绑定到驱动(以 vfio-pci 为例):
sudo ./dpdk-devbind.py --bind=vfio-pci 0000:01:00.0
再次检查状态(应显示在“Network devices using DPDK-compatible driver”下):
sudo ./dpdk-devbind.py --status
如需还原为内核驱动:
sudo ./dpdk-devbind.py --bind=ixgbe 0000:01:00.0 # 替换为原驱动名,如 igb/ice/i40e
sudo ip link set dev enp1s0f0 up
七、验证安装(运行 testpmd 示例)
testpmd 是 DPDK 官方提供的性能测试工具,适合验证安装与绑定是否成功。
# 在源码目录构建后,示例可执行文件通常在 build/app 或 build/examples
sudo ./build/app/dpdk-testpmd -l 0-3 -n 4 \
-- -i --portmask=0x1 --rxq=1 --txq=1 --rxd=1024 --txd=1024
# -l 指定使用的逻辑核,-n 为内存通道数;以上为示例,请按实际硬件与需求调整。
若能正常进入 testpmd 提示符(testpmd>)且看到端口信息,说明安装与驱动绑定基本成功。
八、常见问题与注意事项
依赖报错:meson 配置阶段会提示缺失的库,按提示安装对应的 devel 包即可-L2-L4】。
在 /usr/local 下库被找不到:检查 /usr/local/lib 或 /usr/local/lib64 是否在 ld.so.conf 中,必要时手动添加并执行 ldconfig-L4-L5】。
绑定失败:务必先关闭对应的网络接口;确认目标 PCI 设备确实可被 DPDK 驱动接管(查看 dpdk-devbind.py 输出中的“Active”状态)。
安全启动导致 UIO 不可用:现代发行版 + 安全启动通常会禁用 UIO 模块,应使用 vfio-pci 代替。
性能调优:根据官方文档,在大页、NUMA 亲和、PCIe 带宽与 BIOS/内核参数方面做进一步调优-L4-L5】。
快速核对清单(一键式思路)
安装依赖:meson、ninja、numa、内核头等
下载/解压源码:dpdk-<版本>.tar.xz
meson setup build && ninja -C build
sudo meson install -C build && sudo ldconfig
配置大页(临时或持久化)
modprobe vfio-pci(或 igb_uio)
dpdk-devbind.py 绑定网卡
运行 testpmd 验证

浙公网安备 33010602011771号