使用 perf 查找线程瓶颈并针对挂钟时间进行优化

Finding threading bottlenecks and optimizing for wall-time with perf

使用 perf record 采样 cpu 周期对于在核心利用率大致恒定的情况下寻找优化候选对象很有用。但是对于具有多个阶段的并行计算不同的代码 cpu-cycles 将强调高度并行的阶段,同时不强调影响壁时间的顺序或有限并行阶段。简而言之,天真的 perf 使用可能会突出 amdahl's law

的错误分支

所以问题是如何让 perf record/perf report 找到优化候选者以减少挂起时间,这可能是从一致并行代码中最热的循环到适度并行的任何东西长单线程阶段的瓶颈。

已知的解决方法还有待改进:

meta:这是特定性能的跟进

KDAB Hotspot 是一个 GUI,可以分析 perf record 输出,如果配置文件已使用 -e sched:sched_switch --switch-events --sample-cpu

记录,还可以显示上下文切换和核心利用率