Linux 性能优化
一、总论:Linux 性能优化的第一性原理
1. 性能的本质
Linux 性能问题并非“参数不合理”或“机器不够好”,其本质是:
有限资源在时间与空间维度上的分配失衡
所有性能问题,都可以归约为以下四类不变问题:
| 维度 | 本质问题 | 典型症状 |
|---|---|---|
| 计算 | CPU 是否被高效使用 | us/sys 高、cs 高 |
| 存储 | 数据是否在“最近的地方” | cache miss、swap |
| 队列 | 等待是否失控 | load 高、延迟抖动 |
| 协调 | 调度与并发是否合理 | 抢占、锁竞争 |
后续所有 CPU / 内存 / IO / 网络内容,均是这四个维度在不同子系统中的具体体现。
二、性能分析的统一方法论
1. 性能问题的标准分析路径
现象 → 指标 → 归因模型 → 决策原则 → 优化手段
避免直接“看到指标就调参”。
2. 性能指标的三层结构
- **症状指标**:load、latency、QPS
- **因果指标**:CPU 使用率、iowait、队列长度
- **机制指标**:缺页异常、上下文切换、中断
三、CPU 性能:计算与调度
1. 本质模型
CPU 性能问题 = 计算负载 + 调度策略 + 并发协调
2. 核心可观测指标
- Load Average(运行队列 + 不可中断睡眠)
- CPU 使用率(us/sys/wa/si/hi)
- 上下文切换(cswch / nvcswch)
3. 问题归因模型
Load 高 → ├─ us 高 → 计算密集 ├─ sys 高 → 内核/中断 ├─ wa 高 → IO 阻塞 └─ cs 高 → 调度/并发问题4. 策略分层
- **调度隔离**:CPU 绑定、cpuset、cgroups
- **优先级控制**:nice / sched policy
- **拓扑感知**:NUMA 本地性
- **中断治理**:irqbalance / affinity
5. 稳定认知
- CPU 永远在“公平”与“局部性”之间权衡
- 过度绑定会降低系统弹性
四、内存性能:局部性与回收
1. 本质模型
内存性能 = 命中率 × 回收成本
2. 内存分层视角
- CPU Cache
- Page Cache
- Slab Cache
- Swap
3. 可观测指标
- available memory
- major/minor page fault
- swap in/out
4. 回收与压力模型
kswapd 基于 pages_min/low/high 进行回收决策,本质是:
延迟回收,避免抖动
5. 策略分层
- 结构性策略:减少动态分配、对象池
- 系统性策略:swappiness、cgroups memory
- 架构性策略:缓存前移、外部缓存
五、IO 性能:带宽、延迟与队列
1. 本质模型
IO 性能 = 设备能力 × 访问模式 × 队列治理
2. IO 栈统一视角
应用 → 文件系统 → 通用块层 → 调度器 → 设备
3. 核心指标
- IOPS
- 吞吐量
- 响应时间
- 饱和度
4. 决策原则
- 随机 IO 看 IOPS
- 顺序 IO 看吞吐
- 延迟敏感系统优先 deadline
5. 优化策略分层
- 应用层:批量、顺序化、零拷贝
- 系统层:PageCache、异步 IO
- 设备层:SSD、RAID、调度算法
六、网络性能:RTT、带宽与队列
1. 本质模型
网络性能 = RTT × BDP × 队列管理
2. 收发路径抽象
DMA → 中断 → softirq → 协议栈 → socket buffer
3. 核心指标
- RTT
- Recv-Q / Send-Q
- 丢包率
4. 调优原则
- 握手优化解决连接建立成本
- 缓冲区优化解决带宽利用
- 拥塞控制决定长期吞吐
5. 风险提示
- 过度关闭 ICMP 会降低可诊断性
- tcp_tw_reuse 需谨慎
七、内核线程与后台机制
1. 核心内核线程角色
- kswapd:内存回收
- kworker:异步内核任务
- migration:负载均衡
- jbd2:文件系统一致性
2. 治理视角
内核线程是系统“隐形负载”,不可忽视
八、系统级性能治理
1. 性能不是调参问题
而是:
- 架构边界问题
- 隔离与配额问题
- 容量规划问题
2. 推荐治理工具
- cgroups
- NUMA-aware 部署
- 可观测性(指标 + 追踪)
九、稳定知识 vs 易变实现
稳定不变
- 局部性原理
- 队列与等待
- 调度与公平
易变实现
- 具体调度器
- 具体 sysctl 参数
- 具体 offload 技术
十、结语
性能优化不是“把系统拧到最快”,而是:
在约束条件下,构建可预测、可治理、可演进的系统行为
关联内容(自动生成)
- [/操作系统/内存管理.html](/操作系统/内存管理.html) 与本文内存性能部分密切相关,探讨了内存分配、虚拟内存和页面置换等关键技术
- [/操作系统/进程与线程.html](/操作系统/进程与线程.html) 与本文CPU调度部分相关,详细介绍了进程和线程的管理和调度机制
- [/计算机系统/程序结构和执行/优化程序性能.html](/计算机系统/程序结构和执行/优化程序性能.html) 从底层程序执行角度探讨性能优化,与本文系统层面优化相辅相成
- [/软件工程/性能工程/性能优化.html](/软件工程/性能工程/性能优化.html) 从工程角度探讨性能优化方法论,与本文的技术实现形成互补
- [/操作系统/linux/Linux.html](/操作系统/linux/Linux.html) Linux系统总体概述,为深入理解性能优化提供了背景知识
- [/操作系统/linux/内核.html](/操作系统/linux/内核.html) 与Linux内核相关的性能优化,有助于理解系统底层机制
- [/计算机网络/Linux虚拟化.html](/计算机网络/Linux虚拟化.html) 与Linux系统虚拟化相关的性能考量,扩展了性能优化的应用场景