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 [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/