[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] open/stat64 syscalls run faster on Xen VM than standard Linux



Hi,

On Mon, 2005-11-28 at 10:27 -0600, xuehai zhang wrote:

> Your questioning makes sense to me. But I am not very sure about how to 
> effectively count how many 
> these operations can be completed in a second. Can you give me some hint?

Here's a quick-and-dirty wrapper for timing "something" over the space
of a few seconds (default 10) and working out how fast it went.
Obviously, you want to be running this on an otherwise-idle machine, and
with CPU frequency management disabled.  It's really, really dumb, but
it only uses "time()", not any subsecond time sourcing, for its work.

Cheers,
 Stephen


#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>

#define TIME_SECS 10

static inline int time_is_before(time_t a, time_t b)
{
        return ((signed) (a-b)) < 0;
}

void timeme_noop(void)
{
        return;
}

void timeme_dosomething(void)
{
        struct stat statbuf;
        stat("/", &statbuf);
}

int run_time_loop(const char *what, void (*fn)(void))
{
        time_t end;
        int count=0;

        end = time(NULL) + TIME_SECS;

        printf("Timing %s for %d seconds: ", what, TIME_SECS);
        fflush(stdout);
        do {
                ++count;
                fn();
        } while (time_is_before(time(NULL), end));
        printf("completed %d cycles in %d seconds\n", count, TIME_SECS);
        return count;
}

void wait_for_tick(void)
{
        time_t end;
        printf("Waiting for fresh timer tick...");
        fflush(stdout);
        end = time(NULL) + 1;
        while (time_is_before(time(NULL), end));
        printf(" done.\n");
}

int main(void) 
{
        int loops_noop, loops_something;
        float how_long;
        
        wait_for_tick();
        loops_noop = run_time_loop("noop", timeme_noop);
        loops_something = run_time_loop("something", timeme_dosomething);

        how_long = 1.0 / ((float) (loops_noop - loops_something) / (TIME_SECS));
        printf ("Average time for something: %f seconds (%f ns).\n",
                how_long, how_long * 1000000000.0);
}

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.