/* * Simple null-syscall latency tester, Ingo Molnar * * Adjust 'OVERHEAD' by hand, it's CPU dependent. * (could be done automatically) */ #define OVERHEAD 32 #include #include #include #include #include static unsigned long long t1, t2; #define rdtscll(val) \ __asm__ __volatile__ ("rdtsc;" : "=A" (val)) #define barrier() \ __asm__ __volatile__ ("lock; addl $0, (%esp);") int main (void) { unsigned long long min = -1ULL; for (;;) { barrier(); rdtscll(t1); getpid(); rdtscll(t2); barrier(); if (t2-t1 < min) { min = t2-t1; printf(" -> %Ld cycles\n", min-OVERHEAD); } } return 0; }