lkml.org 
[lkml]   [2009]   [Dec]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    Subjectreproducer: invisible utime
    This program can reproduce another problem that originally
    task_{u,s}time() intended to solve, I think.

    Adjustment by task_{u,s}time() was only applied on getrusage()
    and /proc/<pid>/stat. So even in .32-rc8, we can reproduce this
    problem on sys_times() which has no adjustment.

    I confirmed that my patches fix it, by thread_group_times().


    Thanks,
    H.Seto

    ===
    /*
    * Sample program to demonstrate invisible utime
    */

    #include <stdio.h>
    #include <unistd.h>
    #include <sys/times.h>

    /* 300 million, arbitrary */
    #define LOOP (300 * 1000 * 1000)

    unsigned long lpt, l, c;

    int do_loop(void)
    {
    struct tms t1, t2;
    clock_t j1, j2;
    unsigned long i;

    printf("Loop %d times, sleeping %d times every %d.\n", l, l/c, c);
    printf(" start ...\n");
    j1 = times(&t1);
    for (i = 1; i <= l; i++)
    if (!(i % c))
    usleep(0);
    j2 = times(&t2);
    printf(" ... done.\n");

    /* tms_{u,s}time is clock_t */
    printf(" user : %5d ms\n", (t2.tms_utime - t1.tms_utime) * 10);
    printf(" system : %5d ms\n", (t2.tms_stime - t1.tms_stime) * 10);
    printf(" elapse : %5d ms\n\n", (j2 - j1) * 10);

    return (t2.tms_utime - t1.tms_utime) * 10;
    }

    int main(int argc, char **argv)
    {
    int u0, u1, u2, u3;
    int ticks;

    l = argc > 1 ? atoi(argv[1]) : LOOP;

    printf("### Prep:\n");
    c = l;
    ticks = do_loop();
    lpt = l / ticks;
    printf("loops/tick: %d\n", lpt);
    l = lpt * 1000;
    printf("change loop to %d to short test.\n\n", l);

    printf("### Test:\n");
    c = l;
    u0 = do_loop();
    c = lpt;
    u1 = do_loop();
    c = lpt / 2;
    u2 = do_loop();
    c = lpt / 8;
    u3 = do_loop();
    printf("result: %s\n\n",
    (u0 <= u1) && (u1 <= u2) && (u2 <= u3) ? "GOOD" : "BAD");
    }



    \
     
     \ /
      Last update: 2009-12-02 09:35    [W:0.024 / U:1.400 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site