We watch for tasks that sleep extended periods and don't allow one single prolonged sleep period from elevating priority to maximum bonus to prevent cpu bound tasks from getting high priority with single long sleeps. There is a bug in the current code that also penalises tasks that already have high priority. Correct that bug. Signed-off-by: Con Kolivas <[email protected]> kernel/sched.c | 15 ++++++++++----- 1 files changed, 10 insertions(+), 5 deletions(-) Index: linux-2.6.15/kernel/sched.c =================================================================== --- linux-2.6.15.orig/kernel/sched.c +++ linux-2.6.15/kernel/sched.c @@ -747,14 +747,19 @@ static int recalc_task_prio(task_t *p, u if (likely(sleep_time > 0)) { /* * User tasks that sleep a long time are categorised as - * idle and will get just interactive status to stay active & - * prevent them suddenly becoming cpu hogs and starving - * other processes. + * idle. They will only have their sleep_avg increased to a + * level that makes them just interactive priority to stay + * active yet prevent them suddenly becoming cpu hogs and + * starving other processes. */ if (p->mm && p->sleep_type != SLEEP_NONINTERACTIVE && sleep_time > INTERACTIVE_SLEEP(p)) { - p->sleep_avg = JIFFIES_TO_NS(MAX_SLEEP_AVG - - DEF_TIMESLICE); + unsigned long ceiling; + + ceiling = JIFFIES_TO_NS(MAX_SLEEP_AVG - + DEF_TIMESLICE); + if (p->sleep_avg < ceiling) + p->sleep_avg = ceiling; } else { /*
Attachment:
pgpRtyPGLzmOT.pgp
Description: PGP signature
- Prev by Date: [PATCH 1/5] sched-cleanup_task_activated.patch
- Next by Date: [PATCH 5/5] sched-include_noninteractive_sleep_in_idle_detect.patch
- Previous by thread: [PATCH 1/5] sched-cleanup_task_activated.patch
- Next by thread: [PATCH 5/5] sched-include_noninteractive_sleep_in_idle_detect.patch
- Index(es):