Messages in this thread | | | Date | Wed, 1 Aug 2007 15:19:08 +0200 (CEST) | From | Roman Zippel <> | Subject | Re: CFS review |
| |
Hi,
On Wed, 1 Aug 2007, Ingo Molnar wrote:
> Please also send me the output of this script: > > http://people.redhat.com/mingo/cfs-scheduler/tools/cfs-debug-info.sh
Send privately.
> Could you also please send the source code for the "l.c" and "lt.c" apps > you used for your testing so i can have a look. Thanks!
l.c is a simple busy loop (well, with the option to start many of them). This is lt.c, what it does is to run a bit less than a jiffie, so it needs a low resolution clock to trigger the problem:
#include <stdio.h> #include <signal.h> #include <time.h> #include <sys/time.h>
#define NSEC 1000000000 #define USEC 1000000
#define PERIOD (NSEC/1000)
int i;
void worker(int sig) { struct timeval tv; long long t0, t;
gettimeofday(&tv, 0); //printf("%u,%lu\n", i, tv.tv_usec); t0 = (long long)tv.tv_sec * 1000000 + tv.tv_usec + PERIOD / 1000 - 50; do { gettimeofday(&tv, 0); t = (long long)tv.tv_sec * 1000000 + tv.tv_usec; } while (t < t0); }
int main(int ac, char **av) { int cnt; timer_t timer; struct itimerspec its; struct sigaction sa;
cnt = i = atoi(av[1]);
sa.sa_handler = worker; sa.sa_flags = 0; sigemptyset(&sa.sa_mask);
sigaction(SIGALRM, &sa, 0);
clock_gettime(CLOCK_MONOTONIC, &its.it_value); its.it_interval.tv_sec = 0; its.it_interval.tv_nsec = PERIOD * cnt;
while (--i > 0 && fork() > 0) ;
its.it_value.tv_nsec += i * PERIOD; if (its.it_value.tv_nsec > NSEC) { its.it_value.tv_sec++; its.it_value.tv_nsec -= NSEC; }
timer_create(CLOCK_MONOTONIC, 0, &timer); timer_settime(timer, TIMER_ABSTIME, &its, 0);
printf("%u,%lu\n", i, its.it_interval.tv_nsec);
while (1) pause(); return 0; }
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |