GNU/Linux >> Tutoriels Linux >  >> Linux

Différence entre CLOCK_REALTIME et CLOCK_MONOTONIC ?

CLOCK_REALTIME est affecté par NTP et peut avancer et reculer. CLOCK_MONOTONIC ne l'est pas et avance d'un tick par tick.


Le livre de Robert Love LINUX System Programming 2nd Edition , répond spécifiquement à votre question au début du chapitre 11, pg 363 :

L'aspect important d'une source de temps monotone n'est PAS la valeur actuelle, mais la garantie que la source de temps augmente strictement linéairement, et donc utile pour calculer la différence de temps entre deux échantillonnages

Cela dit, je pense qu'il suppose que les processus s'exécutent sur la même instance d'un système d'exploitation. Vous souhaiterez donc peut-être exécuter un étalonnage périodique pour pouvoir estimer la dérive.


CLOCK_REALTIME représente la meilleure estimation de la machine quant à l'heure actuelle de l'horloge murale et de l'heure du jour. Comme le disent Ignacio et MarkR, cela signifie que CLOCK_REALTIME peut sauter en avant et en arrière lorsque l'horloge système est modifiée, y compris par NTP.

CLOCK_MONOTONIC représente le temps absolu écoulé depuis un point fixe arbitraire dans le passé. Il n'est pas affecté par les modifications de l'horloge système.

Si vous souhaitez calculer le temps écoulé entre deux événements observés sur la même machine sans redémarrage intermédiaire, CLOCK_MONOTONIC est la meilleure option.

Notez que sous Linux, CLOCK_MONOTONIC ne mesure pas le temps passé en suspension, bien que selon la définition POSIX, il le devrait. Vous pouvez utiliser le CLOCK_BOOTTIME spécifique à Linux pour une horloge monotone qui continue de fonctionner pendant la suspension.


Citations POSIX 7

POSIX 7 spécifie les deux sur http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html :

CLOCK_REALTIME :

Cette horloge représente l'horloge mesurant le temps réel pour le système. Pour cette horloge, les valeurs renvoyées par clock_gettime() et spécifiées par clock_settime() représentent la durée (en secondes et nanosecondes) depuis l'Epoch.

CLOCK_MONOTONIC (fonction facultative) :

Pour cette horloge, la valeur renvoyée par clock_gettime() représente la durée (en secondes et nanosecondes) depuis un point non spécifié dans le passé (par exemple, l'heure de démarrage du système ou l'époque). Ce point ne change pas après le démarrage du système. La valeur de l'horloge CLOCK_MONOTONIC ne peut pas être définie via clock_settime().

clock_settime() donne un indice important :les systèmes POSIX sont capables de modifier arbitrairement CLOCK_REALITME avec lui, alors ne vous fiez pas à ce qu'il coule ni en continu ni en avant. NTP pourrait être implémenté en utilisant clock_settime() , et ne peut affecter que CLOCK_REALTIME .

L'implémentation du noyau Linux semble prendre le temps de démarrage comme époque pour CLOCK_MONOTONIC :Point de départ pour CLOCK_MONOTONIC


Linux
  1. Différence entre 2>&-, 2>/dev/null, |&, &>/dev/null et>/dev/null 2>&1 ?

  2. Quelle est la différence entre Sudo Su - et Sudo Su - ?

  3. Différence entre l'expansion de la tuyauterie et de la commande ?

  4. Différence entre l'utilisateur Sudo et l'utilisateur root ?

  5. La Différence Entre Nss Et Pam?

Différence entre apt et apt-get expliquée

Différence entre la taille du bloc et la taille du cluster ?

Différence entre snat et mascarade?

Différence entre $HOME et '~' (tilde) ?

différence entre netstat et ss sous linux?

Différence entre page virtuelle et cadre de page ?