В чем разница между CLOCK_MONOTONIC и CLOCK_MONOTONIC_RAW?
В соответствии с линией Linux в разделе Ubuntu
CLOCK_MONOTONIC
Clock that cannot be set and represents monotonic time since
some unspecified starting point.
CLOCK_MONOTONIC_RAW (since Linux 2.6.28; Linux-specific)
Similar to CLOCK_MONOTONIC, but provides access to a raw hard‐
ware-based time that is not subject to NTP adjustments.
В соответствии с веб-браузером онлайн-словарь Monotonic означает:
2: обладающее свойством либо никогда не увеличиваться, либо никогда уменьшаясь как значения независимой переменной или индексов членов возрастает.
Другими словами, он не скатится назад. Я вижу, что это было бы важным свойством, если бы вы определяли некоторый код.
Однако разница между нормальной и необработанной версией неясна. Может ли кто-то пролить свет на то, как NTP может по-прежнему влиять на CLOCK_MONOTONIC?
Ответы
Ответ 1
CLOCK_MONOTONIC
никогда не испытывает разрывов из-за корректировки времени NTP, но он меняет частоту, поскольку NTP узнает, какая ошибка существует между локальным генератором и восходящими серверами.
CLOCK_MONOTONIC_RAW
является просто локальным осциллятором, а не дисциплинированным NTP. Это может быть очень полезно, если вы хотите реализовать какой-то другой алгоритм синхронизации времени против часов, которые не сражаются с вами из-за NTP. Хотя ntpd (эталонная реализация протокола NTP и самый распространенный демон NTP) считается "нежным" с настройками времени, более точно сказать, что он нежен с абсолютным временем. Он готов убить часы на 500ppm, что довольно драматично, если вы можете измерить свою тактовую частоту по сравнению с другими стандартами.
Утилита CLOCK_MONOTONIC_RAW
будет ограничена до тех пор, пока такие объекты, как pthread_timedwait_monotonic
, не смогут использовать эту временную базу.
Ответ 2
ntpd
не приводит к скачку времени, если разница ниже определенного порога. вместо этого используется корректировка с учетом времени, влияющая как на CLOCK_MONOTONIC
, так и на CLOCK_REALTIME
(но не на CLOCK_MONOTONIC_RAW
, видимо).