1. 课程导论与性能基准
1.1 为什么需要内核性能优化?
Linux 内核是操作系统的心脏,负责进程调度、内存管理、I/O 栈、网络协议栈等核心子系统。在默认发行版配置下,内核为了兼容性牺牲了大量极致性能。通过定制编译选项与运行时参数调校,可以在不更换硬件的前提下,将系统吞吐量提升 20%~50%,将尾延迟降低一个数量级。
优化收益概览(典型场景)
| 场景 | 默认内核 | 优化内核 | 提升幅度 |
|---|---|---|---|
| 高并发 Web 服务 | 10 万 QPS | 15 万 QPS | +50% |
| 数据库 OLTP 事务 | 5000 TPS | 7200 TPS | +44% |
| 视频转码(H.264) | 45 fps | 58 fps | +29% |
| 网络包转发(DPDK 旁路) | 1.2 Mpps | 2.8 Mpps | +133% |
1.2 核心性能指标
性能优化必须基于可量化的指标。本课程聚焦三个黄金维度:
- 吞吐量(Throughput):单位时间内完成的工作量。例如:每秒请求数(RPS)、每秒事务数(TPS)、磁盘 IOPS。
- 延迟(Latency):从请求发出到收到响应的时间间隔。重点关注平均延迟、P99(99% 分位)延迟、P999 尾延迟。
- CPU 利用率(CPU Utilization):CPU 处于非空闲状态的时间百分比。需区分用户态(%usr)、内核态(%sys)、软中断(%softirq)、硬中断(%hardirq)和等待 I/O(%iowait)。
性能三角法则:吞吐量、延迟、CPU 利用率三者相互制约。盲目提升吞吐量可能导致延迟飙升;过度降低延迟可能浪费 CPU 资源。优化目标是找到业务可接受的最优平衡点。
1.3 性能基准测试工具
本课程将深度使用以下三款工具进行基准测试与瓶颈定位:
| 工具 | 主要用途 | 测量指标 | 典型命令 |
|---|---|---|---|
| perf | CPU 性能计数器分析、采样、跟踪 | CPI、缓存命中率、分支预测错误率、上下文切换 | perf stat -e cycles,instructions,cache-misses ./workload |
| stress-ng | 压力测试、稳定性验证、极限负载模拟 | 最大并发数、错误率、系统崩溃阈值 | stress-ng --cpu 8 --io 4 --vm 2 --hdd 1 --timeout 60s |
| sysbench | 数据库、CPU、内存、文件 I/O 基准测试 | TPS、QPS、平均延迟、95% 分位延迟 | sysbench --test=cpu --cpu-max-prime=20000 run |
1.4 工具工作流程
性能优化遵循“测量→分析→调校→验证”的闭环。下图展示了基准测试工具在优化流程中的位置:
1.5 快速上手:一次完整的基准测试
以下命令序列演示了如何使用 sysbench 对 CPU 进行基准测试,并用 perf 采集性能计数器:
# 1. 使用 sysbench 进行 CPU 基准测试(素数计算)
sysbench --test=cpu --cpu-max-prime=20000 --num-threads=4 run
# 2. 使用 perf stat 采集关键硬件事件
perf stat -e cycles,instructions,cache-references,cache-misses,branch-misses \
sysbench --test=cpu --cpu-max-prime=20000 --num-threads=4 run
# 3. 使用 stress-ng 进行稳定性压力测试(8 个 CPU 压力线程,持续 60 秒)
stress-ng --cpu 8 --timeout 60s --metrics-brief
注意事项:基准测试必须在系统空闲状态下进行,避免其他进程干扰。建议每次测试至少重复 3 次,取中位数作为基准值。测试前关闭 CPU 频率缩放(
cpupower frequency-set -g performance)和 Turbo Boost,以获得可复现的结果。
1.6 本章小结
- 内核性能优化可带来 20%~133% 的性能提升,是性价比最高的系统调优手段。
- 吞吐量、延迟、CPU 利用率是三大核心指标,三者之间存在权衡关系。
- perf 用于微观架构分析,stress-ng 用于极限压力测试,sysbench 用于宏观基准评分。
- 优化流程遵循“测量→分析→调校→验证”的闭环迭代模式。