﻿# perf 高级使用指南

> 更新时间：2026-08-06

> **perf 工具系列已拆分至独立目录**：每个子命令有专门的深度文档，配合交叉引用构建完整的 perf 知识网络。

## 📂 新文档结构

| 子命令 / 主题 | 文档 | 一句话 |
|---------------|------|--------|
| **perf stat** | [perf-stat.md](/concepts/perf/perf-stat.md) | 整体统计：IPC、缓存命中率、分支预测 |
| **perf top** | [perf-top.md](/concepts/perf/perf-top.md) | 实时函数级热点 |
| **perf record** | [perf-record.md](/concepts/perf/perf-record.md) | 采样采集，生成 perf.data |
| **perf report** | [perf-report.md](/concepts/perf/perf-report.md) | 采样数据分析 |
| **perf annotate** | [perf-annotate.md](/concepts/perf/perf-annotate.md) | 汇编级性能热点 |
| **perf trace** | [perf-trace.md](/concepts/perf/perf-trace.md) | 系统调用追踪 |
| **perf probe** | [perf-probe.md](/concepts/perf/perf-probe.md) | 动态探针（内核/用户态） |
| **perf c2c** | [perf-c2c.md](/concepts/perf/perf-c2c.md) | 缓存伪共享检测 |
| **perf lock** | [perf-lock.md](/concepts/perf/perf-lock.md) | 锁竞争分析 |
| **perf sched** | [perf-sched.md](/concepts/tools/perf-sched.md) | 调度器分析 |
| **事件体系** | [perf-events.md](/concepts/perf/perf-events.md) | 硬件/软件/tracepoint 事件参考 |
| **火焰图** | [perf-flamegraph.md](/concepts/perf/perf-flamegraph.md) | 火焰图生成与解读 |

> 📖 **总索引**：[concepts/perf/README.md](/concepts/perf/README.md) —— 子命令全景图、学习路径、排查路径、交叉引用

---

## 相关文档

| 主题 | 链接 |
|------|------|
| 场景化学习架构（12 个 demo） | [perf-demos-architecture.md](/concepts/tools/perf-demos-architecture.md) |
| 多线程+IO 三步分析法 | [perf-multithread-io-analysis.md](/concepts/tools/perf-multithread-io-analysis.md) |
| 工具定位深度对比 | [tool-perf-comprehensive-guide.md](/concepts/tools/tool-perf-comprehensive-guide.md) |
| perf 原理（PMU 采样 → mmap 缓冲区） | [perf-internals.md](/tools/code/perf-internals.md) |

---

## 实战案例导航

> 基于本仓库 `demos/cpu-demo/main.cpp` 三个场景的完整案例分析：

| 案例 | 模式 | 编译 | 视角 | 核心发现 | 链接 |
|------|------|------|------|----------|------|
| 1 | 模式 1 纯计算 | `-O0` | `:u` | IPC 0.61, cycles 12G, 理想对照组 | [案例一](/concepts/tools/perf-case-studies/01-mode1-o0-baseline.md) |
| 2 | 模式 1 纯计算 | `-O2` | `:u` | IPC 1.68, cycles 2.5G, 优化 4.7× | [案例二](/concepts/tools/perf-case-studies/02-mode1-o2-comparison.md) |
| 3 | 模式 2 syscall | `-O0` | `:u` | 和模式 1 O2 一模一样，`:u` 陷阱 | [案例三](/concepts/tools/perf-case-studies/03-mode2-o0-u-trap.md) |
| 4 | 模式 2 syscall | `-O2` | `:u` | CPU 利用率 0.99，频率 0.85 GHz 假象 | [案例四](/concepts/tools/perf-case-studies/04-mode2-o2-u-trap.md) |
| 5 | 模式 2 syscall | `-O0` | `:u`+`:k` | 真实 cycles 12.28G, 频率 4.09 GHz | [案例五](/concepts/tools/perf-case-studies/05-mode2-o0-full-view.md) |
| 6 | 模式 2 syscall | `-O2` | `:u`+`:k` | O0 vs O2 仅差 1.4%，验证结论 | [案例六](/concepts/tools/perf-case-studies/06-mode2-o2-full-view.md) |

### 核心结论速览

- **`:u` 后缀是"湖面温度计"**——只测表面，内核的真实成本完全不可见
- **对 syscall-heavy 程序，O2 优化几乎无效**（总 cycles 仅减少 1.4%），正确优化方向是减少 syscall 次数（批量写、mmap、io_uring）
- **4 字段诊断模板**：`cycles:u, cycles:k, instructions:u, instructions:k` 是 3 秒内识别程序类型的终极方案

详细分析请阅读：[perf 实战案例集](/concepts/tools/perf-case-studies/README.md)

---

## 参考资料

1. perf 官方文档：https://perf.wiki.kernel.org/index.php/Main_Page
2. 《Linux性能优化实战》 陈莉君
3. FlameGraph 官方文档：https://github.com/brendangregg/FlameGraph
4. https://www.brendangregg.com/perf.html
