GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Unterschied zwischen CLOCK_REALTIME und CLOCK_MONOTONIC?

CLOCK_REALTIME wird von NTP beeinflusst und kann sich vorwärts und rückwärts bewegen. CLOCK_MONOTONIC nicht, und rückt um einen Tick pro Tick vor.


Robert Loves Buch LINUX System Programming 2nd Edition , befasst sich speziell mit Ihrer Frage am Anfang von Kapitel 11, S. 363:

Der wichtige Aspekt einer monotonen Zeitquelle ist NICHT der aktuelle Wert, sondern die Garantie, dass die Zeitquelle streng linear ansteigend ist und somit nützlich ist, um die Zeitdifferenz zwischen zwei Abtastungen zu berechnen

Das heißt, ich glaube, er geht davon aus, dass die Prozesse auf derselben Instanz eines Betriebssystems ausgeführt werden, sodass Sie möglicherweise eine regelmäßige Kalibrierung durchführen möchten, um die Abweichung abschätzen zu können.


CLOCK_REALTIME stellt die beste Schätzung der Maschine hinsichtlich der aktuellen Wanduhr und Tageszeit dar. Wie Ignacio und MarkR sagen, bedeutet dies, dass CLOCK_REALTIME kann vorwärts und rückwärts springen, wenn die Uhrzeit des Systems geändert wird, einschließlich durch NTP.

CLOCK_MONOTONIC stellt die absolut verstrichene Wanduhrzeit seit einem willkürlichen festen Punkt in der Vergangenheit dar. Es wird nicht von Änderungen in der Systemuhrzeit beeinflusst.

Wenn Sie die verstrichene Zeit zwischen zwei Ereignissen berechnen möchten, die auf einem Computer ohne dazwischenliegenden Neustart beobachtet wurden, CLOCK_MONOTONIC ist die beste Option.

Beachten Sie, dass unter Linux CLOCK_MONOTONIC misst nicht die im Suspend verbrachte Zeit, obwohl dies laut POSIX-Definition so sein sollte. Sie können den Linux-spezifischen CLOCK_BOOTTIME verwenden für eine monotone Uhr, die während des Suspend weiterläuft.


POSIX 7-Anführungszeichen

POSIX 7 spezifiziert beide unter http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html:

CLOCK_REALTIME :

Diese Uhr stellt die Uhr dar, die die Echtzeit für das System misst. Für diese Uhr repräsentieren die von clock_gettime() zurückgegebenen und von clock_settime() spezifizierten Werte die Zeit (in Sekunden und Nanosekunden) seit der Epoche.

CLOCK_MONOTONIC (optionale Funktion):

Für diese Uhr stellt der von clock_gettime() zurückgegebene Wert die Zeitspanne (in Sekunden und Nanosekunden) seit einem unbestimmten Zeitpunkt in der Vergangenheit dar (z. B. Systemstartzeit oder Epoche). Dieser Punkt ändert sich nach der Systemstartzeit nicht. Der Wert der Uhr CLOCK_MONOTONIC kann nicht über clock_settime() gesetzt werden.

clock_settime() gibt einen wichtigen Hinweis:POSIX-Systeme können CLOCK_REALITME beliebig ändern verlasse dich also nicht darauf, dass es weder kontinuierlich noch vorwärts fließt. NTP könnte mit clock_settime() implementiert werden , und konnte nur CLOCK_REALTIME betreffen .

Die Linux-Kernel-Implementierung scheint die Startzeit als Epoche für CLOCK_MONOTONIC zu nehmen :Ausgangspunkt für CLOCK_MONOTONIC


Linux
  1. Unterschied zwischen Login-Shell und Nicht-Login-Shell?

  2. Der Unterschied zwischen [[ $a ==Z* ]] und [ $a ==Z* ]?

  3. Was ist der Unterschied zwischen Sudo Su – und Sudo Su –?

  4. Unterschied zwischen Eot und Eof?

  5. Unterschied zwischen [0-9], [[:digit:]] und D?

Unterschied zwischen apt und apt-get erklärt

Unterschied zwischen GNUWin32 und Cygwin

unterschied zwischen netstat und ss unter linux?

Unterschied zwischen ${} und $() in Bash

Unterschied zwischen Cgroups und Namespaces

Unterschied zwischen virtueller Seite und Seitenrahmen?