Lo que intenta hacer es cómo solía funcionar Linux, hace 10 años.
Se ha vuelto más complicado desde entonces. Algunas de las complicaciones que conozco son:
- Hay una compensación de -5 minutos para que el kernel siempre pruebe el rollover en un santiamén.
- La línea de comando del kernel puede establecer un valor de salto instantáneo para que un kernel de 1000 Hz pueda ejecutarse a 250 o 100 o 10.
- Varios intentos de NoHZ no usan ningún tic del temporizador y solo se basan en el anillo del temporizador y el HPET.
- Creo que hay algunas extensiones de invitados virtuales que deshabilitan la marca y preguntan al hipervisor del host cada vez que se necesita una marca. Como las compilaciones Xen o UML.
Es por eso que el kernel tiene funciones diseñadas para decirte la hora. Úselos o descubra lo que están haciendo y cópielo.