GNU/Linux >> Tutoriales Linux >  >> Linux

¿Diferencia entre CLOCK_REALTIME y CLOCK_MONOTONIC?

CLOCK_REALTIME se ve afectado por NTP y puede moverse hacia adelante y hacia atrás. CLOCK_MONOTONIC no lo es, y avanza un tick por tick.


Libro de Robert Love Programación de sistemas LINUX 2.ª edición , aborda específicamente su pregunta al comienzo del Capítulo 11, página 363:

El aspecto importante de una fuente de tiempo monótona NO es el valor actual, sino la garantía de que la fuente de tiempo aumenta estrictamente de forma lineal y, por lo tanto, es útil para calcular la diferencia de tiempo entre dos muestreos

Dicho esto, creo que está asumiendo que los procesos se ejecutan en la misma instancia de un sistema operativo, por lo que es posible que desee ejecutar una calibración periódica para poder estimar la desviación.


CLOCK_REALTIME representa la mejor suposición de la máquina en cuanto al reloj de pared actual, la hora del día. Como dicen Ignacio y MarkR, esto significa que CLOCK_REALTIME puede saltar hacia adelante y hacia atrás a medida que cambia la hora del día del sistema, incluso por NTP.

CLOCK_MONOTONIC representa el tiempo de reloj de pared absoluto transcurrido desde algún punto fijo arbitrario en el pasado. No se ve afectado por cambios en el reloj de la hora del día del sistema.

Si desea calcular el tiempo transcurrido entre dos eventos observados en una máquina sin un reinicio intermedio, CLOCK_MONOTONIC es la mejor opción.

Tenga en cuenta que en Linux, CLOCK_MONOTONIC no mide el tiempo pasado en suspensión, aunque según la definición POSIX debería hacerlo. Puede usar el CLOCK_BOOTTIME específico de Linux para un reloj monótono que sigue funcionando durante la suspensión.


Cotizaciones de POSIX 7

POSIX 7 especifica ambos en http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html:

CLOCK_REALTIME :

Este reloj representa el reloj que mide el tiempo real del sistema. Para este reloj, los valores devueltos por clock_gettime() y especificados por clock_settime() representan la cantidad de tiempo (en segundos y nanosegundos) desde la Época.

CLOCK_MONOTONIC (función opcional):

Para este reloj, el valor devuelto por clock_gettime() representa la cantidad de tiempo (en segundos y nanosegundos) desde un punto no especificado en el pasado (por ejemplo, la hora de inicio del sistema o la Época). Este punto no cambia después del tiempo de inicio del sistema. El valor del reloj CLOCK_MONOTONIC no se puede establecer a través de clock_settime().

clock_settime() da una pista importante:los sistemas POSIX pueden cambiar arbitrariamente CLOCK_REALITME con él, así que no confíes en que fluya ni de forma continua ni hacia adelante. NTP podría implementarse usando clock_settime() , y solo podría afectar a CLOCK_REALTIME .

La implementación del kernel de Linux parece tomar tiempo de arranque como la época de CLOCK_MONOTONIC :Punto de partida para CLOCK_MONOTONIC


Linux
  1. ¿Diferencia entre Shell de inicio de sesión y Shell sin inicio de sesión?

  2. ¿Diferencia entre 2>&-, 2>/dev/null, |&, &>/dev/null y>/dev/null 2>&1?

  3. ¿Cuál es la diferencia entre Sudo Su y Sudo Su?

  4. ¿Diferencia entre Eot y Eof?

  5. ¿Diferencia entre [0-9], [[:digit:]] y D?

Explicación de la diferencia entre apt y apt-get

¿Diferencia entre Snat y Masquerade?

Diferencia entre GNUWin32 y cygwin

¿Diferencia entre $HOME y '~' (tilde)?

diferencia entre netstat y ss en linux?

¿Diferencia entre página virtual y marco de página?