Desculpe, não há reputação de adicionar isso como um comentário. Por isso, é uma resposta complementar.
Dependendo da frequência com que você liga clock_gettime()
, lembre-se de que apenas alguns dos "relógios" são fornecidos pelo Linux no VDSO (ou seja, não exigem um syscall com toda a sobrecarga de um - o que só piorou quando o Linux foi adicionado as defesas para proteger contra ataques do tipo Espectro).
Enquanto clock_gettime(CLOCK_MONOTONIC,...)
, clock_gettime(CLOCK_REALTIME,...)
e gettimeofday()
são sempre vai ser extremamente rápida (acelerada pela VDSO), este é não verdadeiro para, por exemplo CLOCK_MONOTONIC_RAW ou qualquer um dos outros relógios POSIX.
Isso pode mudar com a versão do kernel e a arquitetura.
Embora a maioria dos programas não precise prestar atenção nisso, pode haver picos de latência nos relógios acelerados pelo VDSO: se você pressioná-los exatamente quando o kernel está atualizando a área de memória compartilhada com os contadores de clock, ele deve esperar pelo kernel para terminar.
Aqui está a "prova" (GitHub, para manter os bots longe do kernel.org):
https://github.com/torvalds/linux/commit/2aae950b21e4bc789d1fc6668faf67e8748300b7