【问题标题】:What is meaning of timestamp in perf?perf中时间戳的含义是什么?
【发布时间】:2020-04-25 12:56:36
【问题描述】:

我想使用“性能”来测量函数的实际执行时间。 'perf script' 命令在函数被调用时给出时间戳。

Xorg  1523 [001] 25712.423702:    probe:sock_write_iter: (ffffffff95cd8b80)

时间戳字段的格式为X.Y。我如何理解这个价值?是 X.Y 秒吗?

【问题讨论】:

  • perf 输出中的时间戳“X.Y”是 X 秒和 Y 微秒。在perf script 中输出它可能是自 linux 启动以来的 X 秒。 dmesg 输出中使用了类似的时间格式。

标签: linux timestamp perf


【解决方案1】:

X.Y 是以seconds.microseconds 为单位的时间戳。

这个值的显示方式可以看here。您也可以通过开关--nsperf scriptseconds.nanoseconds 格式显示时间戳。

要了解此值,您需要了解perf 模块如何计算时间戳。您可以将每个事件与不同的时钟函数相关联以计算时间戳。默认情况下,perf 使用sched_clock 函数来计算事件的时间戳,更多详细信息here

event->clock = &local_clock;

但您可以使用-k 开关和perf record 命令将事件与各种时钟ID 相关联。

-k, --clockid
           Sets the clock id to use for the various time fields in the
           perf_event_type records. See clock_gettime(). In particular
           CLOCK_MONOTONIC and CLOCK_MONOTONIC_RAW are supported, some
           events might also allow CLOCK_BOOTTIME, CLOCK_REALTIME and
           CLOCK_TAI.

-k 开关添加到perf record 命令将启用各种时钟功能,具体取决于您使用的时钟ID,如here 所示。

sched_clock 函数应返回自系统启动以来的纳秒数。特定的架构可能会或可能不会自己提供sched_clock() 的实现。如果未提供本地实现,系统 jiffy 计数器将用作 sched_clock()

请注意,以上所有代码 sn-ps 均适用于 Linux 内核 5.6.7

【讨论】:

    【解决方案2】:

    X.Y 是日期的原始格式。 perf 的时间函数以纳秒为单位运行,需要转换为人类可读的格式。使用本网站将其转换为日期,http://www.timestamp.fr/,或使用 bash

    date -d @25712
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-03
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      相关资源
      最近更新 更多