jj1*_*7jj 3 linux timestamp perf
我想使用“perf”来测量函数的实际执行时间。“perf script”命令给出调用函数时的时间戳。
Xorg 1523 [001] 25712.423702: probe:sock_write_iter: (ffffffff95cd8b80)
Run Code Online (Sandbox Code Playgroud)
时间戳字段的格式为X.Y. 我该如何理解这个值?是XY秒吗?
X.Y是以 为单位的时间戳seconds.microseconds。
可以在此处查看该值的显示方式。您也可以传递开关--ns来perf script以格式显示时间戳seconds.nanoseconds。
要了解该值,您需要了解perf模块如何计算时间戳。您可以将每个事件与不同的时钟函数关联以计算时间戳。默认情况下,perf使用sched_clock函数计算事件的时间戳,更多详细信息请参见此处。
event->clock = &local_clock;
Run Code Online (Sandbox Code Playgroud)
但您可以使用-k开关和perf record命令将事件与各种时钟关联起来。
-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.
Run Code Online (Sandbox Code Playgroud)
将开关添加-k到perf record命令将启用各种时钟功能,具体取决于您使用的时钟 ID,如此处所示。
sched_clock函数应返回自系统启动以来的纳秒数。sched_clock()特定的体系结构可能会也可能不会提供其自身的实现。sched_clock()如果未提供本地实现,系统 jiffy 计数器将用作。
请注意,以上所有代码片段均适用于Linux 内核 5.6.7。