Messages in this thread Patch in this message | | | From | Aubrey Li <> | Date | Thu, 4 Apr 2019 16:31:35 +0800 | Subject | Re: [RFC][PATCH 15/16] sched: Trivial forced-newidle balancer |
| |
On Fri, Feb 22, 2019 at 12:42 AM Peter Zijlstra <peterz@infradead.org> wrote: > > On Thu, Feb 21, 2019 at 04:19:46PM +0000, Valentin Schneider wrote: > > Hi, > > > > On 18/02/2019 16:56, Peter Zijlstra wrote: > > [...] > > > +static bool try_steal_cookie(int this, int that) > > > +{ > > > + struct rq *dst = cpu_rq(this), *src = cpu_rq(that); > > > + struct task_struct *p; > > > + unsigned long cookie; > > > + bool success = false; > > > + > > > + local_irq_disable(); > > > + double_rq_lock(dst, src);
Here, should we check dst and src's rq status before lock their rq? if src is idle, it could be in the progress of load balance already?
Thanks, -Aubrey
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 3e3162f..a1e0a6f 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -3861,6 +3861,13 @@ static bool try_steal_cookie(int this, int that) unsigned long cookie; bool success = false;
+ /* + * Don't steal if src is idle or has only one runnable task, + * or dst has more than one runnable task + */ + if (src->nr_running <= 1 || unlikely(dst->nr_running >= 1)) + return false; + local_irq_disable(); double_rq_lock(dst, src);
| |