Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755846AbbEFH3i (ORCPT ); Wed, 6 May 2015 03:29:38 -0400 Received: from mga14.intel.com ([192.55.52.115]:40648 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753438AbbEFH3f (ORCPT ); Wed, 6 May 2015 03:29:35 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,378,1427785200"; d="scan'208";a="705955870" Date: Wed, 6 May 2015 15:11:39 +0800 From: Wanpeng Li To: Juri Lelli Cc: Ingo Molnar , Peter Zijlstra , linux-kernel@vger.kernel.org, Wanpeng Li Subject: Re: [PATCH 1/7] sched/deadline: fix try to pull pinned dl tasks in pull algorithm Message-ID: <20150506071138.GA2418@kernel> Reply-To: Wanpeng Li References: <1428310399-13489-1-git-send-email-wanpeng.li@linux.intel.com> <20150427094238.GA4649@kernel> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150427094238.GA4649@kernel> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2342 Lines: 71 Ping, :) On Mon, Apr 27, 2015 at 05:42:38PM +0800, Wanpeng Li wrote: >How about patch 1/7? :) >On Mon, Apr 06, 2015 at 04:53:13PM +0800, Wanpeng Li wrote: >>Function pick_next_earliest_dl_task is used to pick earliest and pushable >>dl task from overloaded cpus in pull algorithm, however, it traverses >>runqueue rbtree instead of pushable task rbtree which is also ordered by >>tasks' deadlines. This will result in getting no candidates from overloaded >>cpus if all the dl tasks on the overloaded cpus are pinned. This patch fix >>it by traversing pushable task rbtree which is also ordered by tasks' >>deadlines. >> >>Signed-off-by: Wanpeng Li >>--- >> kernel/sched/deadline.c | 29 ++++++++++++++++++++++++++++- >> 1 file changed, 28 insertions(+), 1 deletion(-) >> >>diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c >>index 5e95145..b57ceba 100644 >>--- a/kernel/sched/deadline.c >>+++ b/kernel/sched/deadline.c >>@@ -1230,6 +1230,33 @@ next_node: >> return NULL; >> } >> >>+/* >>+ * Return the earliest pushable rq's task, which is suitable to be executed >>+ * on the cpu, NULL otherwse >>+ */ >>+static struct task_struct *pick_earliest_pushable_dl_task(struct rq *rq, >>+ int cpu) >>+{ >>+ struct rb_node *next_node = rq->dl.pushable_dl_tasks_leftmost; >>+ struct task_struct *p = NULL; >>+ >>+ if (!has_pushable_dl_tasks(rq)) >>+ return NULL; >>+ >>+next_node: >>+ if (next_node) { >>+ p = rb_entry(next_node, struct task_struct, pushable_dl_tasks); >>+ >>+ if (pick_dl_task(rq, p, cpu)) >>+ return p; >>+ >>+ next_node = rb_next(next_node); >>+ goto next_node; >>+ } >>+ >>+ return NULL; >>+} >>+ >> static DEFINE_PER_CPU(cpumask_var_t, local_cpu_mask_dl); >> >> static int find_later_rq(struct task_struct *task) >>@@ -1514,7 +1541,7 @@ static int pull_dl_task(struct rq *this_rq) >> if (src_rq->dl.dl_nr_running <= 1) >> goto skip; >> >>- p = pick_next_earliest_dl_task(src_rq, this_cpu); >>+ p = pick_earliest_pushable_dl_task(src_rq, this_cpu); >> >> /* >> * We found a task to be pulled if: >>-- >>1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/