public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Con Kolivas <kernel@kolivas.org>
To: Andreas Boman <aboman@midgaard.us>,
	linux kernel mailing list <linux-kernel@vger.kernel.org>
Cc: Mike Galbraith <efault@gmx.de>
Subject: Re: [PATCH] 2.5.72 O(1) interactivity bugfix
Date: Thu, 19 Jun 2003 18:11:21 +1000	[thread overview]
Message-ID: <200306191811.21427.kernel@kolivas.org> (raw)
In-Reply-To: <200306191635.33965.kernel@kolivas.org>

On Thu, 19 Jun 2003 16:35, Con Kolivas wrote:
> On Thu, 19 Jun 2003 16:13, Mike Galbraith wrote:
> > At 11:12 AM 6/19/2003 +1000, Con Kolivas wrote:
> > >On Thu, 19 Jun 2003 10:47, Andreas Boman wrote:
> > > > On Wed, 2003-06-18 at 19:38, Con Kolivas wrote:
> > > > > I had another look at 2.5 and noticed the max sleep avg is set to
> > > > > 10 seconds instead of 2 seconds in 2.4. This could make a _big_
> > > > > difference to new forked tasks if they all start out penalised as
> > > > > most
> > > > > non-interactive. It can take 5 times longer before they get the
> > > > > balance right. Can you try with this set to 2 or even 1 second on
> > > > > 2.5?
> > > >
> > > > Ahh, thanks Con, setting MAX_SLEEP_AVG to 2 *almost* removes all xmms
> > > > skipping here, a song *may* skip during desktop switches sometime
> > > > during the first 5 sec or so of playback IFF make -j20 is running. On
> > > > a mostly idle box (well LoadAvg 3 or so is mostly idle isnt it? ;)
> > > > desktop switching doesnt cause skips anymore 8)
> > >
> > >That's nice; a MAX_SLEEP_AVG of 1 second will shorten that 5 seconds to
> > > half that as well. What you describe makes perfect sense given that
> > > achieving a balance is an exponential function where the MSA is the
> > > time constant.
> >
> > However, that will also send X and friends go off to the expired array
> > _very_ quickly.  This will certainly destroy interactive feel under load
> > because your desktop can/will go away for seconds at a time.  Try to drag
> > a window while a make -j10 is running, and it'll get choppy as heck. 
> > AFAIKT, anything that you do to increase concurrency in a global manner
> > is _going_ to have the side effect of damaging interactive feel to some
> > extent.  The one and only source of desktop responsiveness is the large
> > repository of cpu ticks a task is allowed to save up for a rainy day.
>
> Indeed that's what I thought and found as well. I have a question though -
> do non interactive tasks have periods of inactivity where they collect
> sleep times or is it just interactive tasks that exhibit this? Why I'm
> asking is, what if the interactivity bonus is based on the best interactive
> setting that task has received, and make this one much slower at decaying
> than the sleep_avg. Say one second for max_sleep_avg and 60 seconds for
> max_interactive_bonus? So it can become interactive very quickly (and
> therefore also should start as non interactive) but becomes non-interactive
> slowly.

I tried creating this myself and on first testing it seems the best all round 
so far. I'll make a patch later on for ppl to try, but in a nutshell it does 
this in sched.h:

	unsigned long sleep_avg;
+	unsigned long best_sleep_avg;
	unsigned long sleep_timestamp;

this in sched.c:

#define MAX_SLEEP_AVG          (HZ)

...

	bonus = 
MAX_USER_PRIO*PRIO_BONUS_RATIO*(p->best_sleep_avg/100)/MAX_SLEEP_AVG/100 -
			MAX_USER_PRIO*PRIO_BONUS_RATIO/100/2;


...
			p->sleep_avg = MAX_SLEEP_AVG;
+		if ((p->sleep_avg * 100) > p->best_sleep_avg)
+			p->best_sleep_avg = p->sleep_avg * 100;
		p->prio = effective_prio(p);

...

		p->sleep_avg--;
+	if (p->best_sleep_avg)
+		p->best_sleep_avg--;

...
	p->rt_priority = lp.sched_priority;
+	p->sleep_avg = 0;
+	p->best_sleep_avg = 0;

and this in fork.c:

	p->sleep_timestamp = jiffies;
+	p->sleep_avg = 0;
+	p->best_sleep_avg = 0;


Sorry I dont have a full patch for people to try at this moment as there are 
so many O(1) kernels I"m working with. This basically works out the sleep 
average over 1 second, but the priority on the best over 100 seconds.

Con


  reply	other threads:[~2003-06-19  7:57 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-06-18 14:43 [PATCH] 2.5.72 O(1) interactivity bugfix Con Kolivas
2003-06-18 17:59 ` Andreas Boman
2003-06-18 22:43   ` Con Kolivas
     [not found]     ` <1055977195.1077.41.camel@asgaard.midgaard.us>
2003-06-18 23:38       ` Con Kolivas
     [not found]         ` <1055983621.1753.23.camel@asgaard.midgaard.us>
2003-06-19  1:12           ` Con Kolivas
2003-06-19  2:00             ` Andreas Boman
2003-06-19  6:13             ` Mike Galbraith
2003-06-19  6:35               ` Con Kolivas
2003-06-19  8:11                 ` Con Kolivas [this message]
2003-06-19  7:33               ` Nick Piggin
2003-06-19  8:51                 ` Mike Galbraith
2003-06-19  8:57                   ` Nick Piggin
2003-06-19  9:00                     ` Nick Piggin
2003-06-19  9:18                     ` Mike Galbraith
2003-06-18 18:05 ` Robert Love

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200306191811.21427.kernel@kolivas.org \
    --to=kernel@kolivas.org \
    --cc=aboman@midgaard.us \
    --cc=efault@gmx.de \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox