使用 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 点。
这非常接近我想要的,正如你所看到的,我得到了调用的时间。
三个问题:
- 时间的格式是什么?是秒吗?这看起来可能是这样,因为我希望 mlx5e_xmit 花费不到一微秒。
- 我能得到更好的分辨率吗?我需要确切的时间,正如您在上面看到的,一些函数在相同的时间戳开始和结束。
- 我可以得到周期数而不是时间吗?这会给我最好的分辨率。
运行 带有 --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
我正在尝试使用 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 点。 这非常接近我想要的,正如你所看到的,我得到了调用的时间。
三个问题:
- 时间的格式是什么?是秒吗?这看起来可能是这样,因为我希望 mlx5e_xmit 花费不到一微秒。
- 我能得到更好的分辨率吗?我需要确切的时间,正如您在上面看到的,一些函数在相同的时间戳开始和结束。
- 我可以得到周期数而不是时间吗?这会给我最好的分辨率。
运行 带有 --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