* Why is cpuset_cpus_allowed_fallback() necessary?
@ 2012-11-26 22:32 Tejun Heo
[not found] ` <20121126223249.GB15930-9pTldWuhBndy/B6EtB590w@public.gmane.org>
0 siblings, 1 reply; 3+ messages in thread
From: Tejun Heo @ 2012-11-26 22:32 UTC (permalink / raw)
To: oleg-H+wXaHxf7aLQT0dZR+AlfA
Cc: peterz-wEGCiKHe2LqWVfeAwA7xHQ,
linux-kernel-u79uwXL29TY76Z2rM5mHXA, Paul Menage,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
cgroups-u79uwXL29TY76Z2rM5mHXA
Hello, guys.
I'm wondering why cpuset_cpus_allowed_fallback() is necessary. This
is called from, e.g., try_to_wake_up()->select_task_rq() when none of
the cpus in ->cpus_allowed is useable. The cpuset callback invokes
do_set_cpus_allowed() w/ the cpuset's cpus_allowed. This was added by
the following commit,
commit 9084bb8246ea935b98320554229e2f371f7f52fa
Author: Oleg Nesterov <oleg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Date: Mon Mar 15 10:10:27 2010 +0100
sched: Make select_fallback_rq() cpuset friendly
Introduce cpuset_cpus_allowed_fallback() helper to fix the cpuset problems
with select_fallback_rq(). It can be called from any context and can't use
any cpuset locks including task_lock(). It is called when the task doesn't
have online cpus in ->cpus_allowed but ttwu/etc must be able to find a
suitable cpu.
....
The problem is, nothing's explaining what "the cpuset problems with
select_fallback_rq()" are. Oleg, do you remember? Why do we need
this?
Thanks.
--
tejun
^ permalink raw reply [flat|nested] 3+ messages in thread[parent not found: <20121126223249.GB15930-9pTldWuhBndy/B6EtB590w@public.gmane.org>]
* Re: Why is cpuset_cpus_allowed_fallback() necessary? [not found] ` <20121126223249.GB15930-9pTldWuhBndy/B6EtB590w@public.gmane.org> @ 2012-11-27 18:41 ` Oleg Nesterov [not found] ` <20121127184117.GA8937-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 3+ messages in thread From: Oleg Nesterov @ 2012-11-27 18:41 UTC (permalink / raw) To: Tejun Heo Cc: peterz-wEGCiKHe2LqWVfeAwA7xHQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, Paul Menage, containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, cgroups-u79uwXL29TY76Z2rM5mHXA Hi Tejun, On 11/26, Tejun Heo wrote: > > I'm wondering why cpuset_cpus_allowed_fallback() is necessary. This > is called from, e.g., try_to_wake_up()->select_task_rq() when none of > the cpus in ->cpus_allowed is useable. The cpuset callback invokes > do_set_cpus_allowed() w/ the cpuset's cpus_allowed. This was added by > the following commit, > > commit 9084bb8246ea935b98320554229e2f371f7f52fa > Author: Oleg Nesterov <oleg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> > Date: Mon Mar 15 10:10:27 2010 +0100 > > > sched: Make select_fallback_rq() cpuset friendly > > Introduce cpuset_cpus_allowed_fallback() helper to fix the cpuset problems > with select_fallback_rq(). It can be called from any context and can't use > any cpuset locks including task_lock(). It is called when the task doesn't > have online cpus in ->cpus_allowed but ttwu/etc must be able to find a > suitable cpu. > .... > > The problem is, nothing's explaining what "the cpuset problems with > select_fallback_rq()" are. Cough. You are right, the changelog is confusing and I no can not understand it too. > Oleg, do you remember? Why do we need > this? No, I forgot. And this code was changed after that, the fat comment in cpuset_cpus_allowed_fallback() tried to explain the code below which was removed. I am starting to recall what this patch tried to do after I looked into git history. This patch was the last (probably) change in series. Please look at 897f0b3c3ff40b443c84e271bef19bd6ae885195 sched: Kill the broken and deadlockable cpuset_lock/cpuset_cpus_allowed_locked code In particular it removes cpuset_cpus_allowed_locked() from select_fallback_rq() because this was very wrong. IOW, this patch simply removes the code which didn't really work And after some other changes, this comment tried to add the supposed behaviour back: we shouldn't simply use cpu_possible_mask, we should consult cpuset. Oleg. ^ permalink raw reply [flat|nested] 3+ messages in thread
[parent not found: <20121127184117.GA8937-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: Why is cpuset_cpus_allowed_fallback() necessary? [not found] ` <20121127184117.GA8937-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2012-12-02 14:15 ` Tejun Heo 0 siblings, 0 replies; 3+ messages in thread From: Tejun Heo @ 2012-12-02 14:15 UTC (permalink / raw) To: Oleg Nesterov Cc: peterz-wEGCiKHe2LqWVfeAwA7xHQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA, Paul Menage, containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, cgroups-u79uwXL29TY76Z2rM5mHXA Hey, Oleg. On Tue, Nov 27, 2012 at 07:41:17PM +0100, Oleg Nesterov wrote: > > Oleg, do you remember? Why do we need > > this? > > No, I forgot. And this code was changed after that, the fat comment in > cpuset_cpus_allowed_fallback() tried to explain the code below which > was removed. > > I am starting to recall what this patch tried to do after I looked into > git history. This patch was the last (probably) change in series. > > Please look at > 897f0b3c3ff40b443c84e271bef19bd6ae885195 > sched: Kill the broken and deadlockable cpuset_lock/cpuset_cpus_allowed_locked code > > In particular it removes cpuset_cpus_allowed_locked() from > select_fallback_rq() because this was very wrong. IOW, this patch > simply removes the code which didn't really work > > And after some other changes, this comment tried to add the supposed > behaviour back: we shouldn't simply use cpu_possible_mask, we should > consult cpuset. Ah, okay. If the task's affinity, which is subset of cpuset's, become empty while the cpuset's doesn't, we still better confine the task to the cpuset. The code seems broken tho - it looks at CPUs which are on the same node first before consulting cpuset, which may lead to the task escaping cpuset. Prolly the function need to be restructured that it first runs as if cpuset->cpus_allowed is cpu_possible_mask and then if that fails with the actual cpu_possible_mask. Thanks! -- tejun ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-12-02 14:15 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-26 22:32 Why is cpuset_cpus_allowed_fallback() necessary? Tejun Heo
[not found] ` <20121126223249.GB15930-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2012-11-27 18:41 ` Oleg Nesterov
[not found] ` <20121127184117.GA8937-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-12-02 14:15 ` Tejun Heo
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).