Selon la page de manuel Linux sous 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.
Selon le dictionnaire en ligne Webster, Monotonic signifie:
2: ayant la propriété de ne jamais augmenter ou de ne jamais diminuer à mesure que les valeurs de la variable indépendante ou les indices des termes augmentent.
En d'autres termes, il ne sautera pas en arrière. Je peux voir que ce serait une propriété importante si vous chronométriez du code.
Cependant, la différence entre la version normale et la version brute n'est pas claire. Quelqu'un peut-il nous expliquer comment NTP peut toujours affecter CLOCK_MONOTONIC?
CLOCK_MONOTONIC
ne subit jamais de discontinuités en raison de NTP ajustements de temps, mais il fait change de fréquence comme NTP apprend quelle erreur existe entre le oscillateur local et les serveurs en amont.
CLOCK_MONOTONIC_RAW
est simplement l'oscillateur local, non discipliné par NTP. Cela pourrait être très utile si vous souhaitez implémenter un autre algorithme de synchronisation horaire contre une horloge qui ne vous combat pas en raison de NTP. Alors que ntpd (l'implémentation de référence du protocole NTP et le démon NTP) le plus répandu) est réputé être "doux" avec les ajustements de temps, il est plus précis de dire il est doux avec le temps absolu. Il est prêt à faire tourner l'horloge de 500 ppm, ce qui est assez dramatique si vous êtes en mesure de mesurer votre fréquence d'horloge par rapport à une autre norme.
L'utilité de CLOCK_MONOTONIC_RAW
va être limité jusqu'à ce que des installations comme pthread_timedwait_monotonic
offre une option pour utiliser cette base de temps.
ntpd
n'entraîne pas le temps à jump si la différence est inférieure à un certain seuil. un ajustement de type adjtime est utilisé à la place, affectant à la fois CLOCK_MONOTONIC
et CLOCK_REALTIME
(mais non CLOCK_MONOTONIC_RAW
, Apparemment).