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:
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 MIN_TIMESLICE max(5 * HZ / 1000, 1)
|
||||||
#define DEF_TIMESLICE (100 * HZ / 1000)
|
#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
|
#ifdef CONFIG_SMP
|
||||||
/*
|
/*
|
||||||
@@ -206,18 +125,22 @@ static inline void sg_inc_cpu_power(struct sched_group *sg, u32 val)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
#define SCALE_PRIO(x, prio) \
|
||||||
* task_timeslice() scales user-nice values [ -20 ... 0 ... 19 ]
|
max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO / 2), MIN_TIMESLICE)
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
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)
|
static inline int rt_policy(int policy)
|
||||||
|
Reference in New Issue
Block a user