Messages in this thread |  | | Date | Mon, 10 May 1999 12:13:59 +0200 | | From | Pavel Machek <> | | Subject | Re: [patch] new scheduler |
| |
Hi!
> > No. Interactive processes that don't use up their time slice > > before jiffies reaches p->defer will get their time slice > > fully reinstated in wake_up_process(). > > Ah, but this is bad. > > On SunOS, I had a program that did: > > for (i=0;i<SOMELARGECONSTANT;i++) { > do_something (); > if (i % SOMECONSTANT == 0) usleep (10); > }
This easily doable on linux, too. Even on current scheduler (because it has problems with accounting...):
Pavel
PS: It would be nice to modify kernel to be _pessimistic_ about idle. Right now it is so optimistic that you can run boy bad and see 0% cpu utilization when it is in fact 80%. It would be much better to report worse values than to report better values.
/* * This is simple program which should show weak spots in linux's scheduler */
#include <stdio.h> #include <time.h> #include <sys/timeb.h> #include <unistd.h>
int startgame;
int ticks( void ) { struct timeb tb; int sec, msec; ftime( &tb ); sec = tb.time - startgame; msec = tb.millitm; return sec * 1000 + msec; }
void main( int argc, char *argv[] ) { int delta, badboy = 0, count = 1000000;
startgame = time(NULL); if (argc>1) { int t1, t2; badboy = 1; printf( "I'm a *BAD* boy! " ); usleep( 1 ); startgame = ticks(); t1 = ticks(); usleep( 1 ); t2 = ticks(); delta = t2-t1; delta = 20; printf( "And bad boys know that jiffie is %dmsec\n", delta ); } else { printf( "I'm a good boy.\n" ); delta = 20; } while(1) { if (ticks() % delta > ((delta * 17)/20)) if (badboy) usleep(1); if (!((--count)%100000)) { printf( "." ); fflush( stdout ); } if (!count) break; } }
-- The best software in life is free (not shareware)! Pavel GCM d? s-: !g p?:+ au- a--@ w+ v- C++@ UL+++ L++ N++ E++ W--- M- Y- R+
- 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/
|  |