在Linux內核中,我們可以發現主要有這么幾種不同類型的時鍾(clock):
CLOCK_REALTIME CLOCK_MONOTONIC CLOCK_MONOTONIC_RAW CLOCK_BOOTTIME
CLOCK_REALTIME,可以理解為wall time,即是實際的時間。用戶可以使用命令(date)或是系統調用去修改。如果使用了NTP, 也會被NTP修改。當系統休眠(suspend)時,仍然會運行的(系統恢復時,kernel去作補償)。
CLOCK_MONTONIC,是單調時間,即從某個時間點開始到現在過去的時間。用戶不能修改這個時間,但是當系統進入休眠(suspend)時,CLOCK_MONOTONIC是不會增加的。
CLOCK_MONOTONIC_RAW,和CLOCK_MONOTONIC類似,但不同之處是MONOTONIC_RAW不會受到NTP的影響。CLOCK_MONOTONIC會受到NTP的影響並不是說NTP會去修改CLOCK_MONOTONIC,使其不連續,而是說當NTP server 和本地的時鍾硬件之間有問題,NTP會影響到CLOCK_MONOTONIC的頻率,但是MONOTONIC_RAW則不會受其影響。 其區別可以參考 Difference between MONOTONIC and MONOTONIC_RAW
CLOCK_BOOTTIME,與CLOCK_MONOTONIC類似,但是當suspend時,會依然增加。可以參考LWN的這篇文章 introduce CLOCK_BOOTTIME