public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Con Kolivas <kernel@kolivas.org>
To: tim.c.chen@linux.intel.com
Cc: "Chen, Kenneth W" <kenneth.w.chen@intel.com>,
	linux-kernel@vger.kernel.org, mingo@elte.hu,
	Andrew Morton <akpm@osdl.org>, Mike Galbraith <efault@gmx.de>
Subject: Re: Regression seen for patch "sched:dont decrease idle sleep avg"
Date: Wed, 17 May 2006 18:23:23 +1000	[thread overview]
Message-ID: <200605171823.24476.kernel@kolivas.org> (raw)
In-Reply-To: <1147822331.4859.37.camel@localhost.localdomain>

On Wednesday 17 May 2006 09:32, Tim Chen wrote:
> On Tue, 2006-05-16 at 09:45 +1000, Con Kolivas wrote:
> > Yes it's only designed to detect something that has been asleep for an
> > arbitrary long time and "categorised as idle"; it is not supposed to be a
> > priority stepping stone for everything, in this case at MAX_BONUS-1. Mike
> > proposed doing this instead, but it was never my intent.
>
> It seems like just one sleep longer than INTERACTIVE_SLEEP is needed
> kick the priority of a process all the way to MAX_BONUS-1 and boost the
> sleep_avg, regardless of what the prior sleep_avg was.
>
> So if there is a cpu hog that has long sleeps occasionally, once it woke
> up, its priority will get boosted close to maximum, likely starving out
> other processes for a while till its sleep_avg gets reduced.  This
> behavior seems like something to avoid according to the original code
> comment.  Are we boosting the priority too quickly?

Two things strike me here. I'll explain them in the patch below.

How's this look?
---
The relationship between INTERACTIVE_SLEEP and the ceiling is not perfect
and not explicit enough. The sleep boost is not supposed to be any larger
than without this code and the comment is not clear enough about what exactly
it does, just the reason it does it.

There is a ceiling to the priority beyond which tasks that only ever sleep
for very long periods cannot surpass.

Opportunity to micro-optimise and re-use the ceiling variable.

Signed-off-by: Con Kolivas <kernel@kolivas.org>

---
 kernel/sched.c |   28 +++++++++++-----------------
 1 files changed, 11 insertions(+), 17 deletions(-)

Index: linux-2.6.17-rc4-mm1/kernel/sched.c
===================================================================
--- linux-2.6.17-rc4-mm1.orig/kernel/sched.c	2006-05-17 15:57:49.000000000 +1000
+++ linux-2.6.17-rc4-mm1/kernel/sched.c	2006-05-17 18:19:29.000000000 +1000
@@ -904,20 +904,14 @@ static int recalc_task_prio(task_t *p, u
 	}
 
 	if (likely(sleep_time > 0)) {
-		/*
-		 * User tasks that sleep a long time are categorised as
-		 * idle. They will only have their sleep_avg increased to a
-		 * level that makes them just interactive priority to stay
-		 * active yet prevent them suddenly becoming cpu hogs and
-		 * starving other processes.
-		 */
-		if (p->mm && sleep_time > INTERACTIVE_SLEEP(p)) {
-				unsigned long ceiling;
+		unsigned long ceiling = INTERACTIVE_SLEEP(p);
 
-				ceiling = JIFFIES_TO_NS(MAX_SLEEP_AVG -
-					DEF_TIMESLICE);
-				if (p->sleep_avg < ceiling)
-					p->sleep_avg = ceiling;
+		if (p->mm && sleep_time > ceiling && p->sleep_avg < ceiling) {
+			/*
+			 * Prevents user tasks from achieving best priority
+			 * with one single large enough sleep.
+			 */
+			p->sleep_avg = ceiling;
 		} else {
 			/*
 			 * Tasks waking from uninterruptible sleep are
@@ -925,12 +919,12 @@ static int recalc_task_prio(task_t *p, u
 			 * are likely to be waiting on I/O
 			 */
 			if (p->sleep_type == SLEEP_NONINTERACTIVE && p->mm) {
-				if (p->sleep_avg >= INTERACTIVE_SLEEP(p))
+				if (p->sleep_avg >= ceiling)
 					sleep_time = 0;
 				else if (p->sleep_avg + sleep_time >=
-						INTERACTIVE_SLEEP(p)) {
-					p->sleep_avg = INTERACTIVE_SLEEP(p);
-					sleep_time = 0;
+					 ceiling) {
+						p->sleep_avg = ceiling;
+						sleep_time = 0;
 				}
 			}
 
-- 
-ck

  parent reply	other threads:[~2006-05-17  8:23 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-05-08 23:18 Regression seen for patch "sched:dont decrease idle sleep avg" Tim Chen
2006-05-09  0:43 ` Con Kolivas
2006-05-09  1:07   ` Martin Bligh
2006-05-12  0:04   ` Chen, Kenneth W
2006-05-13 12:27     ` Andrew Morton
2006-05-13 13:07       ` Mike Galbraith
2006-05-14 16:03     ` Con Kolivas
2006-05-15 19:01       ` Chen, Kenneth W
2006-05-15 23:45         ` Con Kolivas
2006-05-16  1:22           ` Chen, Kenneth W
2006-05-16  1:44             ` Con Kolivas
2006-05-16  4:10           ` Mike Galbraith
2006-05-16 23:32           ` Tim Chen
2006-05-17  4:25             ` Mike Galbraith
2006-05-17  4:45               ` Peter Williams
2006-05-17  5:24                 ` Mike Galbraith
2006-05-17  8:23             ` Con Kolivas [this message]
2006-05-17  9:49               ` Mike Galbraith
2006-05-17 10:25                 ` Con Kolivas
2006-05-17 11:42                   ` Mike Galbraith
2006-05-17 12:46                     ` Con Kolivas
2006-05-17 13:41                       ` Mike Galbraith
2006-05-17 15:10                         ` Con Kolivas
2006-05-17 17:21                           ` Ray Lee
2006-05-17 19:33               ` Chen, Kenneth W
2006-05-18  0:35                 ` Con Kolivas
2006-05-18  1:10                   ` Chen, Kenneth W
2006-05-18  1:38                     ` Con Kolivas
2006-05-18  5:44                       ` Mike Galbraith
2006-05-18  5:52                         ` Con Kolivas
2006-05-18  7:04                           ` Mike Galbraith
2006-05-18 12:59                             ` Mike Galbraith
2006-05-19  1:10                               ` Con Kolivas
2006-05-18 23:17                           ` Chen, Kenneth W
2006-05-19  1:30                             ` [PATCH] sched: fix interactive ceiling code Con Kolivas
2006-05-19  2:02                               ` Mike Galbraith
2006-05-19  9:40                               ` Ingo Molnar
2006-05-19 14:37                               ` Chen, Kenneth W
2006-05-19 16:19                                 ` tim_c_chen
2006-05-18 23:34                           ` Regression seen for patch "sched:dont decrease idle sleep avg" Chen, Kenneth W
2006-05-19  1:07                             ` Con Kolivas
2006-05-16  4:07         ` Mike Galbraith
  -- strict thread matches above, loose matches on Subject: below --
2006-05-18  4:01 Al Boldi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200605171823.24476.kernel@kolivas.org \
    --to=kernel@kolivas.org \
    --cc=akpm@osdl.org \
    --cc=efault@gmx.de \
    --cc=kenneth.w.chen@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=tim.c.chen@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox