Por que o tempo do bash é mais preciso que o tempo do GNU?

12

O comando buitin bash timefornece precisão de execução em milissegundos e o GNU time(geralmente / usr / bin / time) fornece precisão em centissegundos. O times(2)syscall fornece tempos em relógios e 100 relógios = 1 segundo (geralmente), portanto a precisão é semelhante ao GNU time. Portanto, a questão é o que o bash está timeusando, para que seja mais preciso?

Łukasz Sowa
fonte
Hmmm ... eles ambos milissegundos dão sobre o meu sistema ... (FC16)
nico
Estranho. O que fornece a você printf ("% d \ n", sysconf (_SC_CLK_TCK)); deve ser 100, como afirmei acima. Alguém tem observações semelhantes às minhas: dirac.org/linux/time, mas ainda não há explicação.
Asukasz Sowa
sim, na verdade ele dá 100 ...
nico
Então não tenho ideia do porquê disso. O tempo do GNU deve usar times syscall, que usa o sysconf (_SC_CLK_TCK) para converter em segundos.
Łukasz Sowa
FWIW Quando você diz "bash time", suponho que você queira dizer BSD timecomo ele usa getrusage.
Dennis3 de

Respostas:

16

Depois de algum código de hardcore festa examinando eu descobri que o bash timeusos getrusage()e GNU timeusos times(). getrusage()é muito mais preciso por causa da resolução de microssegundos.

Łukasz Sowa
fonte