使用 perf 脚本分析执行时间

Analyzing execution times with perf script

我正在尝试使用 oerf 工具测量特定函数的精确执行 time/cycles。我使用 perf 探测器添加了用于从每个函数进入和 returning 的事件。我可以像这样使用 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" 是函数的入口点,"event"_1 是函数的 return 点。 这非常接近我想要的,正如你所看到的,我得到了调用的时间。

三个问题:

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

运行 带有 --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