3. 环境准备:硬件要求、BIOS 设置与操作系统

在开始 DPDK l3fwd 实战之前,搭建一个正确的实验环境是成功的一半。本章将详细梳理从硬件选型、BIOS 调优到操作系统安装的全流程,确保你的平台能够充分发挥 DPDK 的用户态驱动和 SR-IOV 硬件分流能力。

💡 学习目标:完成本章后,你将拥有一台经过验证的、支持 SR-IOV 和 DPDK 的高性能网络实验平台。

3.1 硬件要求:支持 SR-IOV 的 NIC

SR-IOV(Single Root I/O Virtualization)是硬件分流的核心技术。它允许一个物理网卡(PF)在硬件层面虚拟出多个轻量级的虚拟功能(VF),每个 VF 可被独立分配给虚拟机或 DPDK 进程,实现接近线速的数据面性能。

3.1.1 推荐网卡型号与芯片组

并非所有网卡都支持 SR-IOV。以下表格列出了经过社区广泛验证、与 DPDK l3fwd 兼容性最佳的网卡系列:

厂商 芯片/系列 最大 VF 数量 DPDK 驱动 备注
Intel 82599 (10G) 64 ixgbe 经典稳定,文档丰富
Intel X710/XL710 (40G) 128 i40e 支持 VF 多队列
Mellanox ConnectX-4/5/6 (25/100G) 256 mlx5 高性能,支持 ASAP²
Broadcom NetXtreme-E 系列 (25/100G) 128 bnxt 企业级稳定性
⚠️ 避坑指南:消费级网卡(如 Intel I350-T2)虽然支持 SR-IOV,但 VF 数量有限(通常 8-16 个),且缺乏硬件流分类(RSS/FDIR)的高级特性,不适合作为 l3fwd 硬件分流的生产级实验平台。

3.1.2 CPU 与主板要求

  • CPU:必须支持 Intel VT-d 或 AMD-Vi(I/O MMU)。这是 SR-IOV 和 DPDK 使用大页内存的基础。建议使用 Intel Xeon Scalable 或 AMD EPYC 系列。
  • 主板/芯片组:服务器级芯片组(如 Intel C621/C741、AMD B650/TRX50)原生支持 PCIe ACS(Access Control Services),这是 SR-IOV 在虚拟化场景下的必要条件。
  • 内存:至少 16 GB,推荐 32 GB 以上。DPDK 需要预留 1-2 GB 的 2MB 或 1GB 大页内存。
  • PCIe 插槽:网卡应插在直连 CPU 的 PCIe 插槽(通常标记为 CPU0_PCIe0),避免通过 PCH(南桥)转发,以减少延迟。
SR-IOV 硬件架构与 DPDK 数据面 SR-IOV 硬件架构与 DPDK 数据面 物理功能 (PF) 管理面 / 控制面 VF 0 数据面 VF 1 数据面 VF N 数据面 ... NIC 硬件虚拟交换机 (Embedded Switch) 物理链路 (Physical Link) DPDK l3fwd DPDK l3fwd DPDK l3fwd 图例 PF VF DPDK

3.2 BIOS 设置:为 DPDK 和 SR-IOV 调优

BIOS 是硬件与操作系统之间的桥梁。错误的 BIOS 设置会导致 SR-IOV 功能不可见、VF 创建失败或 DPDK 性能严重下降。以下是必须检查和调整的关键项:

3.2.1 核心 BIOS 选项清单

BIOS 选项 推荐值 影响说明
Intel VT-d / AMD SVM Enabled 开启 I/O MMU,SR-IOV 和 DPDK 使用大页的硬件基础
SR-IOV Support Enabled 全局启用 SR-IOV 功能
ACS (Access Control Services) Enabled 确保 PCIe 设备间隔离,虚拟化场景必须开启
NUMA 节点配置 Enabled DPDK 需要感知 NUMA 拓扑以绑定内存和 CPU
CPU Power Management Performance 关闭 C-States/P-States 深度节能,避免延迟抖动
Hyper-Threading Enabled DPDK 通常使用物理核,但 HT 可提供更多逻辑核用于控制面
Above 4G Decoding Enabled 允许 64-bit PCIe BAR 地址,大内存系统必须开启
🔧 操作步骤:进入 BIOS 后,建议先加载“Optimized Defaults”,然后逐项修改上述选项。不同厂商(Dell/HP/Supermicro)的菜单路径不同,可使用 BIOS 搜索功能快速定位。

