Re: [REPORT] cfs-v4 vs sd-0.44

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Con Kolivas <kernel@...>
Cc: Willy Tarreau <w@...>, William Lee Irwin III <wli@...>, <linux-kernel@...>, Linus Torvalds <torvalds@...>, Andrew Morton <akpm@...>, Nick Piggin <npiggin@...>, Mike Galbraith <efault@...>, Arjan van de Ven <arjan@...>, Peter Williams <pwil3058@...>, Thomas Gleixner <tglx@...>, <caglar@...>, Gene Heskett <gene.heskett@...>
Date: Saturday, April 21, 2007 - 12:00 pm

* Con Kolivas <kernel@kolivas.org> wrote:


correct. Note that Willy reniced X back to 0 so it had no relevance on 
his test. Also note that i pointed this change out in the -v4 CFS 
announcement:

|| Changes since -v3:
||
||  - usability fix: automatic renicing of kernel threads such as 
||    keventd, OOM tasks and tasks doing privileged hardware access
||    (such as Xorg).

i've attached it below in a standalone form, feel free to put it into 
SD! :)

	Ingo

---
 arch/i386/kernel/ioport.c   |   13 ++++++++++---
 arch/x86_64/kernel/ioport.c |    8 ++++++--
 drivers/block/loop.c        |    5 ++++-
 include/linux/sched.h       |    7 +++++++
 kernel/sched.c              |   40 ++++++++++++++++++++++++++++++++++++++++
 kernel/workqueue.c          |    2 +-
 mm/oom_kill.c               |    4 +++-
 7 files changed, 71 insertions(+), 8 deletions(-)

Index: linux/arch/i386/kernel/ioport.c
===================================================================
--- linux.orig/arch/i386/kernel/ioport.c
+++ linux/arch/i386/kernel/ioport.c
@@ -64,9 +64,15 @@ asmlinkage long sys_ioperm(unsigned long
 
 	if ((from + num <= from) || (from + num > IO_BITMAP_BITS))
 		return -EINVAL;
-	if (turn_on && !capable(CAP_SYS_RAWIO))
-		return -EPERM;
-
+	if (turn_on) {
+		if (!capable(CAP_SYS_RAWIO))
+			return -EPERM;
+		/*
+		 * Task will be accessing hardware IO ports,
+		 * mark it as special with the scheduler too:
+		 */
+		sched_privileged_task(current);
+	}
 	/*
 	 * If it's the first ioperm() call in this thread's lifetime, set the
 	 * IO bitmap up. ioperm() is much less timing critical than clone(),
@@ -145,6 +151,7 @@ asmlinkage long sys_iopl(unsigned long u
 	if (level > old) {
 		if (!capable(CAP_SYS_RAWIO))
 			return -EPERM;
+		sched_privileged_task(current);
 	}
 	t->iopl = level << 12;
 	regs->eflags = (regs->eflags & ~X86_EFLAGS_IOPL) | t->iopl;
Index: linux/arch/x86_64/kernel/ioport.c
===================================================================
--- linux.orig/arch/x86_64/kernel/ioport.c
+++ linux/arch/x86_64/kernel/ioport.c
@@ -41,8 +41,11 @@ asmlinkage long sys_ioperm(unsigned long
 
 	if ((from + num <= from) || (from + num > IO_BITMAP_BITS))
 		return -EINVAL;
-	if (turn_on && !capable(CAP_SYS_RAWIO))
-		return -EPERM;
+	if (turn_on) {
+		if (!capable(CAP_SYS_RAWIO))
+			return -EPERM;
+		sched_privileged_task(current);
+	}
 
 	/*
 	 * If it's the first ioperm() call in this thread's lifetime, set the
@@ -113,6 +116,7 @@ asmlinkage long sys_iopl(unsigned int le
 	if (level > old) {
 		if (!capable(CAP_SYS_RAWIO))
 			return -EPERM;
+		sched_privileged_task(current);
 	}
 	regs->eflags = (regs->eflags &~ X86_EFLAGS_IOPL) | (level << 12);
 	return 0;
Index: linux/drivers/block/loop.c
===================================================================
--- linux.orig/drivers/block/loop.c
+++ linux/drivers/block/loop.c
@@ -588,7 +588,10 @@ static int loop_thread(void *data)
 	 */
 	current->flags |= PF_NOFREEZE;
 
-	set_user_nice(current, -20);
+	/*
+	 * The loop thread is important enough to be given a boost:
+	 */
+	sched_privileged_task(current);
 
 	while (!kthread_should_stop() || lo->lo_bio) {
 
Index: linux/include/linux/sched.h
===================================================================
--- linux.orig/include/linux/sched.h
+++ linux/include/linux/sched.h
@@ -1256,6 +1256,13 @@ static inline int rt_mutex_getprio(struc
 #endif
 
 extern void set_user_nice(struct task_struct *p, long nice);
+/*
+ * Task has special privileges, give it more CPU power:
+ */
+extern void sched_privileged_task(struct task_struct *p);
+
+extern int sysctl_sched_privileged_nice_level;
+
 extern int task_prio(const struct task_struct *p);
 extern int task_nice(const struct task_struct *p);
 extern int can_nice(const struct task_struct *p, const int nice);
Index: linux/kernel/sched.c
===================================================================
--- linux.orig/kernel/sched.c
+++ linux/kernel/sched.c
@@ -3251,6 +3251,46 @@ out_unlock:
 EXPORT_SYMBOL(set_user_nice);
 
 /*
+ * Nice level for privileged tasks. (can be set to 0 for this
+ * to be turned off)
+ */
+int sysctl_sched_privileged_nice_level __read_mostly = -19;
+
+static int __init privileged_nice_level_setup(char *str)
+{
+	sysctl_sched_privileged_nice_level = simple_strtoul(str, NULL, 0);
+	return 1;
+}
+__setup("privileged_nice_level=", privileged_nice_level_setup);
+
+/*
+ * Tasks with special privileges call this and gain extra nice
+ * levels:
+ */
+void sched_privileged_task(struct task_struct *p)
+{
+	long new_nice = sysctl_sched_privileged_nice_level;
+	long old_nice = TASK_NICE(p);
+
+	if (new_nice >= old_nice)
+		return;
+	/*
+	 * Setting the sysctl to 0 turns off the boosting:
+	 */
+	if (unlikely(!new_nice))
+		return;
+
+	if (new_nice < -20)
+		new_nice = -20;
+	else if (new_nice > 19)
+		new_nice = 19;
+
+	set_user_nice(p, new_nice);
+}
+
+EXPORT_SYMBOL(sched_privileged_task);
+
+/*
  * can_nice - check if a task can reduce its nice value
  * @p: task
  * @nice: nice value
Index: linux/kernel/workqueue.c
===================================================================
--- linux.orig/kernel/workqueue.c
+++ linux/kernel/workqueue.c
@@ -355,7 +355,7 @@ static int worker_thread(void *__cwq)
 	if (!cwq->freezeable)
 		current->flags |= PF_NOFREEZE;
 
-	set_user_nice(current, -5);
+	sched_privileged_task(current);
 
 	/* Block and flush all signals */
 	sigfillset(&blocked);
Index: linux/mm/oom_kill.c
===================================================================
--- linux.orig/mm/oom_kill.c
+++ linux/mm/oom_kill.c
@@ -291,7 +291,9 @@ static void __oom_kill_task(struct task_
 	 * all the memory it needs. That way it should be able to
 	 * exit() and clear out its resources quickly...
 	 */
-	p->time_slice = HZ;
+	if (p->policy == SCHED_NORMAL || p->policy == SCHED_BATCH)
+		sched_privileged_task(p);
+
 	set_tsk_thread_flag(p, TIF_MEMDIE);
 
 	force_sig(SIGKILL, p);
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[patch] CFS scheduler, v4, Ingo Molnar, (Fri Apr 20, 10:04 am)
[patch] CFS scheduler, -v5, Ingo Molnar, (Sun Apr 22, 9:12 pm)
Re: [patch] CFS scheduler, -v5, Christian Hesse, (Tue Apr 24, 12:54 pm)
Re: [patch] CFS scheduler, -v5, Ingo Molnar, (Wed Apr 25, 5:25 am)
Re: [patch] CFS scheduler, -v5, Christian Hesse, (Wed Apr 25, 6:51 am)
Re: [patch] CFS scheduler, -v5, Guillaume Chazarain, (Mon Apr 23, 8:20 am)
Re: [patch] CFS scheduler, -v5, Ingo Molnar, (Mon Apr 23, 8:36 am)
Re: [patch] CFS scheduler, -v5, Markus Trippelsdorf, (Mon Apr 23, 1:16 am)
Re: [patch] CFS scheduler, -v5, Markus Trippelsdorf, (Mon Apr 23, 1:27 am)
Re: [patch] CFS scheduler, -v5, Ingo Molnar, (Mon Apr 23, 2:21 am)
Re: [patch] CFS scheduler, -v5, Srivatsa Vaddagiri, (Wed Apr 25, 7:43 am)
Re: [patch] CFS scheduler, -v5, Ingo Molnar, (Wed Apr 25, 8:51 am)
Re: [patch] CFS scheduler, -v5, Nick Piggin, (Sun Apr 22, 9:25 pm)
Re: [patch] CFS scheduler, -v5, Ingo Molnar, (Sun Apr 22, 10:55 pm)
Re: [patch] CFS scheduler, -v5, Nick Piggin, (Sun Apr 22, 11:22 pm)
Re: [patch] CFS scheduler, -v5, Ingo Molnar, (Sun Apr 22, 11:43 pm)
Re: [patch] CFS scheduler, -v5, Nick Piggin, (Mon Apr 23, 12:06 am)
Re: [patch] CFS scheduler, -v5, Ingo Molnar, (Mon Apr 23, 5:25 am)
Re: [patch] CFS scheduler, -v5, Ingo Molnar, (Mon Apr 23, 3:10 am)
Re: [patch] CFS scheduler, -v5, Nick Piggin, (Mon Apr 23, 3:25 am)
Re: [patch] CFS scheduler, -v5, Ingo Molnar, (Mon Apr 23, 3:35 am)
Re: [patch] CFS scheduler, -v5, Gene Heskett, (Sun Apr 22, 10:39 pm)
Re: [patch] CFS scheduler, -v5, Ingo Molnar, (Sun Apr 22, 11:08 pm)
Re: [patch] CFS scheduler, v4, Michael Gerdau, (Sun Apr 22, 4:30 am)
Re: [patch] CFS scheduler, v4, Ingo Molnar, (Mon Apr 23, 6:47 pm)
Re: [patch] CFS scheduler, v4, S.Çağlar, (Sat Apr 21, 4:35 pm)
[REPORT] cfs-v4 vs sd-0.44, Willy Tarreau, (Sat Apr 21, 8:12 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Con Kolivas, (Sat Apr 21, 9:51 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Con Kolivas, (Sat Apr 21, 11:55 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Sat Apr 21, 12:00 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Jan Engelhardt, (Sat Apr 21, 1:15 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Sat Apr 21, 3:00 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Mark Lord, (Sun Apr 22, 9:18 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Sun Apr 22, 9:27 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Pavel Machek, (Wed Apr 25, 4:16 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Alan Cox, (Wed Apr 25, 6:19 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Wed Apr 25, 4:22 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Mark Lord, (Sun Apr 22, 9:30 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Con Kolivas, (Sat Apr 21, 7:59 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Juliusz Chroboczek, (Sun Apr 22, 9:04 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Linus Torvalds, (Sun Apr 22, 7:24 pm)
[report] renicing X, cfs-v5 vs sd-0.46, Ingo Molnar, (Sun Apr 22, 10:42 pm)
Re: [report] renicing X, cfs-v5 vs sd-0.46, Linus Torvalds, (Mon Apr 23, 11:09 am)
Re: [report] renicing X, cfs-v5 vs sd-0.46, Ingo Molnar, (Mon Apr 23, 3:48 pm)
Re: [report] renicing X, cfs-v5 vs sd-0.46, Michael K. Edwards, (Mon Apr 23, 4:56 pm)
Re: [report] renicing X, cfs-v5 vs sd-0.46, Gene Heskett, (Mon Apr 23, 1:19 pm)
Re: [report] renicing X, cfs-v5 vs sd-0.46, Gene Heskett, (Mon Apr 23, 1:19 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Nick Piggin, (Sun Apr 22, 9:34 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Linus Torvalds, (Mon Apr 23, 11:56 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Mon Apr 23, 3:11 pm)
'Scheduler Economy' prototype patch for CFS, Ingo Molnar, (Tue Apr 24, 5:05 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Willy Tarreau, (Mon Apr 23, 4:05 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Linus Torvalds, (Mon Apr 23, 3:52 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Ray Lee, (Tue Apr 24, 11:08 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Wed Apr 25, 5:32 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Peter Williams, (Mon Apr 23, 11:46 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Arjan van de Ven, (Tue Apr 24, 12:52 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Peter Williams, (Tue Apr 24, 2:21 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Tue Apr 24, 2:36 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Gene Heskett, (Tue Apr 24, 3:00 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Tue Apr 24, 3:08 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Tue Apr 24, 3:33 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Tue Apr 24, 3:25 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Gene Heskett, (Tue Apr 24, 10:42 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Gene Heskett, (Tue Apr 24, 10:39 am)
Re: [REPORT] cfs-v4 vs sd-0.44, David Lang, (Tue Apr 24, 2:45 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Tue Apr 24, 3:24 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Gene Heskett, (Tue Apr 24, 10:38 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Willy Tarreau, (Tue Apr 24, 1:44 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Gene Heskett, (Tue Apr 24, 8:30 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Gene Heskett, (Tue Apr 24, 8:32 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Gene Heskett, (Tue Apr 24, 3:12 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Jeremy Fitzhardinge, (Mon Apr 23, 6:48 pm)
RE: [REPORT] cfs-v4 vs sd-0.44, Li, Tong N, (Mon Apr 23, 8:59 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, William Lee Irwin III, (Tue Apr 24, 5:27 pm)
RE: [REPORT] cfs-v4 vs sd-0.44, Li, Tong N, (Tue Apr 24, 9:22 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Wed Apr 25, 5:44 am)
Re: [REPORT] cfs-v4 vs sd-0.44, William Lee Irwin III, (Wed Apr 25, 7:58 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Willy Tarreau, (Wed Apr 25, 4:13 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Li, Tong N, (Thu Apr 26, 1:57 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, William Lee Irwin III, (Thu Apr 26, 7:26 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Willy Tarreau, (Thu Apr 26, 3:18 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Bernd Eckenfels, (Sat Apr 28, 11:12 am)
Re: [REPORT] cfs-v4 vs sd-0.44, William Lee Irwin III, (Wed Apr 25, 2:05 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Bernd Eckenfels, (Tue Apr 24, 6:18 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Bill Huey, (Mon Apr 23, 9:57 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Li, Tong N, (Tue Apr 24, 2:01 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Mon Apr 23, 4:33 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Rogan Dawes, (Tue Apr 24, 3:04 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Tue Apr 24, 3:31 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Rogan Dawes, (Tue Apr 24, 4:25 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Chris Friesen, (Tue Apr 24, 11:03 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Rogan Dawes, (Tue Apr 24, 11:07 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Wed Apr 25, 5:29 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Peter Williams, (Tue Apr 24, 7:55 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Chris Friesen, (Tue Apr 24, 11:15 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Guillaume Chazarain, (Mon Apr 23, 5:53 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Mon Apr 23, 4:44 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Mon Apr 23, 5:03 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Mark Lord, (Sun Apr 22, 9:23 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Denis Vlasenko, (Sat Apr 21, 6:54 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Con Kolivas, (Sat Apr 21, 8:08 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Mike Galbraith, (Sun Apr 22, 12:58 am)
Re: [REPORT] cfs-v4 vs sd-0.44, William Lee Irwin III, (Sat Apr 21, 12:39 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Willy Tarreau, (Sat Apr 21, 12:12 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Con Kolivas, (Sat Apr 21, 8:40 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Willy Tarreau, (Sat Apr 21, 9:02 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Sat Apr 21, 11:46 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Willy Tarreau, (Sat Apr 21, 12:18 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Linus Torvalds, (Sat Apr 21, 12:34 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Ingo Molnar, (Sat Apr 21, 12:53 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Ulrich Drepper, (Sat Apr 21, 2:09 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Willy Tarreau, (Sat Apr 21, 12:57 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Willy Tarreau, (Sat Apr 21, 12:53 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, William Lee Irwin III, (Sat Apr 21, 12:42 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Kyle Moffett, (Sat Apr 21, 2:55 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Ulrich Drepper, (Sat Apr 21, 3:49 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Linus Torvalds, (Sat Apr 21, 7:35 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Ulrich Drepper, (Sat Apr 21, 9:46 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, William Lee Irwin III, (Sun Apr 22, 3:02 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Ulrich Drepper, (Sun Apr 22, 3:17 am)
Re: [REPORT] cfs-v4 vs sd-0.44, William Lee Irwin III, (Sun Apr 22, 4:48 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Ulrich Drepper, (Sun Apr 22, 12:16 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Rusty Russell, (Sun Apr 22, 8:07 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, William Lee Irwin III, (Sat Apr 21, 7:17 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Geert Bosch, (Sat Apr 21, 1:03 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Gene Heskett, (Sat Apr 21, 2:17 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Con Kolivas, (Sat Apr 21, 9:26 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, Gene Heskett, (Sat Apr 21, 10:07 pm)
Re: [REPORT] cfs-v4 vs sd-0.44, William Lee Irwin III, (Sun Apr 22, 4:07 am)
Re: [REPORT] cfs-v4 vs sd-0.44, Gene Heskett, (Sun Apr 22, 7:11 am)
Re: [patch] CFS scheduler, v4, Gene Heskett, (Fri Apr 20, 5:37 pm)
Re: [patch] CFS scheduler, v4, S.Çağlar, (Sat Apr 21, 4:47 pm)
Re: [patch] CFS scheduler, v4, Gene Heskett, (Sat Apr 21, 9:22 pm)
Re: [patch] CFS scheduler, v4, mdew ., (Fri Apr 20, 5:39 pm)
Re: [patch] CFS scheduler, v4, Ingo Molnar, (Sat Apr 21, 2:47 am)
[patch] CFS scheduler, v4, for v2.6.20.7, Ingo Molnar, (Sat Apr 21, 3:55 am)