: O(1) 2.5.3-pre5 J7 Tuneable Parameters
Subsystems (2)
PATCH 1/1 : O(1) 2.5.3-pre5 J7 Tuneable Parameters
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,
Signature · 4 lines
Jack F. Vogel IBM Linux Solutions [email protected] (work) [email protected] (home)
include/linux/sched.h +29 -11
@@ -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))
include/linux/sysctl.h +18 -1
@@ -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 {
kernel/sched.c +16 -0
@@ -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 {
kernel/sysctl.c +31 -0
@@ -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 } };