¿Diferencia entre CLOCK_REALTIME y CLOCK_MONOTONIC?

Resuelto NPE asked hace 14 años • 8 respuestas

¿ Podría explicar la diferencia entre CLOCK_REALTIMElos CLOCK_MONOTONICrelojes devueltos clock_gettime()en Linux?

¿Cuál es una mejor opción si necesito calcular el tiempo transcurrido entre las marcas de tiempo producidas por una fuente externa y la hora actual?

Por último, si tengo un demonio NTP que ajusta periódicamente la hora del sistema, ¿cómo interactúan estos ajustes con cada uno de CLOCK_REALTIMEy CLOCK_MONOTONIC?

NPE avatar Aug 19 '10 22:08 NPE
Aceptado

CLOCK_REALTIMErepresenta la mejor estimación de la máquina en cuanto a la hora actual del reloj de pared. Como dicen Ignacio y MarkR , esto significa que CLOCK_REALTIMEpuede saltar hacia adelante y hacia atrás a medida que cambia la hora del sistema, incluso por NTP.

CLOCK_MONOTONICrepresenta el tiempo absoluto transcurrido en el reloj de pared desde algún punto fijo y arbitrario en el pasado. No se ve afectado por los cambios en 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_MONOTONICes la mejor opción.

Tenga en cuenta que en Linux, CLOCK_MONOTONICno mide el tiempo transcurrido en suspensión, aunque según la definición de POSIX debería hacerlo. Puede utilizar el reloj específico de Linux CLOCK_BOOTTIMEpara un reloj monótono que sigue funcionando durante la suspensión.

caf avatar Aug 20 '2010 01:08 caf

El libro de Robert Love Programación del sistema LINUX, segunda 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 linealmente 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 deriva.

user2548100 avatar Jul 15 '2013 20:07 user2548100

CLOCK_REALTIMEse ve afectado por NTP y puede moverse hacia adelante y hacia atrás. CLOCK_MONOTONICno lo es, y avanza a un tic por tic.

Ignacio Vazquez-Abrams avatar Aug 19 '2010 15:08 Ignacio Vazquez-Abrams