Appearance
demos/cpu-demo/ —— 核心演示程序
本仓库的"靶子程序",所有工具文档和 perf 案例都围绕它展开。
功能
读取 /proc/self/stat 和 /proc/stat 计算自身 CPU 使用率,提供三种场景:
| 场景 | 行为 | 性能特征 |
|---|---|---|
| 1 | 用户态忙循环 while(true) sum += i | %usr 飙升,IPC 高 |
| 2 | 内核态 syscall 风暴 getpid() 循环 | %sys 飙升,上下文切换频繁 |
| 3 | 空闲 sleep() | 几乎 0% CPU |
运行
bash
make # 编译(默认 -O0 -g,保留 perf 符号)
make run # 交互式运行,选场景 1/2/3
make release # -O2 编译对比(演示优化器消除忙循环)
make clean # 清理用工具观察
编译运行后,用以下工具同时观察:
| 工具 | 命令 | 看什么 |
|---|---|---|
| top | top -H -p $(pgrep cpu_demo) | 进程 CPU 占用率 |
| perf | perf record -p $(pgrep cpu_demo) -g -- sleep 10 | 函数级热点 |
| perf stat | perf stat -p $(pgrep cpu_demo) -- sleep 10 | IPC、cache-miss、分支预测 |
| strace | strace -c -p $(pgrep cpu_demo) | 系统调用频次统计 |
| pidstat | pidstat -ut 1 -p $(pgrep cpu_demo) | 用户态/内核态拆分 |
关键设计说明
- CPU 使用率按单核计算(不乘核心数),多核机器上显示偏低是设计行为,不是 bug。
-O0 -g是故意的:perf 火焰图需要符号和行号。make release用-O2对比展示优化器的效果。
相关文档
- 工具总索引:../../tools/README.md
- perf 高级使用:../../concepts/tools/perf-advanced.md
- perf 案例集:../../concepts/tools/perf-case-studies/
一句话:
cd demos/cpu-demo && make && ./cpu_demo选场景,然后拿 top/perf/strace/pidstat 对着它练——本仓库所有工具文档的实操都基于这个靶子。