CLOCK_TAI is basically designed as CLOCK_REALTIME(UTC) + tai_offset.
Portanto, a parte usec / nsec de um timeval / timespec deve ser idêntica.
CLOCK_MONOTONIC: Zeroed at boot.
CLOCK_TAI = CLOCK_MONOTONIC + tai_mon_offset
CLOCK_REALTIME(UTC) = CLOCK_TAI - tai_utc_offset
Mas devido à preocupação com o desempenho (CLOCK_REALTIME é o que os aplicativos martelar mais), no Linux nós realmente estruturamos como:
CLOCK_REALTIME: Initialized at boot from RTC
CLOCK_MONOTONIC: CLOCK_REALTIME - wall_to_monotonic
CLOCK_TAI: CLOCK_REALTIME + tai_offset
Então CLOCK_REALTIME and CLOCK_TAI return the same because the kernel parameter tai_offset is zero.
Verifique usando adjtimex(timex tmx)
e leia o valor. Eu acho que ntpd
irá configurá-lo se for novo o suficiente ( >4.2.6
) e tiver um segundo bissexto. Ele também pode ser obtido de servidores upstream, mas não consegui verificar. A chamada adjtimex()
pode definir tai_offset
manualmente quando executada como root.
Minhas referências aqui e aqui