linux - 无法将 perf 时间戳与系统纪元时间对齐

标签 linux performance perf

我正在使用 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_MONOTONICCLOCK_MONOTONIC_RAW 是受支持的。根据事件和版本,可能会提供其他时钟。

如果您选择特定时钟,则可以使用 clock_gettime获得匹配的时间戳。我不知道执行此操作的简单方法 from command line , 但 C 程序就可以了。

关于linux - 无法将 perf 时间戳与系统纪元时间对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57391344/

相关文章:

linux - Node JS 实时报告(图形)模块

javascript - jquery .remove 性能

postgresql - postgres cube 欧氏距离查询性能问题

linux: 有什么工作是 "gprof"可以做而 "perf"不能做的吗?需要澄清

php - 使用 PHP 在 Linux Debian 中合并 MP3 文件

python - 在 Linux 上打包(归档)Python 项目

linux - 编写 Shell 脚本

c - 很多printf的副作用?

Linux `perf record --append` 选项缺失

linux - 我如何使用 perf 获取多处理器计算机中的每个 cpu 消息?