lkml.org 
[lkml]   [2006]   [Mar]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectRe: [PATCH] sched: activate SCHED BATCH expired
    Date
    On Saturday 18 March 2006 00:46, Nick Piggin wrote:
    > I guess it isn't doing the cmov because it doesn't want to do the
    > extra load in the common case, which is fair enough (are you compiling
    > for a pentiumpro+, without generic x86 support?

    For pentium4 with no generic support.

    > what about if you
    > turn off optimise for size?)

    Dunno, sleep is taking me...

    > At least other archtectures might be able to make better use of it,
    > and I agree even for i386 the code looks better (and slightly smaller).

    Good enough for me. Here's a respin, thanks!

    Cheers,
    Con
    ---
    To increase the strength of SCHED_BATCH as a scheduling hint we can activate
    batch tasks on the expired array since by definition they are latency
    insensitive tasks.

    Signed-off-by: Con Kolivas <kernel@kolivas.org>

    ---
    include/linux/sched.h | 1 +
    kernel/sched.c | 10 +++++++---
    2 files changed, 8 insertions(+), 3 deletions(-)

    Index: linux-2.6.16-rc6-mm1/include/linux/sched.h
    ===================================================================
    --- linux-2.6.16-rc6-mm1.orig/include/linux/sched.h 2006-03-13 20:12:22.000000000 +1100
    +++ linux-2.6.16-rc6-mm1/include/linux/sched.h 2006-03-17 23:08:31.000000000 +1100
    @@ -485,6 +485,7 @@ struct signal_struct {
    #define MAX_PRIO (MAX_RT_PRIO + 40)

    #define rt_task(p) (unlikely((p)->prio < MAX_RT_PRIO))
    +#define batch_task(p) (unlikely((p)->policy == SCHED_BATCH))

    /*
    * Some day this will be a full-fledged user tracking system..
    Index: linux-2.6.16-rc6-mm1/kernel/sched.c
    ===================================================================
    --- linux-2.6.16-rc6-mm1.orig/kernel/sched.c 2006-03-13 20:12:15.000000000 +1100
    +++ linux-2.6.16-rc6-mm1/kernel/sched.c 2006-03-18 01:05:02.000000000 +1100
    @@ -737,9 +737,13 @@ static inline void dec_nr_running(task_t
    /*
    * __activate_task - move a task to the runqueue.
    */
    -static inline void __activate_task(task_t *p, runqueue_t *rq)
    +static void __activate_task(task_t *p, runqueue_t *rq)
    {
    - enqueue_task(p, rq->active);
    + prio_array_t *target = rq->active;
    +
    + if (batch_task(p))
    + target = rq->expired;
    + enqueue_task(p, target);
    inc_nr_running(p, rq);
    }

    @@ -758,7 +762,7 @@ static int recalc_task_prio(task_t *p, u
    unsigned long long __sleep_time = now - p->timestamp;
    unsigned long sleep_time;

    - if (unlikely(p->policy == SCHED_BATCH))
    + if (batch_task(p))
    sleep_time = 0;
    else {
    if (__sleep_time > NS_MAX_SLEEP_AVG)
    -
    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-03-17 15:13    [W:0.025 / U:30.804 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site