第2章:环境准备——硬件要求与系统搭建

说实话,很多人在OVS-DPDK上栽跟头,不是技术问题,而是环境没搭对。我见过太多人拿着普通家用网卡就想跑高性能数据平面,结果性能惨不忍睹。这一章,咱们就把环境准备这件事彻底讲透。

2.1 硬件选型:别在起点就输了

做OVS-DPDK,硬件是地基。地基不稳,上层再优化也白搭。

CPU:核心多、频率高、支持VT-d

我个人习惯用Intel Xeon系列。为什么?因为DPDK对Intel的网卡和CPU支持最成熟。AMD EPYC也能用,但踩坑概率大一些。

  • 核心数:至少8核,建议16核以上。OVS-DPDK需要隔离核心给PMD线程用,你想想看,如果核心不够,系统和OVS抢CPU,性能直接腰斩。
  • 频率:2.5GHz以上。频率越高,单核处理能力越强。我在项目中遇到过,同样16核,2.0GHz和3.0GHz的CPU,吞吐量差了将近40%。
  • NUMA架构:必须关注。DPDK强调“本地内存访问”,跨NUMA访问内存延迟会高很多。最好用双路或单路服务器,避免跨NUMA。

核心要点:CPU必须支持VT-d(Intel虚拟化技术),这是IOMMU的基础。没有VT-d,DPDK无法直接操作网卡寄存器。

内存:大容量、高频率

DPDK使用大页内存(HugePages),所以内存不能小。

  • 容量:至少16GB,建议32GB以上。OVS流表、数据包缓冲区都要吃内存。
  • 频率:DDR4 2666MHz起步,DDR5更好。内存频率直接影响数据包处理时的访存速度。
  • 通道数:尽量插满所有内存通道。比如双路CPU,每路6通道,那就插6根内存条。这样带宽最大。

小技巧:用 dmidecode -t memory 可以查看当前内存配置。我曾经发现一台服务器只插了2根内存条,结果带宽只有理论值的1/3,性能惨不忍睹。

网卡:必须支持DPDK

这是最容易踩坑的地方。普通家用网卡(比如Realtek)基本不能用。

网卡型号 支持DPDK 推荐场景
Intel XL710 (40G) 完美支持 数据中心核心
Intel XXV710 (25G) 完美支持 主流高性能场景
Mellanox ConnectX-5 支持(需MLNX_OFED驱动) 超低延迟场景
Intel I350 (1G) 支持 测试环境
Realtek 8111/8169 不支持 别用,浪费时间

嗯,这里要注意:网卡固件版本也很重要。我遇到过XL710网卡因为固件太老,DPDK死活认不出来。升级固件后一切正常。

2.2 操作系统安装:Ubuntu还是CentOS?

这是个老生常谈的问题。我个人更倾向Ubuntu 20.04 LTS或22.04 LTS。为什么?

  • 内核新:Ubuntu默认内核版本高,对DPDK和OVS的新特性支持更好。
  • 包管理方便:apt-get安装依赖比yum省心多了。
  • 社区活跃:遇到问题,网上搜Ubuntu+DPDK的解决方案比CentOS多得多。

当然,如果你公司强制用CentOS,那CentOS 7.9或Rocky Linux 8.x也能用。但记得升级内核到4.18以上,否则有些DPDK功能用不了。

警告:不要用CentOS 6或Ubuntu 16.04,内核太老,DPDK 20.11以上版本都不支持了。

2.3 BIOS设置:三个关键开关

BIOS设置是很多人忽略的环节。我刚开始做DPDK时,装好系统发现性能只有预期的60%,查了两天才发现是BIOS里节能模式没关。

VT-d:必须开启

VT-d是Intel的IOMMU技术。DPDK通过它来直接操作网卡寄存器,绕过内核。

  • 进入BIOS,找到 Intel Virtualization Technology for Directed I/O
  • 设置为 Enabled

不同厂商的BIOS菜单名称可能不同。戴尔服务器叫“VT-d”,惠普叫“Intel VT-d”,华为叫“IOMMU”。反正看到类似选项就打开。

超线程(HT):建议关闭

这个问题争议很大。我个人的经验是:做数据平面,关掉HT

为什么会这样?因为HT的两个逻辑核心共享物理核心的执行单元。当PMD线程跑在一个逻辑核上,另一个逻辑核如果跑其他进程,会互相干扰。说白了,HT带来的性能提升在DPDK场景下基本没有,反而可能引入抖动。

我的建议:在BIOS中关闭HT。如果必须开,那就用taskset把PMD线程绑定到物理核心上,逻辑核心留空。

节能模式:必须关闭

这个没得商量。CPU的C-states和P-states必须禁用。

  • C-states:CPU空闲时进入休眠状态。DPDK要求CPU一直处于最高性能状态,休眠后唤醒有延迟。
  • P-states:CPU根据负载动态调频。DPDK需要稳定频率,调频会导致性能波动。

在BIOS中找 CPU Power ManagementIntel SpeedStep,设置为 Disabled。有些服务器还有 OS Power Management,也关掉。

避坑指南:我曾经在一台华为服务器上,BIOS里关了节能,但进系统后频率还是上不去。后来发现是IPMI(带外管理)里还有一个电源策略设置。所以,BIOS和BMC都要检查。

2.4 内核参数与基础配置

系统装好后,还有几个内核参数要调。这些不调,DPDK跑起来会各种报错。

大页内存配置

DPDK需要2MB或1GB的大页。我习惯用1GB大页,因为TLB miss更少。

# 在GRUB_CMDLINE_LINUX中添加
default_hugepagesz=1G hugepagesz=1G hugepages=16

# 或者运行时分配
echo 16 > /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages

分配16个1GB大页,总共16GB。如果你的内存只有32GB,那就分配8个。

IOMMU开启

VT-d在BIOS开启后,内核还要加参数才能用。

# GRUB中添加
intel_iommu=on iommu=pt

# iommu=pt 表示只对直通设备启用IOMMU,减少性能开销

隔离核心

把一些核心留给DPDK专用,不让系统进程打扰。

# 隔离CPU 2-15
isolcpus=2-15

# 同时关闭这些核心的时钟中断
nohz_full=2-15 rcu_nocbs=2-15

注意:隔离核心后,系统进程就不会跑在这些核心上了。但你要确保至少留1-2个核心给系统用,否则系统会卡死。

2.5 验证环境是否就绪

配置完重启后,用几个命令检查一下。

# 检查大页
grep HugePages /proc/meminfo

# 检查IOMMU是否开启
dmesg | grep -i iommu

# 检查CPU隔离
cat /sys/devices/system/cpu/isolated

# 检查网卡是否被DPDK识别
lspci | grep -i ethernet

如果一切正常,你会看到大页数量正确,IOMMU有输出,隔离核心列表不为空。

嗯,到这里环境就准备好了。下一章咱们开始编译安装OVS和DPDK。说实话,编译过程也有不少坑,到时候我一个个给你拆解。