GNU/Linux >> Linux Esercitazione >  >> Linux

Differenza tra CLOCK_REALTIME e CLOCK_MONOTONIC?

CLOCK_REALTIME è influenzato da NTP e può spostarsi avanti e indietro. CLOCK_MONOTONIC non lo è e avanza di un tick per tick.


Il libro di Robert Love LINUX System Programming 2nd Edition , risponde specificamente alla tua domanda all'inizio del capitolo 11, pag 363:

L'aspetto importante di una sorgente temporale monotona NON è il valore corrente, ma la garanzia che la sorgente temporale sia strettamente linearmente crescente, e quindi utile per calcolare la differenza di tempo tra due campionamenti

Detto questo, credo che presuma che i processi siano in esecuzione sulla stessa istanza di un sistema operativo, quindi potresti voler eseguire una calibrazione periodica per poter stimare la deriva.


CLOCK_REALTIME rappresenta la migliore ipotesi della macchina per quanto riguarda l'orologio da parete corrente, l'ora del giorno. Come dicono Ignacio e MarkR, ciò significa che CLOCK_REALTIME può saltare avanti e indietro quando l'orologio del sistema viene modificato, anche da NTP.

CLOCK_MONOTONIC rappresenta il tempo assoluto trascorso dall'orologio a parete da un punto fisso arbitrario nel passato. Non è influenzato dai cambiamenti nell'orologio del sistema.

Se vuoi calcolare il tempo trascorso tra due eventi osservati su una macchina senza un riavvio intermedio, CLOCK_MONOTONIC è l'opzione migliore.

Nota che su Linux, CLOCK_MONOTONIC non misura il tempo trascorso in sospensione, sebbene secondo la definizione POSIX dovrebbe. Puoi usare CLOCK_BOOTTIME specifico per Linux per un orologio monotono che continua a funzionare durante la sospensione.


virgolette POSIX 7

POSIX 7 specifica entrambi su http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html:

CLOCK_REALTIME :

Questo orologio rappresenta l'orologio che misura il tempo reale per il sistema. Per questo orologio, i valori restituiti da clock_gettime() e specificati da clock_settime() rappresentano la quantità di tempo (in secondi e nanosecondi) dall'Epoch.

CLOCK_MONOTONIC (funzione opzionale):

Per questo clock, il valore restituito da clock_gettime() rappresenta la quantità di tempo (in secondi e nanosecondi) da un punto non specificato nel passato (ad esempio, il tempo di avvio del sistema o Epoch). Questo punto non cambia dopo il tempo di avvio del sistema. Il valore dell'orologio CLOCK_MONOTONIC non può essere impostato tramite clock_settime().

clock_settime() fornisce un suggerimento importante:i sistemi POSIX sono in grado di modificare arbitrariamente CLOCK_REALITME con esso, quindi non fare affidamento sul fatto che scorra né continuamente né in avanti. NTP potrebbe essere implementato usando clock_settime() , e potrebbe interessare solo CLOCK_REALTIME .

L'implementazione del kernel Linux sembra prendere il tempo di avvio come epoca per CLOCK_MONOTONIC :punto di partenza per CLOCK_MONOTONIC


Linux
  1. Differenza tra shell di accesso e shell non di accesso?

  2. Differenza tra 2>&-, 2>/dev/null, |&, &>/dev/null E>/dev/null 2>&1?

  3. Qual è la differenza tra Sudo Su – e Sudo Su –?

  4. Differenza tra Eot ed Eof?

  5. Differenza tra [0-9], [[:digit:]] e D?

Differenza tra apt e apt-get spiegato

Differenza tra utente Sudo e utente root?

La differenza tra Nss e Pam?

differenza tra netstat e ss in linux?

differenza tra cgroup e namespace

Differenza tra pagina virtuale e frame di pagina?