Messages in this thread |  | | | Date | Sun, 16 May 1999 22:32:40 -0700 | | From | dave madden <> | | Subject | gettimeofday non-monotonic on 2.2.7 SMP |
| |
I know multiple processors are relatively rare, but hasn't *somebody* else noticed the ill effects of gettimeofday returning earlier times? On my 2xPIII-450 system, the following program does about 900K gettimeofday's per second when otherwise idle, and 5-10 of them are mis-ordered (usually by less than 10us, but if I start doing something that causes a lot of complex interrupts, I see multiple-millisecond clock hiccoughs). I've been tweeking arch/i386/kernel/time.c, but haven't fixed it yet. Has anybody else tried?
d.
#include <sys/time.h> #include <sys/types.h> #include <unistd.h> #include <iostream.h> #include <stdio.h>
int main( int, char ** ) { time_t tick; struct timeval tv[2]; bool prev = false; int fwd = 0; int back = 0; int max = 0; for ( ; ; ) { gettimeofday( tv, 0 ); if (prev) if (tv[0].tv_sec < tv[1].tv_sec || tv[0].tv_sec == tv[1].tv_sec && tv[0].tv_usec < tv[1].tv_usec){ unsigned long delta = ((tv[1].tv_sec - tv[0].tv_sec) * 1000000+ (tv[1].tv_usec - tv[0].tv_usec)); if (delta > max) max = delta; ++back; } else ++fwd; if (tick != tv[0].tv_sec && tv[0].tv_sec == tv[1].tv_sec + 1) { tick = tv[0].tv_sec; printf( "%.24s: fwd:%d/%d:back max %07lu\n", ctime( &tv[0].tv_sec ), fwd, back, max ); fwd = back = 0; max = 0; } prev = true; tv[1] = tv[0]; } } - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
|  |