【问题标题】:Analyzing execution times with perf script使用 perf 脚本分析执行时间
【发布时间】:2017-08-29 20:53:42
【问题描述】:

我正在尝试使用 oerf 工具测量特定功能的准确执行时间/周期。我使用 perf 探针添加了用于进入和返回每个函数的事件。我可以像这样使用 perf 脚本查看函数:

  perf script --header -F comm,pid,tid,cpu,time,event

这是我得到的:

  kpktgend_1 33688/33688 [001] 151433.505544: probe:pktgen_alloc_skb:
  kpktgend_1 33688/33688 [001] 151433.505545: probe:pktgen_alloc_skb_1:
  kpktgend_1 33688/33688 [001] 151433.505546: probe:mlx5e_xmit:
  kpktgend_1 33688/33688 [001] 151433.505546: probe:mlx5e_xmit_1:
  kpktgend_1 33688/33688 [001] 151433.505547: probe:pktgen_alloc_skb:
  kpktgend_1 33688/33688 [001] 151433.505547: probe:pktgen_alloc_skb_1:
  kpktgend_1 33688/33688 [001] 151433.505548: probe:mlx5e_xmit:
  kpktgend_1 33688/33688 [001] 151433.505549: probe:mlx5e_xmit_1:

每个“事件”都是函数的入口点,“事件”_1 是函数的返回点。 这非常接近我想要的,你可以看到我得到了调用的时间。

三个问题:

  1. 时间的格式是什么?是秒吗?这似乎是因为我预计 mlx5e_xmit 需要不到一微秒的时间。
  2. 我可以获得更好的分辨率吗?我需要确切的时间,正如您在上面看到的,一些函数在同一个时间戳上开始和结束。
  3. 我可以得到周期数而不是时间吗?这会给我最好的解决方案。

【问题讨论】:

    标签: performance performancecounter perf


    【解决方案1】:

    使用 --ns 标志运行 perf 脚本可以解决问题。

    perf script -F time --ns
    76970.575503465:
    76970.575506464:
    76970.575507479:
    

    没有:

    $perf script -F time
    76970.575503:
    76970.575506:
    76970.575507:
    

    来自文档:

    perf script -h
    --ns              Use 9 decimal places when displaying time
    

    【讨论】:

    • 请注意,还有-k, --clockid 对应perf record,您可以在其中选择不同的时钟。不过默认应该没问题。
    • 我在性能记录上找不到这个选项,你知道它是在哪个版本引入的吗?我使用:性能版本 3.10.0-514.el7.x86_64.debug。无论如何,问题在于 perf 脚本的呈现,而不是在以纳秒分辨率解析的记录本身。
    • 2年前发布的4.1引入。
    猜你喜欢
    • 2014-03-12
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 2021-12-02
    • 1970-01-01
    相关资源
    最近更新 更多