Lo sentimos, no hay reputación para agregar esto como un comentario. Entonces va como una respuesta complementaria.
Dependiendo de la frecuencia con la que llame clock_gettime()
, debe tener en cuenta que solo algunos de los "relojes" son proporcionados por Linux en el VDSO (es decir, no requieren una llamada al sistema con todos los gastos generales de uno), que solo empeoró cuando se agregó Linux las defensas para proteger contra ataques similares a Spectre).
Si bien clock_gettime(CLOCK_MONOTONIC,...)
, clock_gettime(CLOCK_REALTIME,...)
y gettimeofday()
siempre serán extremadamente rápidos (acelerados por el VDSO), esto no es cierto para, por ejemplo, CLOCK_MONOTONIC_RAW o cualquiera de los otros relojes POSIX.
Esto puede cambiar con la versión del kernel y la arquitectura.
Aunque la mayoría de los programas no necesitan prestar atención a esto, puede haber picos de latencia en los relojes acelerados por el VDSO: si los golpea justo cuando el núcleo está actualizando el área de memoria compartida con los contadores de reloj, tiene que esperar a que grano para terminar.
Aquí está la "prueba" (GitHub, para mantener a los bots alejados de kernel.org):
https://github.com/torvalds/linux/commit/2aae950b21e4bc789d1fc6668faf67e8748300b7
CLOCK_MONOTONIC
Sería la mejor opción en ese escenario? por ejemplo, sistema de misiles Patriot