Re: O(1) scheduler starvation

Mike Galbraith (efault@gmx.de)
Wed, 18 Jun 2003 14:32:14 +0200


At 02:16 PM 6/18/2003 +0200, Helge Hafting wrote:
>Mike Galbraith wrote:
>>At 09:53 AM 6/18/2003 +0200, Felipe Alfaro Solana wrote:
>>
>>>Hi!
>>>
>>>I've been poking around and found the following link on O(1) scheduler
>>>starvation problems:
>>>
>>>http://www.hpl.hp.com/research/linux/kernel/o1-starve.php
>>>
>>>The web page contains a small test program which supposedly is able to
>>>make two processes starvate. However, I've been unable to reproduce what
>>>is described in the above link. In fact, the CPU usage ratio ranges
>>>between 60-40% or 70-30% in the worst cases.
>>
>>(you're talking about with my monotinic_clock() diff in your kernel right?)
>>If you examine the priorities vs cpu usage, therein lies a big fat bug.
>>I think the fundamental problem is that you can only execute in series,
>>but can sleep in parallel, which makes for more sleep time existing than
>>all execution time combined.
>
>Would dividing the sleep time by the number of sleepers fix this?
>Or is division a too heavy operation here?

That won't work. You'd have to plunk it all into a pot, and divvy it up by
%cpu usage or something. I solved it the simple way. I keep a smoothed
run_avg (%cpu * 100), and use that as a sleep_avg limit... ie if you're
run_avg is 9000 (you're eating 10% cpu), no sleep will push you into
insanity land. I still have the problem that tasks will seek their
appropriate priority level and _stick_ there, so I probably need to add
some decay. (which will no doubt open the next can-O-worms)

-Mike

-
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/