From: Hendrik F. <fe...@tr...> - 2009-10-21 17:26:52
|
Hendrik Fehlis wrote: > [...] I also once wrote a little > program to estimate the scheduler frequency of the running kernel by > entering a very short sleep (using select()) in a loop and measuring the > average time that was slept. See below for the code. I'm sorry, my mail program seems to have screwed up the source code, so I'll give it another try with another program. Here we go... (Call the program while all other processes are sleeping.) /* schedrate.c */ #include <stdio.h> #include <sys/time.h> #include <sys/select.h> int main () { struct timeval terminate; struct timeval before; struct timeval after; struct timeval timeout; int count = -10; /* omit first 10 measurements */ long sum = 0; long diff = 0; long avg = 0; long rate = 0; gettimeofday (&terminate, NULL); terminate.tv_sec += 4; /* run for 4 seconds */ do { timeout.tv_sec = 0; timeout.tv_usec = 10; gettimeofday (&before, NULL); select (0, NULL, NULL, NULL, &timeout); gettimeofday (&after, NULL); diff = (after.tv_sec - before.tv_sec) * 1000000 + after.tv_usec - before.tv_usec; if (++count > 0) sum += diff; } while (after.tv_sec < terminate.tv_sec || (after.tv_sec == terminate.tv_sec && after.tv_usec < terminate.tv_usec)); avg = (sum + count / 2) / count; rate = 1000000 / avg; printf ("%li\n", rate); return 0; } |