diff -urN oldtree/Documentation/sysctl/kernel.txt newtree/Documentation/sysctl/kernel.txt --- oldtree/Documentation/sysctl/kernel.txt 2006-08-18 15:01:22.000000000 -0400 +++ newtree/Documentation/sysctl/kernel.txt 2006-08-19 08:44:04.000000000 -0400 @@ -18,6 +18,7 @@ show up in /proc/sys/kernel: - acpi_video_flags - acct +- compute - core_pattern - core_uses_pid - ctrl-alt-del @@ -25,6 +26,7 @@ - domainname - hostname - hotplug +- interactive - java-appletviewer [ binfmt_java, obsolete ] - java-interpreter [ binfmt_java, obsolete ] - l2cr [ PPC only ] @@ -84,6 +86,16 @@ ============================================================== +compute: + +This flag controls the long timeslice, delayed preemption mode in the +cpu scheduler suitable for scientific computation applications. It +leads to large latencies so is unsuitable for normal usage. + +Disabled by default. + +============================================================== + core_pattern: core_pattern is used to specify a core dumpfile pattern name. @@ -161,6 +173,15 @@ ============================================================== +interactive: + +This flag controls the allocation of dynamic priorities in the cpu +scheduler. It gives low cpu using tasks high priority for lowest +latencies. Nice value is still observed but stricter cpu proportions +are obeyed if this tunable is disabled. Enabled by default. + +============================================================== + l2cr: (PPC only) This flag controls the L2 cache of G3 processor boards. If diff -urN oldtree/include/linux/sched.h newtree/include/linux/sched.h --- oldtree/include/linux/sched.h 2006-08-18 15:01:22.000000000 -0400 +++ newtree/include/linux/sched.h 2006-08-19 08:47:44.000000000 -0400 @@ -37,6 +37,11 @@ #ifdef __KERNEL__ +#define SCHED_MAX SCHED_BATCH +#define SCHED_RANGE(policy) ((policy) <= SCHED_MAX) +#define SCHED_RT(policy) ((policy) == SCHED_FIFO || \ + (policy) == SCHED_RR) + struct sched_param { int sched_priority; }; @@ -207,6 +212,9 @@ void io_schedule(void); long io_schedule_timeout(long timeout); +#ifdef CONFIG_STAIRCASE +extern int sched_interactive, sched_compute; +#endif extern void cpu_init (void); extern void trap_init(void); @@ -507,8 +515,7 @@ #define rt_prio(prio) unlikely((prio) < MAX_RT_PRIO) #define rt_task(p) rt_prio((p)->prio) #define batch_task(p) (unlikely((p)->policy == SCHED_BATCH)) -#define has_rt_policy(p) \ - unlikely((p)->policy != SCHED_NORMAL && (p)->policy != SCHED_BATCH) +#define has_rt_policy(p) unlikely(SCHED_RT((p)->policy)) /* Must be high prio: stop_machine expects to yield to it. */ #define MIGRATION_THREAD_PRIO (MAX_RT_PRIO-20) diff -urN oldtree/include/linux/sysctl.h newtree/include/linux/sysctl.h --- oldtree/include/linux/sysctl.h 2006-08-18 15:01:22.000000000 -0400 +++ newtree/include/linux/sysctl.h 2006-08-19 08:43:29.000000000 -0400 @@ -153,6 +153,8 @@ KERN_MAX_LOCK_DEPTH=74, KERN_NMI_WATCHDOG=75, /* int: enable/disable nmi watchdog */ KERN_PANIC_ON_NMI=76, /* int: whether we will panic on an unrecovered */ + KERN_INTERACTIVE=77, /* interactive tasks can have cpu bursts */ + KERN_COMPUTE=78, /* adjust timeslices for a compute server */ }; diff -urN oldtree/kernel/sysctl.c newtree/kernel/sysctl.c --- oldtree/kernel/sysctl.c 2006-08-18 15:01:22.000000000 -0400 +++ newtree/kernel/sysctl.c 2006-08-19 08:45:20.000000000 -0400 @@ -685,6 +685,24 @@ .mode = 0444, .proc_handler = &proc_dointvec, }, +#ifdef CONFIG_STAIRCASE + { + .ctl_name = KERN_INTERACTIVE, + .procname = "interactive", + .data = &sched_interactive, + .maxlen = sizeof (int), + .mode = 0644, + .proc_handler = &proc_dointvec, + }, + { + .ctl_name = KERN_COMPUTE, + .procname = "compute", + .data = &sched_compute, + .maxlen = sizeof (int), + .mode = 0644, + .proc_handler = &proc_dointvec, + }, +#endif #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86) { .ctl_name = KERN_UNKNOWN_NMI_PANIC, diff -urN oldtree/sched.c newtree/sched.c --- oldtree/sched.c 1969-12-31 19:00:00.000000000 -0500 +++ newtree/sched.c 2006-08-19 06:58:14.000000000 -0400 @@ -0,0 +1,50 @@ +// This File Does Not Build!!! +// No-Sources NoSched v2.6.18-rc4-no2 +// CPU Scheduler Selection via Kconfig + +/* See the following files for the building scheduler files: */ +- kernel/sched_ingosched.c | Standard scheduler file from mm +- kernel/sched_staircase.c | Staircase scheduler file port for mm + +/* + * kernel/sched_ingosched.c: + * + * Kernel scheduler and related syscalls + * + * Copyright (C) 1991-2002 Linus Torvalds + * + * 1996-12-23 Modified by Dave Grothe to fix bugs in semaphores and + * make semaphores SMP safe + * 1998-11-19 Implemented schedule_timeout() and related stuff + * by Andrea Arcangeli + * 2002-01-04 New ultra-scalable O(1) scheduler by Ingo Molnar: + * hybrid priority-list and round-robin design with + * an array-switch method of distributing timeslices + * and per-CPU runqueues. Cleanups and useful suggestions + * by Davide Libenzi, preemptible kernel bits by Robert Love. + * 2003-09-03 Interactivity tuning by Con Kolivas. + * 2004-04-02 Scheduler domains code by Nick Piggin + */ + +/* + * kernel/sched_staircase.c: + * + * Kernel scheduler and related syscalls + * + * Copyright (C) 1991-2002 Linus Torvalds + * + * 1996-12-23 Modified by Dave Grothe to fix bugs in semaphores and + * make semaphores SMP safe + * 1998-11-19 Implemented schedule_timeout() and related stuff + * by Andrea Arcangeli + * 2002-01-04 New ultra-scalable O(1) scheduler by Ingo Molnar: + * hybrid priority-list and round-robin design with + * an array-switch method of distributing timeslices + * and per-CPU runqueues. Cleanups and useful suggestions + * by Davide Libenzi, preemptible kernel bits by Robert Love. + * 2003-09-03 Interactivity tuning by Con Kolivas. + * 2004-04-02 Scheduler domains code by Nick Piggin + * 2006-07-20 Staircase scheduling policy by Con Kolivas with help + * from William Lee Irwin III, Zwane Mwaikambo & Peter Williams. + * Staircase v16.1 + */