"perf sched record"使用什么时间范围?



我一直试图分析perf sched record的输出,但我不明白我试图理解";20624.983302秒";。现在肯定不是Unix时代,那么现在是什么时候呢?我该如何将其转换为Unix时间?

*A0                               20624.983302 secs A0 => migration/0:12
*.                                20624.983311 secs .  => swapper:0
*B0                               20624.983318 secs B0 => IPC I/O Child:33924
*.                                20624.983355 secs 
*C0                               20624.983485 secs C0 => WRScene~lder#15:39974
*.                                20624.983581 secs 
*D0                               20624.983972 secs D0 => IPC I/O Parent:33780

这些时间戳是使用内核调度程序时钟捕获的,自启动以来以纳秒为单位。具体细节取决于为构建特定Linux发行版和目标体系结构而选择的编译时参数。

通常,样本的时间戳是在记录样本的同时捕获的。只要内核保持活动状态,同一内核上的时间戳就保证单调增加。您展示的样本都是在同一个岩芯上捕获的,从第一个样本到最后一个样本,岩芯都保持活跃。因此,在这种情况下,无论平台和分布如何,时间戳都保证是单调的。在多个核心上进行分析时,无法保证所有核心上的时钟同步。

所有perf工具都使用相同的时钟来捕获时间戳,但它们可能在打印时间戳的方式上有所不同,并且可能会出现两个工具从同一示例文件中打印时间戳不同的情况。这取决于内核版本。

当调用perf_event_open()时,可以通过将use_clockid设置为1并将clockid设置为linux/time.h中定义的时钟源之一(例如CLOCK_MONOTONIC(来指定时钟源。perf record提供-k--clockid选项以指定用于捕获时间戳的时钟源。

x86上的现代发行版通常使用TSC作为调度程序时钟的源(检查/sys/devices/system/clocksource/clocksource0/current_clocksource(。因此,如果您使用的是x86处理器,则最有可能的是,已配置内核的TSC用于捕获TSC周期的当前值,该值在内部转换为纳秒。打印时间戳时,它可能会被转换为不同的单位。在这种情况下,时间戳以";秒微秒";。TSC在英特尔处理器上的行为摘要可以在以下位置找到:恒定非不变TSC可以在cpu状态之间改变频率吗?。

最新更新