[PATCH] sched: make task_noninteractive use sleep_type
Alterations to the pipe code in the kernel made it possible for relative starvation to occur with tasks that slept waiting on a pipe getting unfair priority bonuses even if they were otherwise fully cpu bound so the TASK_NONINTERACTIVE flag was introduced which prevented any change to sleep_avg while sleeping waiting on a pipe. This change also leads to the converse though, preventing any priority boost from occurring in truly interactive tasks that wait on pipes. Convert the TASK_NONINTERACTIVE flag to set sleep_type to SLEEP_NONINTERACTIVE which will allow a linear bonus to priority based on sleep time thus allowing interactive tasks to get high priority if they sleep enough. Signed-off-by: Con Kolivas <kernel@kolivas.org> Acked-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
3dee386e14
commit
e7c38cb49c
|
@ -1273,18 +1273,18 @@ out_activate:
|
|||
* sleep_avg beyond just interactive state.
|
||||
*/
|
||||
p->sleep_type = SLEEP_NONINTERACTIVE;
|
||||
}
|
||||
} else
|
||||
|
||||
/*
|
||||
* Tasks that have marked their sleep as noninteractive get
|
||||
* woken up without updating their sleep average. (i.e. their
|
||||
* sleep is handled in a priority-neutral manner, no priority
|
||||
* boost and no penalty.)
|
||||
* woken up with their sleep average not weighted in an
|
||||
* interactive way.
|
||||
*/
|
||||
if (old_state & TASK_NONINTERACTIVE)
|
||||
__activate_task(p, rq);
|
||||
else
|
||||
activate_task(p, rq, cpu == this_cpu);
|
||||
if (old_state & TASK_NONINTERACTIVE)
|
||||
p->sleep_type = SLEEP_NONINTERACTIVE;
|
||||
|
||||
|
||||
activate_task(p, rq, cpu == this_cpu);
|
||||
/*
|
||||
* Sync wakeups (i.e. those types of wakeups where the waker
|
||||
* has indicated that it will leave the CPU in short order)
|
||||
|
|
Loading…
Reference in New Issue