【发布时间】: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 是函数的返回点。 这非常接近我想要的,你可以看到我得到了调用的时间。
三个问题:
- 时间的格式是什么?是秒吗?这似乎是因为我预计 mlx5e_xmit 需要不到一微秒的时间。
- 我可以获得更好的分辨率吗?我需要确切的时间,正如您在上面看到的,一些函数在同一个时间戳上开始和结束。
- 我可以得到周期数而不是时间吗?这会给我最好的解决方案。
【问题讨论】:
标签: performance performancecounter perf