linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Peter Williams <pwil3058@bigpond.net.au>
To: Mike Galbraith <efault@gmx.de>
Cc: Helge Hafting <helgehaf@aitel.hist.no>,
	Trond Myklebust <trond.myklebust@fys.uio.no>,
	Ingo Molnar <mingo@elte.hu>, Con Kolivas <kernel@kolivas.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] sched: Fix adverse effects of NFS client     on	interactive response
Date: Sat, 07 Jan 2006 17:34:22 +1100	[thread overview]
Message-ID: <43BF60EE.70909@bigpond.net.au> (raw)
In-Reply-To: <5.2.1.1.2.20060107051229.00c42230@pop.gmx.net>

Mike Galbraith wrote:
> At 12:11 PM 1/7/2006 +1100, Peter Williams wrote:
> 
>> Is that patch complete?  (This is all I got.)
> 
> 
> Yes.
> 
>> --- linux-2.6.15/kernel/sched.c.org     Fri Jan  6 08:44:09 2006
>> +++ linux-2.6.15/kernel/sched.c Fri Jan  6 08:51:03 2006
>> @@ -1353,7 +1353,7 @@
>>
>>  out_activate:
>>  #endif /* CONFIG_SMP */
>> -       if (old_state == TASK_UNINTERRUPTIBLE) {
>> +       if (old_state & TASK_UNINTERRUPTIBLE) {
>>                 rq->nr_uninterruptible--;
>>                 /*
>>                 * Tasks on involuntary sleep don't earn
>> @@ -3010,7 +3010,7 @@
>>                                 unlikely(signal_pending(prev))))
>>                         prev->state = TASK_RUNNING;
>>                 else {
>> -                       if (prev->state == TASK_UNINTERRUPTIBLE)
>> +                       if (prev->state & TASK_UNINTERRUPTIBLE)
>>                                 rq->nr_uninterruptible++;
>>                         deactivate_task(prev, rq);
>>                 }
>>
>> In the absence of any use of TASK_NONINTERACTIVE in conjunction with 
>> TASK_UNINTERRUPTIBLE it will have no effect.
> 
> 
> Exactly.  It's only life insurance.
> 
>>   Personally, I think that all TASK_UNINTERRUPTIBLE sleeps should be 
>> treated as non interactive rather than just be heavily discounted (and 
>> that TASK_NONINTERACTIVE shouldn't be needed in conjunction with it) 
>> BUT I may be wrong especially w.r.t. media streamers such as audio and 
>> video players and the mechanisms they use to do sleeps between cpu 
>> bursts.
> 
> 
> Try it, you won't like it.

It's on my list of things to try.

>  When I first examined sleep_avg woes, my 
> reaction was to nuke uninterruptible sleep too... boy did that ever 
> _suck_ :)

I look forward to seeing it.  :-)

> 
> I'm trying to think of ways to quell the nasty side of sleep_avg without 
> destroying the good.  One method I've tinkered with in the past with 
> encouraging results is to compute a weighted slice_avg, which is a 
> measure of how long it takes you to use your slice, and scale it to 
> match MAX_SLEEPAVG for easy comparison.  A possible use thereof:  In 
> order to be classified interactive, you need the sleep_avg, but that's 
> not enough... you also have to have a record of sharing the cpu. When 
> your slice_avg degrades enough as you burn cpu, you no longer get to 
> loop in the active queue.  Being relegated to the expired array though 
> will improve your slice_avg and let you regain your status.  Your 
> priority remains, so you can still preempt, but you become mortal and 
> have to share.  When there is a large disparity between sleep_avg and 
> slice_avg, it can be used as a general purpose throttle to trigger 
> TASK_NONINTERACTIVE flagging in schedule() as negative feedback for the 
> ill behaved.  Thoughts?

Sounds like the kind of thing that's required.  I think the deferred 
shift from active to expired is safe as long as CPU hogs can't exploit 
it and your scheme sounds like it might provide that assurance.  One 
problem this solution will experience is that when the system gets 
heavily loaded every task will have small CPU usage rates (even the CPU 
hogs) and this makes it harder to detect the CPU hogs.  One slight 
variation of your scheme would be to measure the average length of the 
CPU runs that the task does (i.e. how long it runs without voluntarily 
relinquishing the CPU) and not allowing them to defer the shift to the 
expired array if this average run length is greater than some specified 
value.  The length of this average for each task shouldn't change with 
system load.  (This is more or less saying that it's ok for a task to 
stay on the active array provided it's unlikely to delay the switch 
between the active and expired arrays for very long.)

My own way around the problem is to nuke the expired/active arrays and 
use a single priority array.  That gets rid of the problem of deferred 
shifting from active to expired all together.  :-)

Peter
-- 
Peter Williams                                   pwil3058@bigpond.net.au

"Learning, n. The kind of ignorance distinguishing the studious."
  -- Ambrose Bierce

  reply	other threads:[~2006-01-07  6:34 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-12-21  6:00 [PATCH] sched: Fix adverse effects of NFS client on interactive response Peter Williams
2005-12-21  6:09 ` Trond Myklebust
2005-12-21  6:32   ` Peter Williams
2005-12-21 13:21     ` Trond Myklebust
2005-12-21 13:36       ` Kyle Moffett
2005-12-21 13:40         ` Trond Myklebust
2005-12-22  2:26           ` Peter Williams
2005-12-22 22:08             ` Trond Myklebust
2005-12-22 22:33               ` Peter Williams
2005-12-22 22:59                 ` Trond Myklebust
2005-12-23  0:02                   ` Kyle Moffett
2005-12-23  0:25                     ` Trond Myklebust
2005-12-23  3:06                       ` Peter Williams
2005-12-23  9:39                         ` Trond Myklebust
2005-12-23 10:49                           ` Peter Williams
2005-12-23 12:51                             ` Trond Myklebust
2005-12-23 13:36                               ` Peter Williams
2006-01-02 12:09                                 ` Pekka Enberg
2005-12-23 19:07                           ` Lee Revell
2005-12-23 21:08                             ` Trond Myklebust
2005-12-23 21:17                               ` Lee Revell
2005-12-23 21:23                                 ` Trond Myklebust
2005-12-23 22:04                                   ` Lee Revell
2005-12-23 22:10                                     ` Trond Myklebust
2005-12-21 16:10         ` Horst von Brand
2005-12-21 20:36           ` Kyle Moffett
2005-12-21 22:59             ` Peter Williams
2005-12-21 16:11     ` Ingo Molnar
2005-12-21 22:49       ` Peter Williams
2006-01-02 11:01     ` Helge Hafting
2006-01-02 23:54       ` Peter Williams
2006-01-04  1:25         ` Peter Williams
2006-01-04  9:40           ` Marcelo Tosatti
2006-01-04 12:18             ` Con Kolivas
2006-01-04 10:31               ` Marcelo Tosatti
2006-01-04 21:51           ` Peter Williams
2006-01-05  6:31             ` Mike Galbraith
2006-01-05 11:31               ` Peter Williams
2006-01-05 14:31                 ` Mike Galbraith
2006-01-05 23:13                   ` Peter Williams
2006-01-05 23:33                     ` Con Kolivas
2006-01-06  0:02                       ` Peter Williams
2006-01-06  0:08                         ` Con Kolivas
2006-01-06  0:40                           ` Peter Williams
2006-01-06  7:39                     ` Mike Galbraith
2006-01-07  1:11                       ` Peter Williams
2006-01-07  5:27                         ` Mike Galbraith
2006-01-07  6:34                           ` Peter Williams [this message]
2006-01-07  8:54                             ` Mike Galbraith
2006-01-07 23:40                               ` Peter Williams
2006-01-08  5:51                                 ` Mike Galbraith
2006-01-07  9:30                           ` Con Kolivas
2006-01-07 10:23                             ` Mike Galbraith
2006-01-07 23:31                             ` Peter Williams
2006-01-08  0:38                               ` Con Kolivas

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=43BF60EE.70909@bigpond.net.au \
    --to=pwil3058@bigpond.net.au \
    --cc=efault@gmx.de \
    --cc=helgehaf@aitel.hist.no \
    --cc=kernel@kolivas.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=trond.myklebust@fys.uio.no \
    /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;
as well as URLs for NNTP newsgroup(s).