使用 perf 查找线程瓶颈并针对挂钟时间进行优化
Finding threading bottlenecks and optimizing for wall-time with perf
使用 perf record
采样 cpu 周期对于在核心利用率大致恒定的情况下寻找优化候选对象很有用。但是对于具有多个阶段的并行计算不同的代码 cpu-cycles 将强调高度并行的阶段,同时不强调影响壁时间的顺序或有限并行阶段。简而言之,天真的 perf 使用可能会突出 amdahl's law
的错误分支
所以问题是如何让 perf record
/perf report
找到优化候选者以减少挂起时间,这可能是从一致并行代码中最热的循环到适度并行的任何东西长单线程阶段的瓶颈。
已知的解决方法还有待改进:
- 在单核上执行工作负载,因此挂钟时间≅cpu-周期
- 分别分析各个组件
meta:这是特定性能的跟进
KDAB Hotspot 是一个 GUI,可以分析 perf record
输出,如果配置文件已使用 -e sched:sched_switch --switch-events --sample-cpu
记录,还可以显示上下文切换和核心利用率
使用 perf record
采样 cpu 周期对于在核心利用率大致恒定的情况下寻找优化候选对象很有用。但是对于具有多个阶段的并行计算不同的代码 cpu-cycles 将强调高度并行的阶段,同时不强调影响壁时间的顺序或有限并行阶段。简而言之,天真的 perf 使用可能会突出 amdahl's law
所以问题是如何让 perf record
/perf report
找到优化候选者以减少挂起时间,这可能是从一致并行代码中最热的循环到适度并行的任何东西长单线程阶段的瓶颈。
已知的解决方法还有待改进:
- 在单核上执行工作负载,因此挂钟时间≅cpu-周期
- 分别分析各个组件
meta:这是特定性能的跟进
KDAB Hotspot 是一个 GUI,可以分析 perf record
输出,如果配置文件已使用 -e sched:sched_switch --switch-events --sample-cpu