From: "tmm1 (Aman Gupta)" Date: 2012-12-04T10:04:34+09:00 Subject: [ruby-core:50543] [ruby-trunk - Bug #7500] Improve GC profiler timings on linux Issue #7500 has been updated by tmm1 (Aman Gupta). tmm1@fe19:~$ uname -a Linux fe19.rs.github.com 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 GNU/Linux tmm1@fe19:~$ cat timings.c #include #include #include #include #include double getrusage_time() { struct rusage usage; struct timeval time; getrusage(RUSAGE_SELF, &usage); time = usage.ru_utime; return time.tv_sec + time.tv_usec * 1e-6; } double clock_time() { struct timespec ts; if (clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts) == 0) { return ts.tv_sec + ts.tv_nsec * 1e-9; } return 0.0; } int main() { int n; printf("getrusage() before: %f\n", getrusage_time()); for (n=0; n<10000; n++) pow(2, 2048); printf("getrusage() after: %f\n", getrusage_time()); printf("clock_gettime() before: %f\n", clock_time()); for (n=0; n<10000; n++) pow(2, 2048); printf("clock_gettime() after: %f\n", clock_time()); } tmm1@fe19:~$ gcc -o timings timings.c -lrt tmm1@fe19:~$ ./timings getrusage() before: 0.000000 getrusage() after: 0.000000 clock_gettime() before: 0.001244 clock_gettime() after: 0.001358 ---------------------------------------- Bug #7500: Improve GC profiler timings on linux https://bugs.ruby-lang.org/issues/7500#change-34386 Author: tmm1 (Aman Gupta) Status: Open Priority: Normal Assignee: authorNari (Narihiro Nakamura) Category: core Target version: 2.0.0 ruby -v: ruby 2.0.0dev (2012-12-03 trunk 38149) [x86_64-darwin12.2.0] On linux kernels, getrusage()'s precision depends on the value of HZ when the kernel was compiled. By default, HZ=250 provides a 4ms granularity. This patch uses clock_gettime() with CLOCK_PROCESS_CPUTIME_ID when available, which provides a 1ns precision on linux. -- http://bugs.ruby-lang.org/