Dlaczego czas uderzenia jest bardziej precyzyjny niż czas GNU?

12

Komenda buitin bash timezapewnia milisekundową precyzję wykonania, a GNU time(zwykle / usr / bin / time) zapewnia precyzję w centisekundach. times(2)Syscall daje razy zegary i 100 zegary 1 sekundę (zazwyczaj), tak jak jest precyzja GNU time. Pytanie brzmi: co timeużywa bash, aby był bardziej precyzyjny?

Łukasz Sowa
źródło
Hmmm ... oba dają milisekundy w moim systemie ... (FC16)
nico
Dziwne. Co daje ci printf ("% d \ n", sysconf (_SC_CLK_TCK)); powinien wynosić 100, jak powiedziałem powyżej. Ktoś ma podobne obserwacje do mojej: dirac.org/linux/time, ale wciąż nie ma wyjaśnienia.
Łukasz Sowa,
tak, w efekcie daje 100 ...
nico
Więc nie mam pojęcia, dlaczego tak jest. Czas GNU ma wykorzystywać czasy syscall, które używają sysconf (_SC_CLK_TCK) do konwersji na sekundy.
Łukasz Sowa
FWIW Kiedy mówisz „bash time” Zakładam, że masz na myśli BSD timejak zastosowań getrusage.
Dennis

Odpowiedzi:

16

Po kilku kod Hardcore bash zbadaniu okazało się, że bash timezastosowań getrusage()oraz GNU timezastosowań times(). getrusage()jest znacznie bardziej precyzyjny ze względu na rozdzielczość mikrosekundową.

Łukasz Sowa
źródło