无法将性能时间戳与系统纪元时间对齐



我正在使用perf来做一些优化工作。通过使用perf script显示我的性能记录并获得如下结果:

   MyServer 13631 [015] 2611179.755027: probe_app:stat_timer: (52bbe0)
   ......

我编写了一个脚本来分析结果,需要将时间戳更改为纪元时间戳(至少以秒为单位准确(。

为此,我首先获取主机启动纪元时间戳

    $ date -d "`uptime -s`" +%s
    1562557105

并通过添加正常运行时间来验证

    $ cat /proc/uptime
    2612552.50 36615651.34

开始纪元时间戳是正确的。

但是我发现性能时间戳 211179.755027 不是自文档所述系统启动以来经过的秒数,有一些关于 100s+ 的错误。如何在执行"性能记录"时获得准确的时间戳?我尝试了"-T",但它似乎不起作用。

perf(或底层perf_event_open(使用的默认时钟实际上没有记录 - 所以我不一定依赖它是任何特定的时钟。幸运的是,perf允许您使用-k选项选择特定的时钟。通常支持CLOCK_MONOTONICCLOCK_MONOTONIC_RAW。其他时钟可能可用,具体取决于事件和版本。

如果选择特定时钟,则可以使用 clock_gettime 获取匹配的时间戳。我不知道从命令行执行此操作的简单方法,但是 C 程序可以。

最新更新