public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH]: O(1) 2.5.3-pre5  J7 Tuneable Parameters
@ 2002-01-26  7:22 Jack F. Vogel
  0 siblings, 0 replies; only message in thread
From: Jack F. Vogel @ 2002-01-26  7:22 UTC (permalink / raw)
  To: Ingo Molnar, jfv; +Cc: linux-kernel, jstultz

[-- Attachment #1: Type: text/plain, Size: 545 bytes --]

This is the 2.5.3-pre 5 version of the O(1) J7 runtime parameters patch. It 
should be applied over Ingo's J7 patch. With it, his compile time options
are brought out into /proc/sys/sched for runtime manipulation.

The perfomance hit by doing this is nearly in the noise, so it provides a 
handy means of perfomance analysis and tuning for both the developer
as well as a performance conscious sysadmin type.

In anything like this, use with care.

Cheers,

-- 
Jack F. Vogel
IBM  Linux Solutions
jfv@us.ibm.com  (work)
jfv@Bluesong.NET (home)


[-- Attachment #2: schedtune-2.5.3-J7 --]
[-- Type: text/x-diff, Size: 5978 bytes --]

diff -Naur linux/include/linux/sched.h linux.jfv/include/linux/sched.h
--- linux/include/linux/sched.h	Fri Jan 25 17:20:12 2002
+++ linux.jfv/include/linux/sched.h	Fri Jan 25 16:59:40 2002
@@ -422,17 +422,35 @@
  *
  * These are the 'tuning knobs' of the scheduler:
  */
-#define MIN_TIMESLICE		( 10 * HZ / 1000)
-#define MAX_TIMESLICE		(300 * HZ / 1000)
-#define CHILD_FORK_PENALTY	95
-#define PARENT_FORK_PENALTY	100
-#define EXIT_WEIGHT		3
-#define PRIO_INTERACTIVE_RATIO	20
-#define PRIO_CPU_HOG_RATIO	60
-#define PRIO_BONUS_RATIO	70
-#define INTERACTIVE_DELTA	3
-#define MAX_SLEEP_AVG		(2*HZ)
-#define STARVATION_LIMIT	(2*HZ)
+#define DEFAULT_MIN_TIMESLICE           ( 10 * HZ / 1000)
+#define DEFAULT_MAX_TIMESLICE           (300 * HZ / 1000)
+#define DEFAULT_CHILD_FORK_PENALTY      95
+#define DEFAULT_PARENT_FORK_PENALTY     100
+#define DEFAULT_EXIT_WEIGHT             3
+#define DEFAULT_PRIO_INTERACTIVE_RATIO  20
+#define DEFAULT_PRIO_CPU_HOG_RATIO      60
+#define DEFAULT_PRIO_BONUS_RATIO        70
+#define DEFAULT_INTERACTIVE_DELTA       3
+#define DEFAULT_MAX_SLEEP_AVG           (2*HZ)
+#define DEFAULT_STARVATION_LIMIT        (2*HZ)
+
+extern int min_timeslice, max_timeslice, child_fork_penalty;
+extern int parent_fork_penalty, prio_cpu_hog_ratio, prio_bonus_ratio;
+extern int exit_weight, prio_bonus_ratio, interactive_delta;
+extern int max_sleep_avg, starvation_limit;
+
+#define MIN_TIMESLICE           (min_timeslice)
+#define MAX_TIMESLICE           (max_timeslice)
+#define CHILD_FORK_PENALTY      (child_fork_penalty)
+#define PARENT_FORK_PENALTY     (parent_fork_penalty)
+#define PRIO_INTERACTIVE_RATIO  (prio_interactive_ratio)
+#define PRIO_CPU_HOG_RATIO      (prio_cpu_hog_ratio)
+#define PRIO_BONUS_RATIO        (prio_bonus_ratio)
+#define INTERACTIVE_DELTA       (interactive_delta)
+#define EXIT_WEIGHT             (exit_weight)
+#define MAX_SLEEP_AVG           (max_sleep_avg)
+#define STARVATION_LIMIT        (starvation_limit)
+
 
 #define USER_PRIO(p)		((p)-MAX_RT_PRIO)
 #define MAX_USER_PRIO		(USER_PRIO(MAX_PRIO))
diff -Naur linux/include/linux/sysctl.h linux.jfv/include/linux/sysctl.h
--- linux/include/linux/sysctl.h	Mon Jan 14 13:27:06 2002
+++ linux.jfv/include/linux/sysctl.h	Fri Jan 25 17:02:43 2002
@@ -63,7 +63,8 @@
 	CTL_DEV=7,		/* Devices */
 	CTL_BUS=8,		/* Busses */
 	CTL_ABI=9,		/* Binary emulation */
-	CTL_CPU=10		/* CPU stuff (speed scaling, etc) */
+	CTL_CPU=10,		/* CPU stuff (speed scaling, etc) */
+	CTL_SCHED=11
 };
 
 /* CTL_BUS names: */
@@ -72,6 +73,22 @@
 	BUS_ISA=1		/* ISA */
 };
 
