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>
This commit is contained in:
parent
dff06c157b
commit
634fa8c97c
105
kernel/sched.c
105
kernel/sched.c
|
@ -103,87 +103,6 @@ unsigned long long __attribute__((weak)) sched_clock(void)
|
|||
*/
|
||||
#define MIN_TIMESLICE max(5 * HZ / 1000, 1)
|
||||
#define DEF_TIMESLICE (100 * HZ / 1000)
|
||||
#define ON_RUNQUEUE_WEIGHT 30
|
||||
#define CHILD_PENALTY 95
|
||||
#define PARENT_PENALTY 100
|
||||
#define EXIT_WEIGHT 3
|
||||
#define PRIO_BONUS_RATIO 25
|
||||
#define MAX_BONUS (MAX_USER_PRIO * PRIO_BONUS_RATIO / 100)
|
||||
#define INTERACTIVE_DELTA 2
|
||||
#define MAX_SLEEP_AVG (DEF_TIMESLICE * MAX_BONUS)
|
||||
#define STARVATION_LIMIT (MAX_SLEEP_AVG)
|
||||
#define NS_MAX_SLEEP_AVG (JIFFIES_TO_NS(MAX_SLEEP_AVG))
|
||||
|
||||
/*
|
||||
* If a task is 'interactive' then we reinsert it in the active
|
||||
* array after it has expired its current timeslice. (it will not
|
||||
* continue to run immediately, it will still roundrobin with
|
||||
* other interactive tasks.)
|
||||
*
|
||||
* This part scales the interactivity limit depending on niceness.
|
||||
*
|
||||
* We scale it linearly, offset by the INTERACTIVE_DELTA delta.
|
||||
* Here are a few examples of different nice levels:
|
||||
*
|
||||
* TASK_INTERACTIVE(-20): [1,1,1,1,1,1,1,1,1,0,0]
|
||||
* TASK_INTERACTIVE(-10): [1,1,1,1,1,1,1,0,0,0,0]
|
||||
* TASK_INTERACTIVE( 0): [1,1,1,1,0,0,0,0,0,0,0]
|
||||
* TASK_INTERACTIVE( 10): [1,1,0,0,0,0,0,0,0,0,0]
|
||||
* TASK_INTERACTIVE( 19): [0,0,0,0,0,0,0,0,0,0,0]
|
||||
*
|
||||
* (the X axis represents the possible -5 ... 0 ... +5 dynamic
|
||||
* priority range a task can explore, a value of '1' means the
|
||||
* task is rated interactive.)
|
||||
*
|
||||
* Ie. nice +19 tasks can never get 'interactive' enough to be
|
||||
* reinserted into the active array. And only heavily CPU-hog nice -20
|
||||
* tasks will be expired. Default nice 0 tasks are somewhere between,
|
||||
* it takes some effort for them to get interactive, but it's not
|
||||
* too hard.
|
||||
*/
|
||||
|
||||
#define CURRENT_BONUS(p) \
|
||||
(NS_TO_JIFFIES((p)->sleep_avg) * MAX_BONUS / \
|
||||
MAX_SLEEP_AVG)
|
||||
|
||||
#define GRANULARITY (10 * HZ / 1000 ? : 1)
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#define TIMESLICE_GRANULARITY(p) (GRANULARITY * \
|
||||
(1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1)) * \
|
||||
num_online_cpus())
|
||||
#else
|
||||
#define TIMESLICE_GRANULARITY(p) (GRANULARITY * \
|
||||
(1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1)))
|
||||
#endif
|
||||
|
||||
#define SCALE(v1,v1_max,v2_max) \
|
||||
(v1) * (v2_max) / (v1_max)
|
||||
|
||||
#define DELTA(p) \
|
||||
(SCALE(TASK_NICE(p) + 20, 40, MAX_BONUS) - 20 * MAX_BONUS / 40 + \
|
||||
INTERACTIVE_DELTA)
|
||||
|
||||
#define TASK_INTERACTIVE(p) \
|
||||
((p)->prio <= (p)->static_prio - DELTA(p))
|
||||
|
||||
#define INTERACTIVE_SLEEP(p) \
|
||||
(JIFFIES_TO_NS(MAX_SLEEP_AVG * \
|
||||
(MAX_BONUS / 2 + DELTA((p)) + 1) / MAX_BONUS - 1))
|
||||
|
||||
#define TASK_PREEMPTS_CURR(p, rq) \
|
||||
((p)->prio < (rq)->curr->prio)
|
||||
|
||||
#define SCALE_PRIO(x, prio) \
|
||||
max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO / 2), MIN_TIMESLICE)
|
||||
|
||||
static unsigned int static_prio_timeslice(int static_prio)
|
||||
{
|
||||
if (static_prio < NICE_TO_PRIO(0))
|
||||
return SCALE_PRIO(DEF_TIMESLICE * 4, static_prio);
|
||||
else
|
||||
return SCALE_PRIO(DEF_TIMESLICE, static_prio);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
/*
|
||||
|
@ -206,18 +125,22 @@ static inline void sg_inc_cpu_power(struct sched_group *sg, u32 val)
|
|||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* task_timeslice() scales user-nice values [ -20 ... 0 ... 19 ]
|
||||
* to time slice values: [800ms ... 100ms ... 5ms]
|
||||
*
|
||||
* The higher a thread's priority, the bigger timeslices
|
||||
* it gets during one round of execution. But even the lowest
|
||||
* priority thread gets MIN_TIMESLICE worth of execution time.
|
||||
*/
|
||||
#define SCALE_PRIO(x, prio) \
|
||||
max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO / 2), MIN_TIMESLICE)
|
||||
|
||||
static inline unsigned int task_timeslice(struct task_struct *p)
|
||||
/*
|
||||
* static_prio_timeslice() scales user-nice values [ -20 ... 0 ... 19 ]
|
||||
* to time slice values: [800ms ... 100ms ... 5ms]
|
||||
*/
|
||||
static unsigned int static_prio_timeslice(int static_prio)
|
||||
{
|
||||
return static_prio_timeslice(p->static_prio);
|
||||
if (static_prio == NICE_TO_PRIO(19))
|
||||
return 1;
|
||||
|
||||
if (static_prio < NICE_TO_PRIO(0))
|
||||
return SCALE_PRIO(DEF_TIMESLICE * 4, static_prio);
|
||||
else
|
||||
return SCALE_PRIO(DEF_TIMESLICE, static_prio);
|
||||
}
|
||||
|
||||
static inline int rt_policy(int policy)
|
||||
|
|
Loading…
Reference in New Issue