使用perf脚本分析执行时间

时间:2017-08-29 20:53:43

标签: performance performancecounter perf

我正在尝试使用oerf工具测量特定功能的确切执行时间/周期。我添加了使用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:

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

三个问题:

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

1 个答案:

答案 0 :(得分: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