From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751276AbbEZCRc (ORCPT ); Mon, 25 May 2015 22:17:32 -0400 Received: from smtpbgbr1.qq.com ([54.207.19.206]:45712 "EHLO smtpbgbr1.qq.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751046AbbEZCRa (ORCPT ); Mon, 25 May 2015 22:17:30 -0400 X-QQ-mid: esmtp23t1432606622t819t04199 X-QQ-SSF: A1000000000000F0F4204200000000P X-QQ-FEAT: bwgMLqpyqeLVDHV2GuFmwzXsiAXloIohY7K1u5DqHCqOWs0Yuwzb7y3uLgMH1 VJNevMbvD83DS9h+XOO14Ulpr/HDT+45bFGGksGJQgT9bNouiknuWTCW01NyPf9dJr7HJop ipgMz79QB6ycac84aTpPQvgH0uf3M7wF5WnBfD2/k4zGQdourMaE/xJsMFKwwaPO4Iy02Wd 028pq0WwF/T0N1eAo8a05 X-QQ-GoodBg: 0 Date: Tue, 26 May 2015 10:17:01 +0800 From: Wanpeng Li To: Peter Zijlstra , Ingo Molnar Cc: Juri Lelli , linux-kernel@vger.kernel.org, Wanpeng Li Subject: Re: [PATCH v2 1/7] sched/deadline: fix try to pull pinned dl tasks in pull algorithm Message-ID: <20150526021701.GA4024@ubuntu> Reply-To: Wanpeng Li References: <1431496867-4194-1-git-send-email-wanpeng.li@linux.intel.com> <20150519002314.GA2548@kernel> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150519002314.GA2548@kernel> User-Agent: Mutt/1.5.21 (2010-09-15) X-QQ-SENDSIZE: 520 X-QQ-Bgrelay: 1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Ping, On Tue, May 19, 2015 at 08:23:15AM +0800, Wanpeng Li wrote: >Ping Peterz for this patchset, :) >On Wed, May 13, 2015 at 02:01:01PM +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 890ce95..f09f3ad 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