The buitin bash command time gives milisecond precision of execution and GNU time (usually /usr/bin/time) gives centisecond precision. The times(2) syscall gives times in clocks, and 100 clocks = 1 second (usually), so the precision is like GNU time. So the question is what is bash time using so that it's more precise?
Asked
Active
Viewed 2,607 times
14
Kevin
- 40,087
- 16
- 88
- 112
Łukasz Sowa
- 511
- 4
- 11
-
Hmmm... they both give milliseconds on my system... (FC16) – nico Dec 29 '11 at 17:44
-
Strange. What gives you printf("%d\n", sysconf(_SC_CLK_TCK)); should be 100 as I stated above. Someone have similar observations to mine: http://www.dirac.org/linux/time/ but still no explanation. – Łukasz Sowa Dec 29 '11 at 17:48
-
yes, in effect it gives 100... – nico Dec 29 '11 at 18:01
-
Then I have no idea why's that. GNU time is supposed to use times syscall which uses sysconf(_SC_CLK_TCK) to convert to seconds. – Łukasz Sowa Dec 29 '11 at 18:24
-
FWIW When you say "bash `time`", I assume you mean BSD `time` as that uses `getrusage`. – Dennis Feb 03 '17 at 17:48
1 Answers
18
After some hardcore bash code examining I found out that bash time uses getrusage() and GNU time uses times(). getrusage() is far more precise because of microsecond resolution.
Kevin
- 40,087
- 16
- 88
- 112
Łukasz Sowa
- 511
- 4
- 11