Appearance
demos/ —— 可跑的示例程序
把文档里讲的理论做成可亲手编译运行的最小 demo——"纸上得来终觉浅,跑一遍才真懂"。
全局地图见 OVERVIEW.md;perf 12 场景学习架构总纲见 perf-demos-architecture.md。
目录总览
bash
demos/
├── 基础程序(4 个)
│ ├── cpu-demo/ D1+D2 perf stat 基础 + perf record 火焰图
│ ├── compiler-reordering/ 编译器重排 data-race UB
│ ├── crash-signals/ 崩溃信号(10 个程序)
│ └── tlb-thrashing/ D3 TLB 抖动实验
├── perf 场景化学习(9 个新增)
├── cache-miss/ D4 缓存未命中模式(顺序/随机/跨步)
├── branch-predict/ D5 分支预测(有序/随机/无分支)
├── indirect-branch/ D13 间接分支预测(虚函数/函数指针/switch)
├── stall-analysis/ D6 流水线停顿(前端 vs 后端)
├── syscall-trace/ D7 perf trace 系统调用追踪
├── lock-contention/ D8 perf lock 锁争用诊断
├── false-sharing/ D9 perf c2c 伪共享检测
├── sched-latency/ D10 perf sched 调度延迟诊断
├── perf-probe/ D11 perf probe 动态探针插桩
└── perf-bench-diff/ D12 perf bench/diff 微基准+优化对比
├── mt-io-demo/ D14 多线程+IO 分析方法三步法演练
└── 应用实战(1 个)
└── echo/ 百万QPS TCP 长连接实战(NUMA+网卡调优+内核参数全链路)入门级(3 个)—— 学会看懂 perf stat
| # | demo | make run | 核心知识点 |
|---|---|---|---|
| D1 | cpu-demo | ./cpu_demo 选 1/2/3 | perf stat 8 项默认指标,IPC,utime/stime |
| → analysis-stat.md | D1 perf stat 逐行解读 | ||
| D2 | cpu-demo | ./cpu_demo 选 1/2 | perf record/report,火焰图,O0 vs O2 |
| → analysis-record.md | D2 perf record + 火焰图完整流程 | ||
| D3 | tlb-thrashing | ./tlb_thrashing | dTLB-loads/misses,页工作集→TLB 拐点 |
| → analysis.md | D3 TLB perf 分析指南 |
进阶级(4 个)—— 深入硬件 PMU 事件 + 内核 tracepoint
| # | demo | 核心知识点 |
|---|---|---|
| D4 | cache-miss | cache-references/misses,L1-dcache-*,LLC-*,顺序/随机/跨步对比 |
| D5 | branch-predict | branch-instructions/misses,有序/随机/无分支,-O2 cmov 自动优化 |
| D6 | stall-analysis | stalled-cycles-frontend/backend,4 种停顿模式根因定位 |
| D13 | indirect-branch | branch-loads/branch-load-misses,虚函数单态/双态/巨态,函数指针,switch 跳转表 |
| D7 | syscall-trace | perf trace,syscalls tracepoint,vs strace 开销对比 |
专家级(5 个)—— perf 高级子命令实战
| # | demo | 核心知识点 |
|---|---|---|
| D8 | lock-contention | perf lock record/report,mutex 短/长临界区 + spinlock |
| 实测报告已合并 | D8 实测数据 + 结论见 README「实测报告」节(futex 代理 + 热点分析) | |
| D9 | false-sharing | perf c2c record/report,HITM%,alignas(64) 修复 |
| D10 | sched-latency | perf sched record/latency/timehist/map,CPU/IO/竞争模式 |
| 实测报告已合并 | D10 实测数据 + 结论见 README「实验数据」节(三层负载调度延迟对比) | |
| D11 | perf-probe (原理篇) | perf probe --add 动态插桩 vs USDT 静态点 vs ftrace,原理详解 + 三方对账 + 线上无 -g 处置 |
| D12 | perf-bench-diff | perf diff,优化前后 Delta%,perf bench 系统微基准 |
快速选择指南
| 我想... | 跑这个 |
|---|---|
| 第一次用 perf | D1 → D2 |
| 理解 IPC / 缓存 / 分支预测是什么意思 | D1 → D4 → D5 |
| 虚函数/函数指针/switch 的间接分支预测 | D13 |
| 知道 CPU 忙但不知道在等什么 | D6 (前端 vs 后端) |
| 看程序做了哪些系统调用 | D7 |
| 定位多线程锁瓶颈 | D8 |
| 检查多线程是否有伪共享 | D9 |
| 检查线程调度是否公平 | D10 |
| 不重编译就抓函数参数 | D11 |
| 量化优化效果 | D12 |
| 用 perf 三步法分析多线程+IO 混合程序 | D14 |
应用实战(1 个)—— 百万QPS TCP 高并发全链路
| # | demo | 核心知识点 |
|---|---|---|
| E1 | echo | 总纲 · 架构 · 分析指南 |
| 我想... | 跑这个 |
|---|---|
| 动手验证百万长连接承载 | E1 |
| 理解 NUMA 对网络服务性能的影响 | E1 |
| 实操网卡多队列 + 软中断绑定 | E1 |
| 吃透 TCP TIME_WAIT/CLOSE_WAIT/端口耗尽 | E1 |
| 完整走一遍线上后端性能优化的全流程 | E1 |
推荐学习路径
| 路径 | 耗时 | 场景 |
|---|---|---|
| 快速入门 | 2~3h | D1 → D2 → D4 → D5 |
| 系统进阶 | 5~6h | D1 → D2 → D3 → D4 → D5 → D6 → D7 → D12 |
| 专家级 | 8~10h | D1→D12 全部 |
| 网络实战 | 30-60天 | E1(每日1小时,完整走一遍百万QPS全链路) |
一句话:12 个 perf demo + 1 个百万QPS网络实战项目,从 perf stat 一行命令到百万并发 NUMA 调优,覆盖 perf 14 个子命令、40+ event 和 TCP 高并发全链路。