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;
}
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?