/proc/uptime 和 dmesg 之间的时间戳差异

问题描述 投票:0回答:2

今天我注意到运行 redhat 7.3 的 Linux 机器中的时间戳存在问题。 dmesg 中显示的时间戳落后于 /proc/uptime 中显示的时间戳

# echo TEST > /dev/kmsg &&  dmesg | tail -1 && cat /proc/uptime
  [661503.956980] TEST
  661301.99 15107232.56

据我了解,它们都显示自内核初始化以来经过的秒数。那么是什么导致了这里的差异呢?

linux time kernel uptime dmesg
2个回答
0
投票

dmesg 时间戳显示 CLOCK_MONOTONIC,而 /proc/uptime 显示 CLOCK_BOOTTIME。

有关 CLOCK_* 是什么的详细信息,请参阅“man timer_create”。


0
投票

它们是不同的时钟。

  • 内核 dmesg 的时间戳由内核内部检索 local_clock(),不导出到用户空间。它不是 CLOCK_MONOTONIC 或 CLOCK_MONOTONIC_RAW。

  • /proc/uptime 中显示的时间是 CLOCK_BOOTTIME。 CLOCK_BOOTTIME 是 与 CLOCK_MONOTONIC 相同,只是它还包括任何时间 系统已暂停。

© www.soinside.com 2019 - 2024. All rights reserved.