[PATCH] [RSDL-0.30] sched: rsdl improve latencies with differential nice -1

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Al Boldi <a1426z@...>
Cc: Andrew Morton <akpm@...>, Ingo Molnar <mingo@...>, ck list <ck@...>, <linux-kernel@...>
Date: Tuesday, March 13, 2007 - 12:03 pm

On Wednesday 14 March 2007 02:31, Con Kolivas wrote:

Oops, one tiny fix. This is a respin of the patch, sorry.
---
Modify the priority bitmaps of different nice levels to be dithered
minimising the latency likely when different nice levels are used. This
allows low cpu using relatively niced tasks to still get low latency in the
presence of less niced tasks.

Fix the accounting on -nice levels to not be scaled by HZ.

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

---
 kernel/sched.c |   73 ++++++++++++++++++++++++++++++++++++---------------------
 1 file changed, 47 insertions(+), 26 deletions(-)

Index: linux-2.6.21-rc3-mm2/kernel/sched.c
===================================================================
--- linux-2.6.21-rc3-mm2.orig/kernel/sched.c	2007-03-13 23:17:29.000000000 +1100
+++ linux-2.6.21-rc3-mm2/kernel/sched.c	2007-03-14 03:01:58.000000000 +1100
@@ -89,24 +89,34 @@ unsigned long long __attribute__((weak))
 #define SCHED_PRIO(p)		((p)+MAX_RT_PRIO)
 #define MAX_DYN_PRIO		(MAX_PRIO + PRIO_RANGE)
 
-/*
- * Preemption needs to take into account that a low priority task can be
- * at a higher prio due to list merging. Its priority is artificially
- * elevated and it should be preempted if anything higher priority wakes up
- * provided it is not a realtime comparison.
- */
-#define TASK_PREEMPTS_CURR(p, curr) \
-	(((p)->prio < (curr)->prio) || (!rt_task(p) && \
-		((p)->static_prio < (curr)->static_prio && \
-			((curr)->static_prio > (curr)->prio))))
+#define TASK_PREEMPTS_CURR(p, curr)	((p)->prio < (curr)->prio)
 
 /*
  * This is the time all tasks within the same priority round robin.
  * Set to a minimum of 6ms.
  */
-#define RR_INTERVAL		((6 * HZ / 1001) + 1)
+#define __RR_INTERVAL		6
+#define RR_INTERVAL		((__RR_INTERVAL * HZ / 1001) + 1)
 #define DEF_TIMESLICE		(RR_INTERVAL * 20)
 
+/*
+ * This contains a bitmap for each dynamic priority level with empty slots
+ * for the valid priorities each different nice level can have. It allows
+ * us to stagger the slots where differing priorities run in a way that
+ * keeps latency differences between different nice levels at a minimum.
+ * ie, where 0 means a slot for that priority, priority running from left to
+ * right:
+ * nice -20 0000000000000000000000000000000000000000
+ * nice -10 1001000100100010001001000100010010001000
+ * nice   0 1010101010101010101010101010101010101010
+ * nice   5 1101011010110101101011010110101101011011
+ * nice  10 1101110110111011101101110111011011101110
+ * nice  15 1111101111110111111011111011111101111110
+ * nice  19 1111111111111111111011111111111111111111
+  */
+static unsigned long prio_matrix[PRIO_RANGE][BITS_TO_LONGS(PRIO_RANGE)]
+				__read_mostly;
+
 #ifdef CONFIG_SMP
 /*
  * Divide a load by a sched group cpu_power : (load / sg->__cpu_power)
@@ -649,15 +659,6 @@ static inline int task_queued(struct tas
 static inline void set_task_entitlement(struct task_struct *p)
 {
 	__set_bit(USER_PRIO(p->prio), p->bitmap);
-
-	/*
-	 * In the case this task has been part of a merged list that has
-	 * made it to higher priority than it should be, we remove the
-	 * quota from its own priority since it will get a quota at this
-	 * priority.
-	 */
-	if (p->normal_prio < p->static_prio)
-		__set_bit(USER_PRIO(p->static_prio), p->bitmap);
 	p->time_slice = p->quota;
 }
 
