星期五, 9月 06, 2024

指定時間的類型

 clock_getres 的第一個參數是指定時間的類型,常見的類型有:

    https://blog.gtwang.org/programming/measure-the-execution-time-in-c-language/2/#google_vignette

    • CLOCK_REALTIME:系統的實際時間(wall-clock time)。
    • CLOCK_REALTIME_COARSE:系統的實際時間(wall-clock time),取得速度快,但精確度校低。
    • CLOCK_MONOTONIC:單調遞增時間(monotonic time),這個時間會非常穩定的持續遞增,不會因為系統時間改變而有變動,適合用於測量程式執行效能。
    • CLOCK_MONOTONIC_COARSE:與 CLOCK_MONOTONIC 類似,取得速度快,但精確度校低。
    • CLOCK_MONOTONIC_RAW:與 CLOCK_MONOTONIC 類似,但是它是從硬體時鐘所讀取出來的值。
    • CLOCK_PROCESS_CPUTIME_ID:程式行程的 CPU time,這個時間包含所有的執行序所花費的時間。
    • CLOCK_THREAD_CPUTIME_ID:程式單一執行序所耗費的時間。

    https://www.cnblogs.com/memo-store/p/5658277.html

     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

    沒有留言: