Re: [PATCH 2/6] sched: make sched_slice() group scheduling savvy

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: <vatsa@...>
Cc: <linux-kernel@...>, Ingo Molnar <mingo@...>, Mike Galbraith <efault@...>, Dmitry Adamushko <dmitry.adamushko@...>
Date: Thursday, November 1, 2007 - 8:20 am

On Thu, 2007-11-01 at 13:03 +0100, Peter Zijlstra wrote:

Ok, suppose a tree like so:


level 2                   cfs_rq
                       A           B

level 1             cfs_rqA     cfs_rqB
                     A0        B0 - B99


So for sake of determinism, we want to impose a period in which all
level 1 tasks will have ran (at least) once.

Now what sched_slice() does is calculate the weighted proportion of the
given period for each task to run, so that each task runs exactly once.

Now level 2, can introduce these large weight differences, which in this
case result in 'lumps' of time.

In the given example above the weight difference is 1:100, which is
already at the edges of what regular nice levels could do.

How about limiting the max output of sched_slice() to
sysctl_sched_latency in order to break up these large stretches of time?

Index: linux-2.6/kernel/sched_fair.c
===================================================================
--- linux-2.6.orig/kernel/sched_fair.c
+++ linux-2.6/kernel/sched_fair.c
@@ -341,7 +341,7 @@ static u64 sched_slice(struct cfs_rq *cf
 		do_div(slice, cfs_rq->load.weight);
 	}
 
-	return slice;
+	return min_t(u64, sysctl_sched_latency, slice);
 }
 
 /*



-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Re: [PATCH 2/6] sched: make sched_slice() group scheduling s..., Srivatsa Vaddagiri, (Thu Nov 1, 7:31 am)
Re: [PATCH 2/6] sched: make sched_slice() group scheduling s..., Peter Zijlstra, (Thu Nov 1, 8:20 am)
Re: [PATCH 2/6] sched: make sched_slice() group scheduling s..., Srivatsa Vaddagiri, (Thu Nov 1, 12:31 pm)