[#56333] [CommonRuby - Feature #8723][Open] Array.any? predicate returns true for empty array. — "nurettin (Nurettin Onur TUGCU)" <onurtugcu@...>

12 messages 2013/08/02

[#56368] [ruby-trunk - Bug #8730][Open] "rescue Exception" rescues Timeout::ExitException — "takiuchi (Genki Takiuchi)" <genki@...21g.com>

15 messages 2013/08/04

[#56407] [ruby-trunk - misc #8741][Open] email notification on bugs.ruby-lang.org is broken — "rits (First Last)" <redmine@...>

18 messages 2013/08/05

[#56524] [ruby-trunk - Bug #8770][Open] [PATCH] process.c: avoid EINTR from Process.spawn — "normalperson (Eric Wong)" <normalperson@...>

19 messages 2013/08/10

[#56536] [ruby-trunk - Feature #8772][Open] Hash alias #| merge, and the case for Hash and Array polymorphism — "trans (Thomas Sawyer)" <redmine@...>

24 messages 2013/08/11

[#56544] [ruby-trunk - Bug #8774][Open] rb_file_dirname return wrong encoding string when dir is "." — jiayp@... (贾 延平) <jiayp@...>

10 messages 2013/08/11

[#56569] [ruby-trunk - Feature #8781][Open] Use require_relative() instead of require() if possible — "ko1 (Koichi Sasada)" <redmine@...>

31 messages 2013/08/12
[#56582] [ruby-trunk - Feature #8781] Use require_relative() instead of require() if possible — "drbrain (Eric Hodel)" <drbrain@...7.net> 2013/08/12

[#56584] Re: [ruby-trunk - Feature #8781] Use require_relative() instead of require() if possible — SASADA Koichi <ko1@...> 2013/08/12

(2013/08/13 2:25), drbrain (Eric Hodel) wrote:

[#56636] Re: [ruby-trunk - Feature #8781] Use require_relative() instead of require() if possible — Aaron Patterson <tenderlove@...> 2013/08/16

On Tue, Aug 13, 2013 at 07:38:01AM +0900, SASADA Koichi wrote:

[#56634] [ruby-trunk - Feature #8788][Open] use eventfd on newer Linux instead of pipe for timer thread — "normalperson (Eric Wong)" <normalperson@...>

11 messages 2013/08/16

[#56648] [ruby-trunk - Bug #8795][Open] "Null byte in string error" on Marshal.load — "mml (McClain Looney)" <m@...>

17 messages 2013/08/16

[#56824] [ruby-trunk - Feature #8823][Open] Run trap handler in an independent thread called "Signal thread" — "ko1 (Koichi Sasada)" <redmine@...>

14 messages 2013/08/27

[#56878] [ruby-trunk - misc #8835][Open] Introducing a semantic versioning scheme and branching policy — "knu (Akinori MUSHA)" <knu@...>

11 messages 2013/08/30

[#56890] [ruby-trunk - Feature #8839][Open] Class and module should return the class or module that was opened — "headius (Charles Nutter)" <headius@...>

26 messages 2013/08/30

[#56894] [ruby-trunk - Feature #8840][Open] Yielder#state — "marcandre (Marc-Andre Lafortune)" <ruby-core@...>

14 messages 2013/08/30

[ruby-core:56764] [ruby-trunk - Bug #8805] Ruby GC::Profiler returns incorrect info on Solaris (and relatives)

From: "sax (Eric Saxby)" <sax@...>
Date: 2013-08-21 02:12:04 UTC
List: ruby-core #56764
Issue #8805 has been updated by sax (Eric Saxby).


I grabbed the c test code from the other ticket, and with some changes got these results:

> cat ./timing.c
#include <stdlib.h>
#include <stdio.h>
#include <sys/resource.h>
#include <time.h>
#include <math.h>

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;
}

void print_clock_res(clock_id) {
        int rc;
        struct timespec res;

        rc = clock_getres(clock_id, &res);
        if (rc == 0)
                printf("clock_res() for %d: %ldns\n", clock_id, res.tv_nsec);
}

double clock_time(clock_id) {
                struct timespec ts;

                if (clock_gettime(clock_id, &ts) == 0) {
                                return ts.tv_sec + ts.tv_nsec * 1e-9;
                }
                return 0.0;
}

void print_clock_time(clock_id) {
    int n;

                printf("clock_gettime() for %d before: %f\n", clock_id, clock_time(clock_id));
                for (n=0; n<10000; n++) pow(2, 2048);
                printf("clock_gettime() for %d after: %f\n", clock_id, clock_time(clock_id));
}

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("\nclock_gettime() CLOCK_HIGHRES\n");

    print_clock_res(CLOCK_HIGHRES);
    print_clock_time(CLOCK_HIGHRES);

    printf("\nclock_gettime() CLOCK_PROCESS_CPUTIME_ID\n");

    print_clock_res(CLOCK_PROCESS_CPUTIME_ID);
    print_clock_time(CLOCK_PROCESS_CPUTIME_ID);

    printf("\nclock_gettime() CLOCK_THREAD_CPUTIME_ID\n");

    print_clock_res(CLOCK_THREAD_CPUTIME_ID);
    print_clock_time(CLOCK_THREAD_CPUTIME_ID);

    printf("\nclock_gettime() CLOCK_MONOTONIC\n");

    print_clock_res(CLOCK_MONOTONIC);
    print_clock_time(CLOCK_MONOTONIC);

}


> gcc -o timing timing.c -lrt

> ./timing
getrusage() before: 0.000382
getrusage() after: 0.000432

clock_gettime() CLOCK_HIGHRES
clock_res() for 4: 20ns
clock_gettime() for 4 before: 3140535.103844
clock_gettime() for 4 after: 3140535.103877

clock_gettime() CLOCK_PROCESS_CPUTIME_ID
clock_gettime() for 5 before: 0.000000
clock_gettime() for 5 after: 0.000000

clock_gettime() CLOCK_THREAD_CPUTIME_ID
clock_gettime() for 2 before: 0.000000
clock_gettime() for 2 after: 0.000000

clock_gettime() CLOCK_MONOTONIC
clock_res() for 4: 20ns
clock_gettime() for 4 before: 3140535.103960
clock_gettime() for 4 after: 3140535.103990
----------------------------------------
Bug #8805: Ruby GC::Profiler returns incorrect info on Solaris (and relatives)
https://bugs.ruby-lang.org/issues/8805#change-41307

Author: sax (Eric Saxby)
Status: Open
Priority: Normal
Assignee: 
Category: core
Target version: 
ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-solaris2.11]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


We use SmartOS as our deployment platform, and noticed when attempting to roll out Ruby 2.0.0-p247 to some SmartOS hosts that garbage collection info is broken with integrations such as New Relic. Investigating further, we found that GC::Profiler.total_time always returns 0.0.

>> GC::Profiler.enable
=> nil
>> GC.start
=> nil
>> GC::Profiler.total_time
=> 0.0

It may be related to this issue: https://bugs.ruby-lang.org/issues/7500 where the mechanism by which the profiler gets timestamps from the OS.


-- 
http://bugs.ruby-lang.org/

In This Thread