Linux 不同时钟的区别
在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