From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751552AbdB0SRl (ORCPT ); Mon, 27 Feb 2017 13:17:41 -0500 Received: from mail.kernel.org ([198.145.29.136]:49314 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751486AbdB0SRk (ORCPT ); Mon, 27 Feb 2017 13:17:40 -0500 Date: Mon, 27 Feb 2017 12:54:30 -0500 From: Steven Rostedt To: Peter Zijlstra Cc: Pavan Kondeti , LKML , Ingo Molnar , Andrew Morton Subject: Re: [PATCH] sched: Optimize pick_next_task for idle_sched_class too Message-ID: <20170227125430.1c32a5eb@gandalf.local.home> In-Reply-To: <20170223175438.GX6536@twins.programming.kicks-ass.net> References: <20170119101703.2abeaeb6@gandalf.local.home> <20170119174408.GN6485@twins.programming.kicks-ass.net> <20170223135458.GC6515@twins.programming.kicks-ass.net> <20170223152533.GG6515@twins.programming.kicks-ass.net> <20170223163737.GW6536@twins.programming.kicks-ass.net> <20170223174505.GI6515@twins.programming.kicks-ass.net> <20170223175438.GX6536@twins.programming.kicks-ass.net> X-Mailer: Claws Mail 3.14.0 (GTK+ 2.24.31; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Sorry, for the late reply. Just got back from traveling. On Thu, 23 Feb 2017 18:54:38 +0100 Peter Zijlstra wrote: > On Thu, Feb 23, 2017 at 06:45:05PM +0100, Peter Zijlstra wrote: > > Hurm.. maybe we should do what Steve initially suggested. The > > alternative is link order trickery, and I'm not sure we want to do that. > > That is, given: > > kernel/sched/Makefile: obj-y += idle_task.o fair.o rt.o deadline.o stop_task.o > > results in: > > readelf -s defconfig-build/vmlinux | awk '/sched_class/ {print $2 " " $8}' | sort -n > 00000000602c93c0 idle_sched_class > 00000000602c9480 fair_sched_class > 00000000602c9580 rt_sched_class > 00000000602c96c0 dl_sched_class > 00000000602c97c0 stop_sched_class > > we can do this, but yuck! > > --- > kernel/sched/core.c | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index 8f972df76eb2..eebe6729ceb7 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -3285,10 +3285,16 @@ pick_next_task(struct rq *rq, struct task_struct *prev, struct rq_flags *rf) > struct task_struct *p; > > /* > - * Optimization: we know that if all tasks are in > - * the fair class we can call that function directly: > + * Optimization: we know that if all tasks are in the fair class we can > + * call that function directly, but only if the @prev task wasn't of a > + * higher scheduling class, because otherwise those loose the > + * opportinity to pull in more work from other CPUs. > + * > + * Depends on link order in kernel/sched/Makefile. > */ > - if (likely(rq->nr_running == rq->cfs.h_nr_running)) { > + if (likely(rq->nr_running == rq->cfs.h_nr_running && > + prev->sched_class <= &fair_sched_class)) { If we go this route, I would suggest that we hardcode the classes in vmlinux.lds.h. -- Steve > + > p = fair_sched_class.pick_next_task(rq, prev, rf); > if (unlikely(p == RETRY_TASK)) > goto again;