+/* CTL_SCHED names: */
+enum
+{
+	MAX_SLICE=1,    /* Timeslice scaling */
+	MIN_SLICE=2,
+	CHILD_PENALTY=3,
+	PARENT_PENALTY=4,
+	INT_RATIO=5,
+	HOG_RATIO=6,
+	BONUS_RATIO=7,
+	INT_DELTA=8,
+	EWEIGHT=9,
+	MAX_SLEEP=10,
+	STARVE_LIM=11
+};
+
 /* CTL_KERN names: */
 enum
 {
diff -Naur linux/kernel/sched.c linux.jfv/kernel/sched.c
--- linux/kernel/sched.c	Fri Jan 25 17:20:12 2002
+++ linux.jfv/kernel/sched.c	Fri Jan 25 16:52:03 2002
@@ -22,6 +22,22 @@
 
 #define BITMAP_SIZE ((((MAX_PRIO+7)/8)+sizeof(long)-1)/sizeof(long))
 
+/*
+**      Tuneable scheduler parameters,
+**      brought out in /proc/sys/sched
+*/
+int	max_timeslice = DEFAULT_MAX_TIMESLICE;
+int	min_timeslice = DEFAULT_MIN_TIMESLICE;
+int	child_fork_penalty = DEFAULT_CHILD_FORK_PENALTY;
+int	parent_fork_penalty = DEFAULT_PARENT_FORK_PENALTY;
+int	prio_interactive_ratio = DEFAULT_PRIO_INTERACTIVE_RATIO;
+int	prio_cpu_hog_ratio = DEFAULT_PRIO_CPU_HOG_RATIO;
+int	prio_bonus_ratio = DEFAULT_PRIO_BONUS_RATIO;
+int	interactive_delta = DEFAULT_INTERACTIVE_DELTA;
+int	exit_weight = DEFAULT_EXIT_WEIGHT;
+int	max_sleep_avg = DEFAULT_MAX_SLEEP_AVG;
+int	starvation_limit = DEFAULT_STARVATION_LIMIT;
+
 typedef struct runqueue runqueue_t;
 
 struct prio_array {
diff -Naur linux/kernel/sysctl.c linux.jfv/kernel/sysctl.c
--- linux/kernel/sysctl.c	Sat Dec 29 17:30:07 2001
+++ linux.jfv/kernel/sysctl.c	Fri Jan 25 17:09:14 2002
@@ -51,6 +51,9 @@
 extern int sysrq_enabled;
 extern int core_uses_pid;
 extern int cad_pid;
+extern int child_fork_penalty, parent_fork_penalty, prio_interactive_ratio;
+extern int prio_cpu_hog_ratio, prio_bonus_ratio, interactive_delta;
+extern int exit_weight, max_sleep_avg, starvation_limit;
 
 /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */
 static int maxolduid = 65535;
@@ -110,6 +113,7 @@
 
 static ctl_table kern_table[];
 static ctl_table vm_table[];
+static ctl_table sched_table[];
 #ifdef CONFIG_NET
 extern ctl_table net_table[];
 #endif
@@ -154,6 +158,7 @@
 	{CTL_FS, "fs", NULL, 0, 0555, fs_table},
 	{CTL_DEBUG, "debug", NULL, 0, 0555, debug_table},
         {CTL_DEV, "dev", NULL, 0, 0555, dev_table},
+        {CTL_SCHED, "sched", NULL, 0, 0555, sched_table},
 	{0}
 };
 
@@ -275,6 +280,32 @@
 	{0}
 };
 
+static ctl_table sched_table[] = {
+	{MAX_SLICE, "MAX_TIMESLICE",
+	&max_timeslice, sizeof(int), 0644, NULL, &proc_dointvec},
+	{MIN_SLICE, "MIN_TIMESLICE",
+	&min_timeslice, sizeof(int), 0644, NULL, &proc_dointvec},
+	{CHILD_PENALTY, "CHILD_FORK_PENALTY",
+	&child_fork_penalty, sizeof(int), 0644, NULL, &proc_dointvec},
+	{PARENT_PENALTY, "PARENT_FORK_PENALTY",
+	&parent_fork_penalty, sizeof(int), 0644, NULL, &proc_dointvec},
+	{INT_RATIO, "PRIO_INTERACTIVE_RATIO",
+	&prio_interactive_ratio, sizeof(int), 0644, NULL, &proc_dointvec},
+	{HOG_RATIO, "PRIO_CPU_HOG_RATIO",
+	&prio_cpu_hog_ratio, sizeof(int), 0644, NULL, &proc_dointvec},
+	{BONUS_RATIO, "PRIO_BONUS_RATIO",
+	&prio_bonus_ratio, sizeof(int), 0644, NULL, &proc_dointvec},
+	{INT_DELTA, "INTERACTIVE_DELTA",
+	&interactive_delta, sizeof(int), 0644, NULL, &proc_dointvec},
+	{EWEIGHT, "EXIT_WEIGHT",
+	&exit_weight, sizeof(int), 0644, NULL, &proc_dointvec},
+	{MAX_SLEEP, "MAX_SLEEP_AVG",
+	&max_sleep_avg, sizeof(int), 0644, NULL, &proc_dointvec},
+	{STARVE_LIM, "INTERACTIVE_DELTA",
+	&starvation_limit, sizeof(int), 0644, NULL, &proc_dointvec},
+	{0}
+};
+
 static ctl_table proc_table[] = {
 	{0}
 };

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2002-01-26  7:18 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-01-26  7:22 [PATCH]: O(1) 2.5.3-pre5 J7 Tuneable Parameters Jack F. Vogel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox