2007-05-03 11:02:51

by kernel coder

[permalink] [raw]
Subject: bechmarking kernel code

hi,
I'm profiling some part of kernel code.Mine profiling mechanism
is based on rdtsc instruction.

Please tell me if i'm profiling correctly.I'm teting linux kernel
2.6.15 and mine system is P4.


function(){

unsigned long long c1,c2,c3,c4,c5;
before=readtsc();
before=readtsc();
before=readtsc();
overhead=readtsc()-before;
c1=testfunc();
c2=testfunc();
c3=testfunc();
c4=testfunc();
c5=testfunc();

printk(" \n *c1 = %llu c2= %llu c3 = %llu c4 = %llu c5 = %llu overhead
=%llu",cycles1,cycles2,cycles3,cycles4,cycles5,overhead);


}

/***************************************/


unsigned long long readtsc(){
unsigned long res[2]={0,0};
__asm__ __volatile__ (
"rdtsc\n"
: "=a" (res[0]), "=d" (res[1]) );

return *((unsigned long long *)res);

}

/*******************************************/

unsigned long long testfunc(){
unsigned long start_cycles[2]={0,0};
unsigned long end_cycles[2]={0,0};
unsigned long long total_cycles=0;
int i;
__asm__ __volatile__ ( // read TSC, store edx:eax in res
"rdtsc\n"
: "=a" (start_cycles[0]), "=d" (start_cycles[1]) );


/* CODE TO BE PROFILED */


__asm__ __volatile__ ( // read TSC, store edx:eax in res
"rdtsc\n"
: "=a" (end_cycles[0]), "=d" (end_cycles[1]) );
total_cycles=*((unsigned long long *)end_cycles) - *((unsigned long
long *)start_cycles);
return total_cycles;
}


2007-05-03 16:57:53

by Pekka Enberg

[permalink] [raw]
Subject: Re: bechmarking kernel code

On 5/3/07, kernel coder <[email protected]> wrote:
> I'm profiling some part of kernel code.Mine profiling mechanism
> is based on rdtsc instruction.

Why dont you use oprofile?