bechmarking kernel code

From: kernel coder
Date: Thu May 03 2007 - 07:03:30 EST


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;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/