[patch] CFS scheduler: Completely Fair Scheduler / CONFIG_SCHED_FAIR

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Nicholas Miell <nmiell@...>
Cc: Mike Galbraith <efault@...>, Con Kolivas <kernel@...>, Andrew Morton <akpm@...>, Linus Torvalds <torvalds@...>, <linux-kernel@...>
Date: Saturday, March 17, 2007 - 5:42 am

* Nicholas Miell <nmiell@comcast.net> wrote:


SCHED_BATCH (an existing feature of the current scheduler) is even 
fairer and even more deterministic than RSDL, because it has _zero_ 
heuristics.

so how about the patch below (against current -git), which adds the 
"CFS, Completely Fair Scheduler" feature? With that you could test your 
upcoming X fixes. (it also adds /proc/sys/kernel/sched_fair so that you 
can compare the fair scheduler against the vanilla scheduler.) It's very 
simple and unintrusive:

 4 files changed, 28 insertions(+)

furthermore, this is just the first step: if CONFIG_SCHED_FAIR becomes 
widespread amongst distributions then we can remove the interactivity 
estimator code altogether, and simplify the code quite a bit.

( NOTE: more improvements are possible as well: right now most
  interactivity calculations are still done even if CONFIG_SCHED_FAIR is
  enabled - that could be improved upon. )

	Ingo

------------------------------>
Subject: [patch] CFS scheduler: Completely Fair Scheduler
From: Ingo Molnar <mingo@elte.hu>

add the CONFIG_SCHED_FAIR option (default: off): this turns the Linux 
scheduler into a completely fair scheduler for SCHED_OTHER tasks: with 
perfect roundrobin scheduling, fair distribution of timeslices combined 
with no interactivity boosting and no heuristics.

a /proc/sys/kernel/sched_fair option is also available to turn
this behavior on/off.

if this option establishes itself amongst leading distributions then we
could in the future remove the interactivity estimator altogether.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 include/linux/sched.h  |    1 +
 kernel/Kconfig.preempt |    9 +++++++++
 kernel/sched.c         |    8 ++++++++
 kernel/sysctl.c        |   10 ++++++++++
 4 files changed, 28 insertions(+)

Index: linux/include/linux/sched.h
===================================================================
--- linux.orig/include/linux/sched.h
+++ linux/include/linux/sched.h
@@ -119,6 +119,7 @@ extern unsigned long avenrun[];		/* Load
 	load += n*(FIXED_1-exp); \
 	load >>= FSHIFT;
 
+extern unsigned int sched_fair;
 extern unsigned long total_forks;
 extern int nr_threads;
 DECLARE_PER_CPU(unsigned long, process_counts);
Index: linux/kernel/Kconfig.preempt
===================================================================
--- linux.orig/kernel/Kconfig.preempt
+++ linux/kernel/Kconfig.preempt
@@ -63,3 +63,12 @@ config PREEMPT_BKL
 	  Say Y here if you are building a kernel for a desktop system.
 	  Say N if you are unsure.
 
+config SCHED_FAIR
+	bool "Completely Fair Scheduler"
+	help
+	  This option turns the Linux scheduler into a completely fair
+	  scheduler. User-space workloads will round-robin fairly, and
+	  they have to be prioritized using nice levels.
+
+	  Say N if you are unsure.
+
Index: linux/kernel/sched.c
===================================================================
--- linux.orig/kernel/sched.c
+++ linux/kernel/sched.c
@@ -4040,6 +4040,10 @@ static inline struct task_struct *find_p
 	return pid ? find_task_by_pid(pid) : current;
 }
 
+#ifdef CONFIG_SCHED_FAIR
+unsigned int sched_fair = 1;
+#endif
+
 /* Actually do priority change: must hold rq lock. */
 static void __setscheduler(struct task_struct *p, int policy, int prio)
 {
@@ -4055,6 +4059,10 @@ static void __setscheduler(struct task_s
 	 */
 	if (policy == SCHED_BATCH)
 		p->sleep_avg = 0;
+#ifdef CONFIG_SCHED_FAIR
+	if (policy == SCHED_NORMAL && sched_fair)
+		p->sleep_avg = 0;
+#endif
 	set_load_weight(p);
 }
 
Index: linux/kernel/sysctl.c
===================================================================
--- linux.orig/kernel/sysctl.c
+++ linux/kernel/sysctl.c
@@ -205,6 +205,16 @@ static ctl_table root_table[] = {
 };
 
 static ctl_table kern_table[] = {
+#ifdef CONFIG_SCHED_FAIR
+	{
+		.ctl_name	= CTL_UNNUMBERED,
+		.procname	= "sched_fair",
+		.data		= &sched_fair,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+#endif
 	{
 		.ctl_name	= KERN_PANIC,
 		.procname	= "panic",
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
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)
[patch] CFS scheduler: Completely Fair Scheduler / CONFIG_SC..., Ingo Molnar, (Sat Mar 17, 5:42 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)