diff options
| author | Ingo Molnar <mingo@elte.hu> | 2007-07-09 12:52:00 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2007-07-09 12:52:00 -0400 |
| commit | 634fa8c97cc8f4ee2ae1dea7200ff0df762405e7 (patch) | |
| tree | 1133c527fb93d2c81924fb1c1b82fd9913a73fc9 | |
| parent | dff06c157b6089b774514337769a3c1b7ccccf6c (diff) | |
sched: remove interactivity types
remove now unused interactivity-heuristics related defined and
types of the old scheduler.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
| -rw-r--r-- | kernel/sched.c | 101 |
1 files changed, 12 insertions, 89 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 7ce959e0b69a..886531c681c1 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
| @@ -103,87 +103,6 @@ unsigned long long __attribute__((weak)) sched_clock(void) | |||
| 103 | */ | 103 | */ |
| 104 | #define MIN_TIMESLICE max(5 * HZ / 1000, 1) | 104 | #define MIN_TIMESLICE max(5 * HZ / 1000, 1) |
| 105 | #define DEF_TIMESLICE (100 * HZ / 1000) | 105 | #define DEF_TIMESLICE (100 * HZ / 1000) |
| 106 | #define ON_RUNQUEUE_WEIGHT 30 | ||
| 107 | #define CHILD_PENALTY 95 | ||
| 108 | #define PARENT_PENALTY 100 | ||
| 109 | #define EXIT_WEIGHT 3 | ||
| 110 | #define PRIO_BONUS_RATIO 25 | ||
| 111 | #define MAX_BONUS (MAX_USER_PRIO * PRIO_BONUS_RATIO / 100) | ||
| 112 | #define INTERACTIVE_DELTA 2 | ||
| 113 | #define MAX_SLEEP_AVG (DEF_TIMESLICE * MAX_BONUS) | ||
| 114 | #define STARVATION_LIMIT (MAX_SLEEP_AVG) | ||
| 115 | #define NS_MAX_SLEEP_AVG (JIFFIES_TO_NS(MAX_SLEEP_AVG)) | ||
| 116 | |||
| 117 | /* | ||
| 118 | * If a task is 'interactive' then we reinsert it in the active | ||
| 119 | * array after it has expired its current timeslice. (it will not | ||
| 120 | * continue to run immediately, it will still roundrobin with | ||
| 121 | * other interactive tasks.) | ||
| 122 | * | ||
| 123 | * This part scales the interactivity limit depending on niceness. | ||
| 124 | * | ||
| 125 | * We scale it linearly, offset by the INTERACTIVE_DELTA delta. | ||
| 126 | * Here are a few examples of different nice levels: | ||
| 127 | * | ||
| 128 | * TASK_INTERACTIVE(-20): [1,1,1,1,1,1,1,1,1,0,0] | ||
| 129 | * TASK_INTERACTIVE(-10): [1,1,1,1,1,1,1,0,0,0,0] | ||
| 130 | * TASK_INTERACTIVE( 0): [1,1,1,1,0,0,0,0,0,0,0] | ||
| 131 | * TASK_INTERACTIVE( 10): [1,1,0,0,0,0,0,0,0,0,0] | ||
| 132 | * TASK_INTERACTIVE( 19): [0,0,0,0,0,0,0,0,0,0,0] | ||
| 133 | * | ||
| 134 | * (the X axis represents the possible -5 ... 0 ... +5 dynamic | ||
| 135 | * priority range a task can explore, a value of '1' means the | ||
| 136 | * task is rated interactive.) | ||
| 137 | * | ||
| 138 | * Ie. nice +19 tasks can never get 'interactive' enough to be | ||
| 139 | * reinserted into the active array. And only heavily CPU-hog nice -20 | ||
| 140 | * tasks will be expired. Default nice 0 tasks are somewhere between, | ||
| 141 | * it takes some effort for them to get interactive, but it's not | ||
| 142 | * too hard. | ||
| 143 | */ | ||
| 144 | |||
| 145 | #define CURRENT_BONUS(p) \ | ||
| 146 | (NS_TO_JIFFIES((p)->sleep_avg) * MAX_BONUS / \ | ||
| 147 | MAX_SLEEP_AVG) | ||
| 148 | |||
| 149 | #define GRANULARITY (10 * HZ / 1000 ? : 1) | ||
| 150 | |||
| 151 | #ifdef CONFIG_SMP | ||
| 152 | #define TIMESLICE_GRANULARITY(p) (GRANULARITY * \ | ||
| 153 | (1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1)) * \ | ||
| 154 | num_online_cpus()) | ||
| 155 | #else | ||
| 156 | #define TIMESLICE_GRANULARITY(p) (GRANULARITY * \ | ||
| 157 | (1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1))) | ||
| 158 | #endif | ||
| 159 | |||
| 160 | #define SCALE(v1,v1_max,v2_max) \ | ||
| 161 | (v1) * (v2_max) / (v1_max) | ||
| 162 | |||
| 163 | #define DELTA(p) \ | ||
| 164 | (SCALE(TASK_NICE(p) + 20, 40, MAX_BONUS) - 20 * MAX_BONUS / 40 + \ | ||
| 165 | INTERACTIVE_DELTA) | ||
| 166 | |||
| 167 | #define TASK_INTERACTIVE(p) \ | ||
| 168 | ((p)->prio <= (p)->static_prio - DELTA(p)) | ||
| 169 | |||
| 170 | #define INTERACTIVE_SLEEP(p) \ | ||
| 171 | (JIFFIES_TO_NS(MAX_SLEEP_AVG * \ | ||
| 172 | (MAX_BONUS / 2 + DELTA((p)) + 1) / MAX_BONUS - 1)) | ||
| 173 | |||
| 174 | #define TASK_PREEMPTS_CURR(p, rq) \ | ||
| 175 | ((p)->prio < (rq)->curr->prio) | ||
| 176 | |||
| 177 | #define SCALE_PRIO(x, prio) \ | ||
| 178 | max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO / 2), MIN_TIMESLICE) | ||
| 179 | |||
| 180 | static unsigned int static_prio_timeslice(int static_prio) | ||
| 181 | { | ||
| 182 | if (static_prio < NICE_TO_PRIO(0)) | ||
| 183 | return SCALE_PRIO(DEF_TIMESLICE * 4, static_prio); | ||
| 184 | else | ||
| 185 | return SCALE_PRIO(DEF_TIMESLICE, static_prio); | ||
| 186 | } | ||
| 187 | 106 | ||
| 188 | #ifdef CONFIG_SMP | 107 | #ifdef CONFIG_SMP |
| 189 | /* | 108 | /* |
| @@ -206,18 +125,22 @@ static inline void sg_inc_cpu_power(struct sched_group *sg, u32 val) | |||
| 206 | } | 125 | } |
| 207 | #endif | 126 | #endif |
| 208 | 127 | ||
| 128 | #define SCALE_PRIO(x, prio) \ | ||
| 129 | max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO / 2), MIN_TIMESLICE) | ||
| 130 | |||
| 209 | /* | 131 | /* |
| 210 | * task_timeslice() scales user-nice values [ -20 ... 0 ... 19 ] | 132 | * static_prio_timeslice() scales user-nice values [ -20 ... 0 ... 19 ] |
| 211 | * to time slice values: [800ms ... 100ms ... 5ms] | 133 | * to time slice values: [800ms ... 100ms ... 5ms] |
| 212 | * | ||
| 213 | * The higher a thread's priority, the bigger timeslices | ||
| 214 | * it gets during one round of execution. But even the lowest | ||
| 215 | * priority thread gets MIN_TIMESLICE worth of execution time. | ||
| 216 | */ | 134 | */ |
| 217 | 135 | static unsigned int static_prio_timeslice(int static_prio) | |
| 218 | static inline unsigned int task_timeslice(struct task_struct *p) | ||
| 219 | { | 136 | { |
| 220 | return static_prio_timeslice(p->static_prio); | 137 | if (static_prio == NICE_TO_PRIO(19)) |
| 138 | return 1; | ||
| 139 | |||
| 140 | if (static_prio < NICE_TO_PRIO(0)) | ||
| 141 | return SCALE_PRIO(DEF_TIMESLICE * 4, static_prio); | ||
| 142 | else | ||
| 143 | return SCALE_PRIO(DEF_TIMESLICE, static_prio); | ||
| 221 | } | 144 | } |
| 222 | 145 | ||
| 223 | static inline int rt_policy(int policy) | 146 | static inline int rt_policy(int policy) |