3.2.2 验证 BIOS 设置

系统启动后,通过以下命令验证关键特性是否生效:

# 检查 VT-d / IOMMU 是否启用
dmesg | grep -i "iommu"
# 预期输出:DMAR: IOMMU enabled

# 检查 SR-IOV 是否可用(以 Intel ixgbe 为例)
lspci -vvv -s <PCI_BDF> | grep -i "SR-IOV"
# 预期输出:Capabilities: [160] Single Root I/O Virtualization (SR-IOV)

# 检查 NUMA 拓扑
lscpu | grep -i numa
# 预期输出:NUMA node0 CPU(s):   0-15
#          NUMA node1 CPU(s):   16-31

3.3 操作系统要求:Ubuntu / CentOS

DPDK 对主流 Linux 发行版支持良好。本课程以 Ubuntu 22.04 LTS 和 CentOS Stream 9 作为双平台参考。以下表格对比了关键差异:

项目 Ubuntu 22.04 LTS CentOS Stream 9
内核版本 5.15 LTS 5.14 (基于 RHEL 9)
包管理器 apt dnf
DPDK 安装方式 apt install dpdk / 源码编译 dnf install dpdk / 源码编译
默认大页支持 需要手动配置 需要手动配置
SR-IOV 驱动 内核自带 ixgbe/i40e/iavf 内核自带 ixgbe/i40e/iavf

3.3.1 操作系统基础配置

无论选择哪个发行版,以下步骤都是通用的:

  1. 更新系统:确保所有包为最新版本。
  2. 安装编译工具链:gcc、make、meson、ninja、pkg-config。
  3. 安装内核头文件:用于编译内核模块(如 igb_uio、vfio-pci)。
  4. 关闭防火墙与 NetworkManager:避免干扰 DPDK 对网卡的控制。
# Ubuntu 22.04
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential meson ninja-build pkg-config \
                    linux-headers-$(uname -r) python3-pip
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager

# CentOS Stream 9
sudo dnf update -y
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y meson ninja-build pkgconfig kernel-devel python3-pip
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager

3.3.2 大页内存配置

DPDK 依赖大页内存(HugePages)来减少 TLB 缺失。推荐配置 2MB 大页,数量根据内存大小调整:

# 临时配置 1024 个 2MB 大页(共 2GB)
echo 1024 | sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

# 永久配置(Ubuntu - /etc/default/grub)
GRUB_CMDLINE_LINUX_DEFAULT="default_hugepagesz=1G hugepagesz=1G hugepages=2 hugepagesz=2M hugepages=1024 intel_iommu=on iommu=pt"

# 永久配置(CentOS - /etc/default/grub)
GRUB_CMDLINE_LINUX="default_hugepagesz=1G hugepagesz=1G hugepages=2 hugepagesz=2M hugepages=1024 intel_iommu=on iommu=pt"

# 更新引导
sudo update-grub   # Ubuntu
sudo grub2-mkconfig -o /boot/grub2/grub.cfg   # CentOS

# 挂载大页文件系统
sudo mkdir -p /mnt/huge
sudo mount -t hugetlbfs nodev /mnt/huge
# 永久挂载:在 /etc/fstab 中添加
echo "nodev /mnt/huge hugetlbfs defaults 0 0" | sudo tee -a /etc/fstab
💡 性能提示:如果系统内存充足(≥32GB),强烈建议使用 1GB 大页。1GB 大页能进一步减少 TLB miss,提升 l3fwd 转发性能约 5-10%。配置方法:在 grub 命令行中添加 default_hugepagesz=1G hugepagesz=1G hugepages=4。
环境准备流程图 环境准备流程图:从硬件到 DPDK 就绪 ① 硬件选型 ② BIOS 调优 ③ OS 安装 ④ 大页配置 ⑤ 驱动绑定 ⑥ 环境验证 💡 建议:按顺序执行,每一步完成后使用对应验证命令确认,避免返工。

3.4 本章小结

至此,你已经完成了 l3fwd 实战环境的全部准备工作。我们梳理了:

  • 硬件选型:推荐 Intel X710 / Mellanox ConnectX 系列网卡,并确认 CPU 支持 VT-d。
  • BIOS 调优:开启 SR-IOV、VT-d、ACS 和性能模式,关闭节能选项。
  • 操作系统配置:安装编译工具链、配置大页内存、关闭干扰服务。