@@ -705,7 +706,8 @@ static void dequeue_task(struct task_str
  */
 static inline void task_new_array(struct task_struct *p, struct rq *rq)
 {
-	bitmap_zero(p->bitmap, PRIO_RANGE);
+	bitmap_copy(p->bitmap, prio_matrix[USER_PRIO(p->static_prio)],
+		    PRIO_RANGE);
 	p->rotation = rq->prio_rotation;
 }
 
@@ -746,7 +748,7 @@ static void recalc_task_prio(struct task
 			task_new_array(p, rq);
 	} else
 		task_new_array(p, rq);
-	search_prio = p->static_prio;
+	search_prio = MAX_RT_PRIO;
 
 	/*
 	 * SCHED_BATCH tasks never start at better priority than any other
@@ -755,7 +757,7 @@ static void recalc_task_prio(struct task
 	 * non SCHED_BATCH tasks of the same nice level.
 	 */
 	if (unlikely(p->policy == SCHED_BATCH))
-		search_prio = max(p->static_prio, rq->prio_level);
+		search_prio = rq->prio_level;
 	queue_prio = SCHED_PRIO(find_next_zero_bit(p->bitmap, PRIO_RANGE,
 		     USER_PRIO(search_prio)));
 	if (queue_prio == MAX_PRIO) {
@@ -833,11 +835,12 @@ static void requeue_task(struct task_str
  */
 static inline unsigned int task_timeslice(struct task_struct *p)
 {
-	unsigned int slice, rr;
+	unsigned int slice;
 
-	slice = rr = p->quota;
+	slice = p->quota;
 	if (likely(!rt_task(p)))
-		slice += (PRIO_RANGE - 1 - TASK_USER_PRIO(p)) * rr;
+		slice += (PRIO_RANGE - 1 - TASK_USER_PRIO(p)) *
+			__RR_INTERVAL / HZ;
 	return slice;
 }
 
@@ -7066,6 +7069,24 @@ void __init sched_init(void)
 	int i, j, k;
 	int highest_cpu = 0;
 
+	for (i = 0; i < PRIO_RANGE; i++) {
+		if (i < 20) {
+			bitmap_zero(prio_matrix[i] , PRIO_RANGE);
+			j = PRIO_RANGE * PRIO_RANGE / (i + 1);
+			for (k = j; k < PRIO_RANGE * PRIO_RANGE; k += j)
+				__set_bit(k / PRIO_RANGE, prio_matrix[i]);
+		} else if (i == 20) {
+			bitmap_fill(prio_matrix[i], PRIO_RANGE);
+			for (k = 1; k < PRIO_RANGE; k += 2)
+				__clear_bit(k, prio_matrix[i]);
+		} else {
+			bitmap_fill(prio_matrix[i], PRIO_RANGE);
+			j = PRIO_RANGE * PRIO_RANGE / (PRIO_RANGE - i + 1);
+			for (k = j; k < PRIO_RANGE * PRIO_RANGE; k += j)
+				__clear_bit(k / PRIO_RANGE, prio_matrix[i]);
+		}
+	}
+
 	for_each_possible_cpu(i) {
 		struct prio_array *array;
 		struct rq *rq;

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

Messages in current thread:
[PATCH] [RSDL-0.30] sched: rsdl improve latencies with diffe..., Con Kolivas, (Tue Mar 13, 12:03 pm)
RSDL development plans, Con Kolivas, (Tue Mar 13, 7:08 pm)
Re: RSDL development plans, Con Kolivas, (Fri Mar 16, 8:25 am)
RSDL v0.31, Con Kolivas, (Fri Mar 16, 9:40 am)
Re: RSDL v0.31, Al Boldi, (Fri Mar 16, 5:55 pm)
Re: RSDL v0.31, Con Kolivas, (Fri Mar 16, 10:51 pm)
Re: RSDL v0.31, Al Boldi, (Sat Mar 17, 12:40 am)
Re: RSDL v0.31, Con Kolivas, (Sat Mar 17, 12:57 am)
Re: RSDL v0.31, Al Boldi, (Sat Mar 17, 12:12 pm)
Re: RSDL v0.31, Ed Tomlinson, (Sat Mar 17, 9:50 am)
Re: RSDL v0.31, Gene Heskett, (Sat Mar 17, 1:15 am)
Re: RSDL v0.31, AshMilsted, (Fri Mar 16, 1:12 pm)
Re: RSDL v0.31, Gabriel C, (Fri Mar 16, 1:41 pm)
Re: RSDL v0.31, Mike Galbraith, (Fri Mar 16, 11:34 am)
Re: RSDL v0.31, Con Kolivas, (Fri Mar 16, 5:13 pm)
Re: RSDL v0.31, Mike Galbraith, (Fri Mar 16, 6:30 pm)
Re: RSDL v0.31, Rik van Riel, (Sat Mar 17, 10:32 am)
Re: RSDL v0.31, Ingo Molnar, (Sat Mar 17, 11:39 am)
Re: RSDL v0.31, Mike Galbraith, (Sat Mar 17, 10:43 am)
Re: [ck] Re: RSDL v0.31, Dirk Schoebel, (Fri Mar 16, 7:05 pm)
Re: RSDL v0.31, Nicholas Miell, (Sat Mar 17, 12:24 am)
Re: RSDL v0.31, Mike Galbraith, (Sat Mar 17, 1:56 am)
Re: RSDL v0.31, Nicholas Miell, (Sat Mar 17, 2:26 am)
Re: RSDL v0.31, Ingo Molnar, (Sat Mar 17, 3:56 am)
Re: [ck] Re: RSDL v0.31, jos poortvliet, (Sat Mar 17, 7:07 am)
Re: RSDL v0.31, Ingo Molnar, (Sat Mar 17, 8:44 am)
Re: RSDL v0.31, jos poortvliet, (Sat Mar 17, 9:44 am)
Re: [ck] Re: RSDL v0.31, Ed Tomlinson, (Sat Mar 17, 10:04 am)
Re: RSDL v0.31, Ingo Molnar, (Sat Mar 17, 3:45 am)
Re: RSDL v0.31, David Lang, (Sat Mar 17, 3:44 am)
Re: RSDL v0.31, Mike Galbraith, (Sat Mar 17, 4:46 am)
Re: [ck] Re: RSDL v0.31, Mark Glines, (Sat Mar 17, 10:09 am)
Re: [ck] Re: RSDL v0.31, Mike Galbraith, (Sat Mar 17, 10:33 am)
Re: [ck] Re: RSDL v0.31, Mark Glines, (Sat Mar 17, 10:54 am)
Re: [ck] Re: RSDL v0.31, Mike Galbraith, (Sat Mar 17, 10:58 am)
Re: RSDL v0.31, Serge Belyshev, (Sat Mar 17, 4:41 am)
Re: RSDL v0.31, Con Kolivas, (Sat Mar 17, 5:48 am)
Re: RSDL v0.31, Mark Hahn, (Sat Mar 17, 11:13 am)
Re: RSDL v0.31, Chris Friesen, (Mon Mar 19, 11:06 am)
Re: RSDL v0.31, Stephen Clark, (Sat Mar 17, 1:22 pm)
Re: is RSDL an "unfair" scheduler too?, Ingo Molnar, (Sat Mar 17, 7:49 am)
Re: is RSDL an "unfair" scheduler too?, Avi Kivity, (Sat Mar 17, 4:41 pm)
Re: is RSDL an "unfair" scheduler too?, William Lee Irwin III, (Sat Mar 17, 9:25 pm)
Re: is RSDL an "unfair" scheduler too?, Avi Kivity, (Sun Mar 18, 1:00 am)
Re: is RSDL an "unfair" scheduler too?, Linus Torvalds, (Sat Mar 17, 9:32 pm)
Re: is RSDL an "unfair" scheduler too?, Willy Tarreau, (Sun Mar 18, 1:24 am)
Re: is RSDL an "unfair" scheduler too?, Mike Galbraith, (Sun Mar 18, 2:26 am)
Re: [ck] Re: is RSDL an "unfair" scheduler too?, Radoslaw Szkodzinski, (Sun Mar 18, 2:54 am)
Re: [ck] Re: is RSDL an "unfair" scheduler too?, Willy Tarreau, (Sun Mar 18, 3:58 am)
Re: [ck] Re: is RSDL an "unfair" scheduler too?, Avi Kivity, (Sun Mar 18, 4:45 am)
Re: is RSDL an "unfair" scheduler too?, Bill Huey, (Sun Mar 18, 2:09 am)
Re: is RSDL an "unfair" scheduler too?, Bill Davidsen, (Mon Mar 19, 5:14 pm)
Re: is RSDL an "unfair" scheduler too?, Mike Galbraith, (Sun Mar 18, 2:37 am)
Re: is RSDL an "unfair" scheduler too?, Bill Huey, (Sun Mar 18, 3:35 am)
Re: is RSDL an "unfair" scheduler too?, Avi Kivity, (Sun Mar 18, 1:55 am)
RE: is RSDL an "unfair" scheduler too?, David Schwartz, (Sun Mar 18, 10:27 pm)
Re: is RSDL an "unfair" scheduler too?, Avi Kivity, (Mon Mar 19, 11:25 am)
Re: is RSDL an "unfair" scheduler too?, Helge Hafting, (Mon Mar 19, 12:06 pm)
Re: is RSDL an "unfair" scheduler too?, Avi Kivity, (Mon Mar 19, 12:37 pm)
Re: is RSDL an "unfair" scheduler too?, Radoslaw Szkodzinski, (Mon Mar 19, 9:27 am)
Re: is RSDL an "unfair" scheduler too?, David Lang, (Mon Mar 19, 2:30 pm)
Re: is RSDL an "unfair" scheduler too?, Con Kolivas, (Sat Mar 17, 8:02 am)
Re: [ck] Re: is RSDL an "unfair" scheduler too?, jos poortvliet, (Sat Mar 17, 8:23 am)
RE: [ck] Re: is RSDL an "unfair" scheduler too?, David Schwartz, (Sat Mar 17, 1:31 pm)
Re: is RSDL an "unfair" scheduler too?, Ingo Molnar, (Sat Mar 17, 8:28 am)
Re: is RSDL an "unfair" scheduler too?, Con Kolivas, (Sat Mar 17, 8:43 am)
Re: is RSDL an "unfair" scheduler too?, Bill Davidsen, (Sat Mar 17, 10:13 pm)
Re: is RSDL an "unfair" scheduler too?, Mike Galbraith, (Sun Mar 18, 1:37 am)
Re: [ck] Re: is RSDL an "unfair" scheduler too?, jos poortvliet, (Sun Mar 18, 6:58 am)
Re: is RSDL an "unfair" scheduler too?, Kasper Sandberg, (Sat Mar 17, 11:20 pm)
Re: is RSDL an "unfair" scheduler too?, Ingo Molnar, (Sat Mar 17, 12:34 pm)
Re: is RSDL an "unfair" scheduler too?, Bill Davidsen, (Sat Mar 17, 11:23 pm)
Re: [ck] Re: is RSDL an "unfair" scheduler too?, jos poortvliet, (Sat Mar 17, 8:15 am)
Re: RSDL v0.31, Mike Galbraith, (Sat Mar 17, 5:58 am)
Re: RSDL v0.31, Mark Lord, (Mon Mar 19, 12:03 pm)
Re: RSDL v0.31, Al Boldi, (Sat Mar 17, 4:55 pm)
Re: RSDL v0.31, Mark Lord, (Mon Mar 19, 12:07 pm)
Re: RSDL v0.31, Al Boldi, (Mon Mar 19, 4:53 pm)
Re: RSDL v0.31, Artur Skawina, (Tue Mar 20, 3:50 pm)
Re: RSDL v0.31, Al Boldi, (Wed Mar 21, 12:15 am)
Re: RSDL v0.31, Artur Skawina, (Wed Mar 21, 1:24 pm)
Re: RSDL v0.31, Xavier Bestel, (Mon Mar 19, 12:26 pm)
Re: RSDL v0.31, Mark Lord, (Mon Mar 19, 12:36 pm)
Re: RSDL v0.31, Xavier Bestel, (Mon Mar 19, 12:43 pm)
Re: RSDL v0.31, Linus Torvalds, (Mon Mar 19, 11:11 pm)
Re: RSDL v0.31, Mark Lord, (Tue Mar 20, 9:22 am)
Re: RSDL v0.31, Ray Lee, (Tue Mar 20, 11:16 am)
Re: RSDL v0.31, Kasper Sandberg, (Wed Mar 21, 4:55 am)
Re: RSDL v0.31, Mark Lord, (Tue Mar 20, 11:20 am)
Re: [ck] Re: RSDL v0.31, jos poortvliet, (Tue Mar 20, 6:26 am)
Re: RSDL v0.31, Willy Tarreau, (Tue Mar 20, 2:11 am)
Re: RSDL v0.31, Linus Torvalds, (Tue Mar 20, 11:31 am)
Re: RSDL v0.31, Bill Davidsen, (Wed Mar 28, 7:43 pm)
Re: RSDL v0.31, Keith Duthie, (Wed Mar 21, 4:22 am)
Re: RSDL v0.31, Al Boldi, (Tue Mar 20, 2:08 pm)
Re: RSDL v0.31, Xavier Bestel, (Tue Mar 20, 5:03 am)
Re: RSDL v0.31, Ingo Molnar, (Wed Mar 21, 3:50 am)
RE: RSDL v0.31, David Schwartz, (Wed Mar 21, 6:43 am)
Re: RSDL v0.31, Bill Davidsen, (Wed Mar 28, 7:37 pm)
RE: RSDL v0.31, David Schwartz, (Thu Mar 29, 3:10 am)
Re: RSDL v0.31, Nick Piggin, (Thu Mar 29, 3:34 am)
Re: RSDL v0.31, Artur Skawina, (Tue Mar 20, 8:31 am)
Re: RSDL v0.31, Artur Skawina, (Tue Mar 20, 3:16 pm)
Re: RSDL v0.31, Mike Galbraith, (Tue Mar 20, 4:03 am)
Re: RSDL v0.31, Mike Galbraith, (Wed Mar 21, 10:57 am)
Re: RSDL v0.31, Peter Zijlstra, (Wed Mar 21, 12:02 pm)
Re: RSDL v0.31, Mike Galbraith, (Thu Mar 22, 3:07 am)
Re: RSDL v0.31, Con Kolivas, (Thu Mar 22, 6:50 pm)
Re: RSDL v0.31, Mike Galbraith, (Fri Mar 23, 12:39 am)
Re: RSDL v0.31, Con Kolivas, (Fri Mar 23, 1:59 am)
Re: RSDL v0.31, Mike Galbraith, (Fri Mar 23, 8:17 am)
Re: RSDL v0.31, Mike Galbraith, (Fri Mar 23, 2:11 am)
Re: RSDL v0.31, Ingo Molnar, (Thu Mar 22, 5:18 am)
Re: RSDL v0.31, Con Kolivas, (Thu Mar 22, 6:03 pm)
Re: RSDL v0.31, Mike Galbraith, (Thu Mar 22, 5:34 am)
Re: RSDL v0.31, Mike Galbraith, (Thu Mar 22, 5:41 am)
Re: RSDL v0.31, Mike Galbraith, (Wed Mar 21, 1:06 pm)
Re: RSDL v0.31, Mike Galbraith, (Sun Mar 18, 2:17 am)
Re: RSDL v0.31, Kasper Sandberg, (Sun Mar 18, 2:47 am)
Re: RSDL v0.31, Mike Galbraith, (Sun Mar 18, 3:08 am)
Re: [ck] Re: RSDL v0.31, Radoslaw Szkodzinski, (Sun Mar 18, 3:22 am)
Re: [ck] Re: RSDL v0.31, Mike Galbraith, (Sun Mar 18, 3:38 am)
Re: [ck] Re: RSDL v0.31, Radoslaw Szkodzinski, (Sun Mar 18, 11:44 am)
Re: [ck] Re: RSDL v0.31, jos poortvliet, (Sun Mar 18, 12:09 pm)
Re: [ck] Re: RSDL v0.31, Kasper Sandberg, (Sun Mar 18, 5:57 am)
Re: [ck] Re: RSDL v0.31, Bill Davidsen, (Mon Mar 19, 4:47 pm)
Re: [ck] Re: RSDL v0.31, Kasper Sandberg, (Wed Mar 21, 4:58 am)
Re: [ck] Re: RSDL v0.31, jos poortvliet, (Tue Mar 20, 6:19 am)
Re: [ck] Re: RSDL v0.31, Avuton Olrich, (Sun Mar 18, 9:57 am)
Re: [ck] Re: RSDL v0.31, jimmy bahuleyan, (Sun Mar 18, 4:20 am)
Re: [ck] Re: RSDL v0.31, Mike Galbraith, (Sun Mar 18, 4:34 am)
Re: [ck] Re: RSDL v0.31, Mike Galbraith, (Sun Mar 18, 4:04 am)
Re: [ck] Re: RSDL v0.31, michael chang, (Sat Mar 17, 9:58 am)
Re: RSDL v0.31, Mike Galbraith, (Sat Mar 17, 6:49 am)
Re: RSDL v0.31, Gene Heskett, (Sat Mar 17, 8:05 am)
Re: RSDL v0.31, Mike Galbraith, (Sat Mar 17, 9:36 am)
Re: RSDL v0.31, Gene Heskett, (Sat Mar 17, 1:03 pm)
Re: RSDL v0.31, Mike Galbraith, (Sat Mar 17, 1:37 pm)
Re: [ck] Re: RSDL v0.31, Kacper Wysocki, (Sat Mar 17, 2:23 pm)
Re: [ck] Re: RSDL v0.31, Mike Galbraith, (Sat Mar 17, 2:45 pm)
Re: RSDL v0.31, Nicholas Miell, (Sat Mar 17, 4:23 am)
Re: RSDL v0.31, Mike Galbraith, (Sat Mar 17, 3:11 am)
Re: RSDL v0.31, Gene Heskett, (Sat Mar 17, 7:48 am)
Re: RSDL v0.31, William Lee Irwin III, (Sat Mar 17, 3:25 am)
Re: RSDL v0.31, Nicholas Miell, (Sat Mar 17, 3:29 am)
Re: RSDL v0.31, Mike Galbraith, (Sat Mar 17, 2:08 am)
RE: RSDL v0.31, David Schwartz, (Sun Mar 18, 10:27 pm)
RE: RSDL v0.31, Mike Galbraith, (Mon Mar 19, 2:21 am)
Re: RSDL v0.31, Willy Tarreau, (Mon Mar 19, 2:59 am)
Re: RSDL v0.31, Lee Revell, (Sun Mar 18, 3:37 pm)
Re: RSDL v0.31, Szonyi Calin, (Sun Mar 18, 6:45 pm)
Re: RSDL v0.31, Mike Galbraith, (Sun Mar 18, 3:55 pm)
Re: RSDL v0.31, Ed Tomlinson, (Sat Mar 17, 9:56 am)
Re: RSDL development plans, Mike Galbraith, (Fri Mar 16, 9:42 am)
Re: RSDL development plans, Con Kolivas, (Fri Mar 16, 9:59 am)
Re: RSDL development plans, Mike Galbraith, (Fri Mar 16, 10:07 am)