我正在使用 perf 做一些优化工作。通过使用 perf script
显示我的 perf 记录并获得如下结果:
MyServer 13631 [015] 2611179.755027: probe_app:stat_timer: (52bbe0)
......
我写了一个脚本来分析结果,需要将时间戳更改为纪元时间戳(至少精确到秒)。
为此,我首先获取主机启动时间戳
$ date -d "`uptime -s`" +%s
1562557105
并通过添加正常运行时间进行验证
$ cat /proc/uptime
2612552.50 36615651.34
起始纪元时间戳是正确的。
但是我发现 perf 时间戳 211179.755027 并不是文档中所说的自系统启动以来经过的秒数,大约有 100s+ 的错误。如何在执行“性能记录”时获得准确的时间戳?我尝试了“-T”,但它似乎不起作用。
最佳答案
perf
(或底层 perf_event_open
)使用的默认时钟实际上没有记录 - 所以我不一定依赖它作为任何特定时钟。幸运的是,perf
允许您使用 -k
选项选择特定时钟。一般 CLOCK_MONOTONIC
和 CLOCK_MONOTONIC_RAW
是受支持的。根据事件和版本,可能会提供其他时钟。
如果您选择特定时钟,则可以使用 clock_gettime
获得匹配的时间戳。我不知道执行此操作的简单方法 from command line , 但 C 程序就可以了。
关于linux - 无法将 perf 时间戳与系统纪元时间对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57391344/