From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752229AbbDZRMx (ORCPT ); Sun, 26 Apr 2015 13:12:53 -0400 Received: from m15-114.126.com ([220.181.15.114]:56528 "EHLO m15-114.126.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751045AbbDZRMv (ORCPT ); Sun, 26 Apr 2015 13:12:51 -0400 From: Xunlei Pang To: linux-kernel@vger.kernel.org Cc: Peter Zijlstra , Steven Rostedt , Juri Lelli , Ingo Molnar , Xunlei Pang Subject: [RFC PATCH 3/6] sched/rt: Check to push FIFO current away at each tick Date: Mon, 27 Apr 2015 01:10:55 +0800 Message-Id: <1430068258-1960-3-git-send-email-xlpang@126.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1430068258-1960-1-git-send-email-xlpang@126.com> References: <1430068258-1960-1-git-send-email-xlpang@126.com> X-CM-TRANSID: DsmowACX+G4iHD1V8BojAA--.830S4 X-Coremail-Antispam: 1Uf129KBjvdXoW7JFWkJw4UGrWfCr1DGr4kJFb_yoWkCwb_G3 90vrna9w1j9F1qqFy7Gw4Sqr92va90yFn7Xw4jgrZrCryrtrn8tr98uFyDJrsxJF48CFnx ZF9Iga4IyrsrWjkaLaAFLSUrUUUUUb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUvcSsGvfC2KfnxnUUI43ZEXa7IU5IeHPUUUUU== X-Originating-IP: [220.166.221.63] X-CM-SenderInfo: p0ost0bj6rjloofrz/1tbiJwznv01sBbhjvQAAsx Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Xunlei Pang There may be some non-migratable tasks queued in the "run queue" with the same priority as current which is FIFO and migratable, so at each tick we can check and try to push current away and give these tasks a chance of running(we don't do this for tasks queued with lower priority). Signed-off-by: Xunlei Pang --- kernel/sched/rt.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c index 7b76747..ddd5b19 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -2314,10 +2314,17 @@ static void task_tick_rt(struct rq *rq, struct task_struct *p, int queued) /* * RR tasks need a special form of timeslice management. - * FIFO tasks have no timeslices. + * FIFO tasks have no timeslices. But if p(current) is a + * FIFO task, try to push it away. */ - if (p->policy != SCHED_RR) + if (p->policy != SCHED_RR) { + if (p->nr_cpus_allowed > 1 && + rq->rt.rt_nr_running > 1 && + !test_tsk_need_resched(p)) + check_preempt_equal_prio_common(rq); + return; + } if (--p->rt.time_slice) return; -- 1.9.1