public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Tommaso Cucinotta <tommaso.cucinotta@sssup.it>
Cc: linux-kernel@vger.kernel.org
Subject: Re: 1 RT task blocks 4-core machine ?
Date: Mon, 11 Oct 2010 09:53:50 +0200	[thread overview]
Message-ID: <1286783630.2336.106.camel@twins> (raw)
In-Reply-To: <4CB0A998.3020407@sssup.it>

On Sat, 2010-10-09 at 19:42 +0200, Tommaso Cucinotta wrote:
> Peter wrote:
> >  On Tue, 2010-10-05 at 00:26 +0200, Tommaso Cucinotta wrote:
> >  >  A possible explanation might be that the CFS load balancing logic sees
> >  >  my only active task (e.g., the ssh server or shell etc.) as running
> >  >  alone on its core, and does not detect that it is inhibited to actually
> >  >  run due to RT tasks on the same core. Therefore, it will not migrate
> >  >  the task to the free cores. Does this explanation make sense
> >  >  or is it completely wrong ?
> >
> >  Possibly, its got some logic to detect this but maybe it gets confused
> >  still, in particular look at the adaptive cpu_power in
> >  update_cpu_power() and calling functions.
> 
> Ok, I'll have a look (when I have some time :-( ), thanks.
> 
> >  >  Also, I'd like to hear whether this is considered the "normal/desired"
> >  >  behavior of intermixing RT and non-RT tasks.
> >
> >  Pegging a cpu using sched_fifo/rr pretty much means you get to keep the
> >  pieces, if it works nice, if you can make it work better kudos, but no
> >  polling from sched_fifo/rr is not something that is considered sane for
> >  the general health of your system.
> 
> Sure, I was not thinking to push/pull across heterogeneous scheduling
> classes, but rather to simply account for the proper per-CPU tasks count
> and load (including all the tasks comprising RT ones) when load-balancing
> in CFS. 

Right, so we do that. Part of the problem is that RR/FIFO tasks have no
weight/load (not even a worst case weight like sporadic tasks have). So
what we do is (per-cpu) take an average measure of the time spend on !
CFS tasks (sched_rt_avg_update() and friends) and use that to lower that
CPUs total throughput, which is reflected in the mentioned ->cpu_power
variable.

> Perhaps, you mean, e.g., if a RT task ends, the CPU would go idle
> and it would be supposed to pull ? Just we don't do that, and at the next
> load-balancing decision things would be fixed up (please, consider I don't
> know the CFS load balancer so well).

No, what I meant was that if a particular CPU is very busy with !CFS
work, its ->cpu_power variable will decrease to 1 (0 will get us
division by zero issues). Somehow we need to avoid this load-balancer
from thinking its a good idea to place tasks there.

The natural balance is to move tasks away from weak CPUs, but clearly
its not good enough.

Also, there is housekeeping that needs to be done on a per-cpu basis.
CPU affine tasks like workqueue things need to run in order to keep the
system functional, pegging a CPU with a RT task starves these, causing
general system dysfunction.

> So, for example, in addition to fix the reported issue, we'd get also that,
> when pinning a heavy RT workload on a CPU, CFS tasks would migrate to other
> CPUs, if available. Again, that doesn't need to be instantaneous (push), but
> it could happen later when the CFS load-balancer is invoked (is it invoked
> periodically, as of now ?).

That should basically work, we normalize the cpu load (sum of all cfs
task weights) by the ->cpu_power, a weak cpu will tend to get all its
tasks migrated away to stronger CPUs, again, there's probably some
corner case that doesn't quite work as expected.




  reply	other threads:[~2010-10-11  7:53 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-09 17:42 1 RT task blocks 4-core machine ? Tommaso Cucinotta
2010-10-11  7:53 ` Peter Zijlstra [this message]
     [not found] <AANLkTim2icGqFWB1S6TVcQwmo+sCcGdNDPO3s8LFqzR=@mail.gmail.com>
2010-10-04 22:26 ` Tommaso Cucinotta
2010-10-06 13:34   ` Peter Zijlstra

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=1286783630.2336.106.camel@twins \
    --to=peterz@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tommaso.cucinotta@sssup.it \
    /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