Messages in this thread |  | | Date | Sun, 25 May 2003 11:17:49 +0200 | From | Mike Galbraith <> | Subject | Re: web page on O(1) scheduler |
| |
At 07:52 AM 5/22/2003 +0200, Mike Galbraith wrote: >At 08:38 PM 5/21/2003 -0400, Rik van Riel wrote: >>On Wed, 21 May 2003, Mike Galbraith wrote: >> > At 11:49 PM 5/20/2003 -0700, David Mosberger wrote: >> > >Recently, I started to look into some odd performance behaviors of the >> > >O(1) scheduler. I decided to document what I found in a web page >> > >at: >> > > >> > > http://www.hpl.hp.com/research/linux/kernel/o1.php >> > >> > The page mentions persistent starvation. My own explorations of this >> > issue indicate that the primary source is always selecting the highest >> > priority queue. >> >>It's deeper than that. The O(1) scheduler doesn't consider >>actual CPU usage as a factor of CPU priority. > >Oh, there's no doubt in my mind that it's _much_ deeper than my little >surface scratchings ;-) > >It does consider cpu usage though. Your run history is right there in >your accumulated sleep_avg. Unfortunately (in some ways, fortunate in >others.. conflict) that information can be diluted down to nothing >instantly by new input from one wakeup.
Or did you mean that it misses a bunch of cpu usage? I went looking at cpu usage, and...
Unless there's something seriously b0rked in the attached (don't _think_ so, but...;), trusting an irq that happens 1/ms to tick tasks isn't 100% effective, even if you aren't context switching a zillion times faster. The attached diff produced the attached log while running test-starve.c. I get some pretty serious thievery even when doing ho-hum stuff. We can deactivate tasks at _really_ high frequency, and besides, if the timer interrupt doesn't fire while the last runnable task is active, he can be missed for a while and have accumulated up nearly a full ms. It seems to me that with the right timing, you could end up stealing a bunch of cpu (my logs say it's happening a _lot_ under load. again, diff might be b0rked)
-Mike [unhandled content-type:application/octet-stream][unhandled content-type:application/octet-stream] |  |