Hello,

I am trying to understand some performance problems I ran into on my 
xenomai system.

The testcode I attached performs a syscall(gettimeofday). Measuring time on 
a vanilla Kernel gives the following output:

ticks for ppc_getccounter: 116, for gettimeofday: 1479

The same kernel with xenomai patched in gives this:

ticks for ppc_getccounter: 116, for gettimeofday: 4278

Is this the expected behaviour? Why is the time for a system call nearly 3 
times as much?

#include <stdio.h>
#include <sys/time.h>
#include <time.h>

static void
ppc_getcounter(unsigned long long *v)
{
        register unsigned long tbu, tb, tbu2;

     loop:
        asm volatile ("mftbu %0" : "=r" (tbu) );
        asm volatile ("mftb  %0" : "=r" (tb)  );
        asm volatile ("mftbu %0" : "=r" (tbu2));
        if (__builtin_expect(tbu != tbu2, 0)) goto loop;

        /* The slightly peculiar way of writing the next lines is
        compiled better by GCC than any other way I tried. */
        ((long*)(v))[0] = tbu;
        ((long*)(v))[1] = tb;
}

int main(int argc, char* argv[])
{
        while(1) {
                struct timeval tv;
                unsigned long long count0, count1, count2;
                ppc_getcounter(&count0);
                ppc_getcounter(&count1);
                gettimeofday(&tv, NULL);
                ppc_getcounter(&count2);
                printf("ticks for ppc_getccounter: %lld, for gettimeofday: 
%lld\n",
                        count1 - count0, count2- count1);
                sleep(1);
        }
}


Cheers
-- 
Dirk Eibach
Entwicklung
Guntermann & Drunck GmbH Systementwicklung




_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to