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(南桥)转发,以减少延迟。
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 操作系统基础配置
无论选择哪个发行版,以下步骤都是通用的:
- 更新系统:确保所有包为最新版本。
- 安装编译工具链:gcc、make、meson、ninja、pkg-config。
- 安装内核头文件:用于编译内核模块(如 igb_uio、vfio-pci)。
- 关闭防火墙与 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。
3.4 本章小结
至此,你已经完成了 l3fwd 实战环境的全部准备工作。我们梳理了:
- 硬件选型:推荐 Intel X710 / Mellanox ConnectX 系列网卡,并确认 CPU 支持 VT-d。
- BIOS 调优:开启 SR-IOV、VT-d、ACS 和性能模式,关闭节能选项。
- 操作系统配置:安装编译工具链、配置大页内存、关闭干扰服务。