Re: [PATCH] O5int for interactivity

Con Kolivas (kernel@kolivas.org)
Tue, 15 Jul 2003 05:11:49 +1000


On Tue, 15 Jul 2003 01:25, Felipe Alfaro Solana wrote:
> On Mon, 2003-07-14 at 14:32, Con Kolivas wrote:
> > More interactivity work for audio and X smoothness. I have fixed all my
> > test cases and need feedback about others to develop beyond this.
> >
> > Changes
> > The idle code now gives just under interactive state based on the runtime
> > instead of min_sleep_avg - minor startup speed improvement.
> >
> > Tasks that drop their priority while running are now put to the end of
> > the queue to continue their timeslice. Fixes a little flutter when tasks
> > are cpu hogs for short periods (eg mozilla).
> >
> > Tasks that are complete cpu hogs are put on the expired array every time
> > they run out of timeslice.
>
> Hmmm... Starvation is back for me (Pentium III 700Mhz + ACPI):
>
> 1. Log on to X/KDE
> 2. Launch Konqueror
> 3. Launch XMMS
> 4. Make XMMS play a song
> 5. Move the Konqueror window all over the desktop.
>
> Step 5 causes XMMS to completely starve for exactly 5 seconds. After
> those 5 seconds, the XMMS priority gets adjusted and sound comes back
> from my speakers.
>
> Another way to starve XMMS for 5 seconds:
>
> 1. Launch XMMS
> 2. Make it play
> 3. Run a standard CPU hogger: "while true; do a=2; done"
>
> Step 3 will make XMMS starve for exactly 5 seconds. Also, during those 5
> seconds, X is completely jerky and moving the mouse makes the pointer
> goes jumping all over the screen.
>
> Do you want additional information? Any patch trying?
> Thanks!

Great thanks for test. Can you try reverting this:

diff -Naurp linux-2.5.75-mm1/kernel/sched.c linux-2.5.75-test/kernel/sched.c
--- linux-2.5.75-mm1/kernel/sched.c 2003-07-13 00:21:30.000000000 +1000
+++ linux-2.5.75-test/kernel/sched.c 2003-07-14 22:13:51.000000000 +1000
@@ -388,19 +388,19 @@ static inline void __activate_task(task_
static inline void activate_task(task_t *p, runqueue_t *rq)
{
long sleep_time = jiffies - p->last_run - 1;
+ long runtime = jiffies - p->avg_start;

if (sleep_time > 0) {
- unsigned long runtime = jiffies - p->avg_start;
-
/*
* Tasks that sleep a long time are categorised as idle and
- * will get just under interactive status with a small runtime
- * to allow them to become interactive or non-interactive rapidly
+ * will get just under interactive status
*/
if (sleep_time > MIN_SLEEP_AVG){
- p->avg_start = jiffies - MIN_SLEEP_AVG;
- p->sleep_avg = MIN_SLEEP_AVG * (MAX_BONUS - INTERACTIVE_DELTA - 1) /
- MAX_BONUS;
+ if (runtime > MAX_SLEEP_AVG){
+ runtime = MAX_SLEEP_AVG;
+ p->avg_start = jiffies - runtime;
+ }
+ p->sleep_avg = runtime * (MAX_BONUS - INTERACTIVE_DELTA - 1) / MAX_BONUS;
} else {
/*
* This code gives a bonus to interactive tasks.

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