代码之家  ›  专栏  ›  技术社区  ›  Bram

如何启动和停止性能采样

  •  5
  • Bram  · 技术社区  · 7 年前

    我正在用perf测试程序的性能。

    这对我来说很有用:

    $ perf record -g  ./bench
    ...
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.023 MB perf.data (93 samples) ]
    $ ls -al perf.data
    -rw------- 1 bram bram 26848 Oct 25 10:22 perf.data
    

    $ perf record -g -e cycles --filter="start render_image" ./bench
    --filter option should follow a -e tracepoint option
    

    我被难住了,因为过滤器标志确实遵循-e选项。这是怎么回事?

    最后,我假设“-e cycles”是默认事件?

    更新:正如Arnabjyoti Kalita所解释的,有一类特殊的事件称为跟踪点。如果我以root身份运行perf,它们只会显示在“perf list”中。

    糟糕的性能似乎只有在跟踪该类型的事件而不是默认的cpu周期时才能启动/停止收集。

    2 回复  |  直到 7 年前
        1
  •  3
  •   Jorge Bellon    5 年前

    由于手册页指定跟踪过滤仅支持硬件PMU跟踪事件,因此需要使用 -e 能够正确过滤您的记录。

    我使用的系统支持Intel PT:

    perf list
      intel_pt//                                         [Kernel PMU event]
    

    你可以看到 this blog post 将perf与Intel PT结合使用的几个示例。在我的情况下,以下命令为我实现了目标:

    perf record --call-graph lbr -g -e "intel_pt//" --filter "filter main @ $HOME/test" -- ./test
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.047 MB perf.data ]
    

    注意,根据您的内核运行时配置,您可能需要以root身份运行此命令。

    无法使用 cycles 事件是它由处理器特定区域中的硬件计数器组成,称为性能监视单元(PMU)。该计数器在每个周期内递增,因此您可以通过读取并减去值来猜测两个时间点之间经过了多少个周期。

    Intel PT

        2
  •  1
  •   Jorge Bellon    5 年前

    我建议开始阅读 perf record perf record --filter 选项在手册页的帮助下,我发现:-

    --filter

    -e )选择跟踪点事件或硬件跟踪PMU(例如。 英特尔PT CoreSight公司 )

    基本上,只有当事件是跟踪点事件或硬件跟踪事件(如IntelPT)时,过滤器选项才起作用。那么让我们检查一下 -e cycles 是跟踪点事件。

    如果我做一个 perf list

    ~/linux-4.11.3/tools/perf/perf list
    List of pre-defined events (to be used in -e):
    cpu-cycles OR cycles                               [Hardware event]
    

    显然,周期不是一个 硬件事件 . 跟踪点事件的示例可以是:

    kmem:kmalloc                             [Tracepoint event]
    

    perf.data 可以基于许多参数收集数据包。已采集的样本已按特定频率/周期采集。

    perf record -F 频率 性能记录 . 因此,已经收集的样本数量较少可能是由于这个频率-也许你可以尝试增加频率,看看是否有一些改善。还有一个选项可以设置事件的时间段。请注意,通常可以将此频率提高到一个极限-超过该极限,即使CPU也会开始出现自我管理问题(由于中断和所有…)。

    是的,你说得对 -e周期 是默认事件,即如果未指定任何事件并执行 性能记录 ,默认情况下,性能将仅收集 周期 事件。