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 验证
  

 

posted @ 2026-09-04 23:43  雪地飞行棋  阅读(16)  评论(0)    收藏  举报