【发布时间】:2020-09-09 09:43:54
【问题描述】:
我有一个要分析的 C++ 函数,并且只有该函数。一种可能的方法是使用 chrono 并仅测量运行该函数所需的时间并将其打印出来,运行该程序几次,然后对样本进行统计。
我想知道我是否可以跳过显式编码时间测量,而只要求 perf 专注于指定函数所花费的时间。
【问题讨论】:
我有一个要分析的 C++ 函数,并且只有该函数。一种可能的方法是使用 chrono 并仅测量运行该函数所需的时间并将其打印出来,运行该程序几次,然后对样本进行统计。
我想知道我是否可以跳过显式编码时间测量,而只要求 perf 专注于指定函数所花费的时间。
【问题讨论】:
查看 Google 的基准测试 library 以对感兴趣的函数进行微基准测试。
然后,您可以像往常一样使用 perf 分析生成的可执行文件。
例如,假设在basic usage 之后,您生成了一个名为 mybenchmark 的可执行文件。然后,您可以像往常一样在二进制文件上运行 perf
$ perf stat ./mybenchmark
【讨论】:
您可以以 SVG 格式构建整个应用程序的flame graph。使用火焰图,您可以快速查看占用 CPU 时间最多的函数。 SVG 火焰图是交互式的:您可以单击任何功能并仅查看所选功能的详细火焰图。来自description of flame graphs:
它也是交互式的:将鼠标悬停在 SVG 上以显示细节,然后单击放大。
您可以在示例 bash 火焰图上试用它:
http://www.brendangregg.com/FlameGraphs/cpu-bash-flamegraph.svg
【讨论】: