lkml.org 
[lkml]   [2006]   [Apr]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[patch][rfc] quell interactive feeding frenzy
    From
    Date
    Greetings,

    Problem: Wake-up -> cpu latency increases with the number of runnable
    tasks, ergo adding this latency to sleep_avg becomes increasingly potent
    as nr_running increases. This turns into a very nasty problem with as
    few as 10 httpd tasks doing round robin scheduling. The result is that
    you can only login with difficulty, and interactivity is nonexistent.

    Solution: Restrict the amount of boost a task can receive from this
    mechanism, and disable the mechanism entirely when load is high. As
    always, there is a price for increasing fairness. In this case, the
    price seems worth it. It bought me a usable 2.6 apache server.


    Signed-off-by: Mike Galbraith <efault@gmx.de>

    --- linux-2.6.17-rc1/kernel/sched.c.org 2006-04-07 08:52:47.000000000 +0200
    +++ linux-2.6.17-rc1/kernel/sched.c 2006-04-07 08:57:34.000000000 +0200
    @@ -3012,14 +3012,20 @@ go_idle:
    queue = array->queue + idx;
    next = list_entry(queue->next, task_t, run_list);

    - if (!rt_task(next) && interactive_sleep(next->sleep_type)) {
    + if (!rt_task(next) && interactive_sleep(next->sleep_type) &&
    + rq->nr_running < 1 + MAX_BONUS - CURRENT_BONUS(next)) {
    unsigned long long delta = now - next->timestamp;
    + unsigned long max_delta;
    if (unlikely((long long)(now - next->timestamp) < 0))
    delta = 0;

    if (next->sleep_type == SLEEP_INTERACTIVE)
    delta = delta * (ON_RUNQUEUE_WEIGHT * 128 / 100) / 128;

    + max_delta = (1 + MAX_BONUS - CURRENT_BONUS(next)) * GRANULARITY;
    + max_delta = JIFFIES_TO_NS(max_delta);
    + if (delta > max_delta)
    + delta = max_delta;
    array = next->array;
    new_prio = recalc_task_prio(next, next->timestamp + delta);


    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-04-07 11:40    [W:0.021 / U:119.556 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site