3. 测试环境搭建:Linux内核版本选择、编译内核开启网络测试选项、安装必要工具链

搭建一个可靠、可复现的内核网络性能测试环境,是进行 pktgen 与 netperf 压测的前提。本章将指导你完成从内核版本选择、内核编译配置到工具链安装的全流程,确保底层内核支持网络测试所需的统计、延迟与丢包追踪能力。

3.1 内核版本选择策略

不同内核主线版本在网络子系统、pktgen 模块特性及 netperf 依赖的套接字性能上存在差异。建议根据测试目标选择长期支持(LTS)或主线稳定版。

内核系列推荐版本适用场景pktgen 支持网络栈特性
LTS 长期支持5.10.x / 5.15.x / 6.1.x生产环境压测、回归测试完整稳定,已修复大部分网络锁竞争
主线稳定6.6.x / 6.7.x新特性验证、XDP/eBPF 压测完整 + 扩展统计含最新 TCP BBR、RPS/RFS 优化
长期测试 (SLT)6.12.x (2025年)前瞻性性能评估完整 + 多队列扩展支持多队列 pktgen 并发
选版建议: 对于本课程所有实验,推荐使用 Linux 6.1.x LTS。该版本在 pktgen 稳定性、netperf 兼容性以及内核编译选项的完整性上表现均衡,且社区维护周期长。

3.2 编译内核:开启网络测试关键选项

发行版预编译内核通常裁剪了调试与测试接口。为了获取完整的网络统计、延迟追踪和 pktgen 功能,必须从源码编译内核,并显式开启以下配置项。

3.2.1 获取内核源码

# 以 6.1.55 LTS 为例
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.1.55.tar.xz
tar -xf linux-6.1.55.tar.xz
cd linux-6.1.55

3.2.2 核心网络测试配置项

执行 make menuconfig 后,按以下路径开启选项。下表列出必须启用的关键开关:

配置项路径 (make menuconfig)作用推荐值
CONFIG_NET_PKTGENDevice Drivers → Network device support → Pktgen启用内核态高速发包生成器内置 (y)
CONFIG_NET_SCHEDNetworking support → Networking options → QoS and/or fair queueing支持 netem 延迟/丢包模拟内置 (y)
CONFIG_NET_CLS_ACTNetworking support → Networking options → Traffic control支持 tc 过滤器与动作内置 (y)
CONFIG_NET_DROP_MONITORNetworking support → Networking options → Network drop monitor跟踪内核丢包位置与原因模块 (m)
CONFIG_NET_SCH_NETEMNetworking support → Networking options → QoS → NETEM网络模拟器(延迟/抖动/丢包)模块 (m)
CONFIG_NET_9PNetworking support → 9P virtio 支持虚拟化场景下网络测试按需
CONFIG_DEBUG_NETKernel hacking → Networking → Network debugging网络栈额外调试与统计内置 (y)
常见遗漏: 许多开发者只开启 CONFIG_NET_PKTGEN,却遗漏 CONFIG_NET_SCH_NETEM 和 CONFIG_NET_DROP_MONITOR。这会导致后续 netperf 结合 netem 模拟弱网场景时无法加载模块,或丢包定位时无日志输出。

3.2.3 编译与安装

# 配置内核(基于当前系统配置 + 手动调整)
make olddefconfig
make menuconfig   # 手动开启上述选项

# 编译(根据CPU核心数调整 -j 参数)
make -j$(nproc)

# 安装模块与内核
sudo make modules_install
sudo make install

# 更新引导
sudo update-grub

# 重启选择新内核
sudo reboot

3.3 安装必要工具链

编译内核和运行测试需要完整的 C 编译环境、版本控制工具及测试套件。以下为最小安装清单:

工具/库版本要求安装命令 (Debian/Ubuntu)用途
gcc≥ 10.xsudo apt install gcc编译内核与 netperf
make≥ 4.3sudo apt install make构建系统
git≥ 2.30sudo apt install git管理内核源码与补丁
flex / bison最新sudo apt install flex bison内核配置解析
libelf-dev≥ 0.186sudo apt install libelf-dev内核模块 ELF 处理
openssl-dev≥ 1.1.1sudo apt install libssl-dev内核签名与证书
pkg-config最新sudo apt install pkg-config库依赖检测
验证安装: 执行以下命令确认版本符合要求:
gcc --version | head -n1
make --version | head -n1
git --version

3.4 环境搭建流程总览

下图展示了从裸机/虚拟机到可执行 pktgen 与 netperf 压测的完整环境搭建步骤:

测试环境搭建流程 选择内核版本 下载内核源码 开启测试选项 编译内核 安装模块+内核 安装gcc/make/git 验证:uname -r / lsmod | grep pktgen 环境就绪 → 开始 pktgen/netperf 压测 说明: • 内核版本选择直接影响 pktgen 多队列并发能力与 netperf 的 TCP 统计精度。 • 编译时遗漏 CONFIG_NET_DROP_MONITOR 会导致丢包定位困难,建议全部开启。

3.5 验证内核配置是否生效

重启进入新内核后,执行以下命令确认关键模块已加载或可加载:

# 确认内核版本
uname -r
# 输出应为:6.1.55-custom

# 检查 pktgen 模块是否可用
lsmod | grep pktgen
# 若未加载,手动加载
sudo modprobe pktgen

# 检查 netem 模块
modinfo sch_netem

# 检查 drop monitor
ls /sys/kernel/debug/drop_monitor
# 若存在,说明 CONFIG_NET_DROP_MONITOR 已生效
快速验证 pktgen: 执行 cat /proc/net/pktgen/kpktgend_0,若输出包含 Name: pktgen 且无错误,说明内核 pktgen 已就绪,可以进入下一章的压测实验。

3.6 常见问题与避坑

  • 编译报错: 缺少 libelf-dev 或 openssl-dev 会导致 make 中断。按 3.3 节安装所有依赖后重试。
  • pktgen 无法加载: 确认 CONFIG_NET_PKTGEN 为 y(内置)而非 m(模块)。模块化可能导致 initramfs 中缺失。
  • netperf 编译失败: 确保系统已安装 libnl-3-dev 和 libnl-route-3-dev,netperf 的 TCP 连接数测试依赖 netlink。
  • 虚拟机嵌套: 若在虚拟机中编译内核,分配至少 2 核 4GB 内存,否则 make -j$(nproc) 可能因 OOM 被杀。