perf中的时间戳是什么意思?
What is meaning of timestamp in perf?
我想使用 'perf' 来测量函数的实际执行时间。 'perf script'命令在调用函数时给出时间戳。
Xorg 1523 [001] 25712.423702: probe:sock_write_iter: (ffffffff95cd8b80)
时间戳字段的格式为 X.Y
。我如何理解这个值?是X.Y秒吗?
X.Y 是日期的原始格式。 perf 的时间函数以纳秒为单位运行,需要转换为人类可读的格式。使用此网站将其转换为日期 http://www.timestamp.fr/ ,或使用 bash
date -d @25712
X.Y
是以seconds.microseconds
为单位的时间戳。
这个值是如何显示的可以看here。您可以将开关 --ns
传递给 perf script
以显示 seconds.nanoseconds
格式的时间戳。
要理解这个值,你需要理解perf
模块是如何计算时间戳的。您可以将每个事件与不同的时钟函数相关联以计算时间戳。默认情况下,perf
使用 sched_clock
函数计算事件的时间戳,更多详细信息 here。
event->clock = &local_clock;
但您可以使用 -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.
将-k
开关添加到perf record
命令将启用各种时钟功能,具体取决于您使用的clockid,可以看出here。
sched_clock
函数应 return 自系统启动以来的纳秒数。特定的体系结构可能会也可能不会单独提供 sched_clock()
的实现。如果未提供本地实现,系统 jiffy 计数器将用作 sched_clock()
。
请注意,以上所有代码片段均适用于 Linux 内核 5.6.7.
我想使用 'perf' 来测量函数的实际执行时间。 'perf script'命令在调用函数时给出时间戳。
Xorg 1523 [001] 25712.423702: probe:sock_write_iter: (ffffffff95cd8b80)
时间戳字段的格式为 X.Y
。我如何理解这个值?是X.Y秒吗?
X.Y 是日期的原始格式。 perf 的时间函数以纳秒为单位运行,需要转换为人类可读的格式。使用此网站将其转换为日期 http://www.timestamp.fr/ ,或使用 bash
date -d @25712
X.Y
是以seconds.microseconds
为单位的时间戳。
这个值是如何显示的可以看here。您可以将开关 --ns
传递给 perf script
以显示 seconds.nanoseconds
格式的时间戳。
要理解这个值,你需要理解perf
模块是如何计算时间戳的。您可以将每个事件与不同的时钟函数相关联以计算时间戳。默认情况下,perf
使用 sched_clock
函数计算事件的时间戳,更多详细信息 here。
event->clock = &local_clock;
但您可以使用 -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.
将-k
开关添加到perf record
命令将启用各种时钟功能,具体取决于您使用的clockid,可以看出here。
sched_clock
函数应 return 自系统启动以来的纳秒数。特定的体系结构可能会也可能不会单独提供 sched_clock()
的实现。如果未提供本地实现,系统 jiffy 计数器将用作 sched_clock()
。
请注意,以上所有代码片段均适用于 Linux 内核 5.6.7.