• Andrew Morton's avatar
    [PATCH] sched: fix scheduler for unsynched processor sched_clock · 44069c37
    Andrew Morton authored
    From: Nick Piggin <nickpiggin@yahoo.com.au>
    
    Fine-tune the unsynched sched_clock handling.
    
    Basically, you need to be careful about ensuring timestamps get correctly
    adjusted when moving CPUs, and you *can't* look at your unadjusted
    sched_clock() and a remote task's ->timestamp and try to come up with
    anything meaningful.
    
    I think this second problem will really hit hard in the activate_task path
    on systems with unsynched sched_clock when you're waking up a remote task,
    which happens very often.  Andi, I thought some Opterons have unsynched
    tscs?  Maybe this is causing your unexplained bad interactivity?
    
    Another problem is a fixup in pull_task.  When adjusting ->timestamp from
    one processor to another, you must use timestamp_last_tick for the local
    processor too.  Using sched_clock() will cause ->timestamp to creep
    forward.
    
    A final small fix is for sync wakeups.  They were using __activate_task for
    some reason, thus they don't get credited for sleeping at all AFAIKS.
    
    And another thing, do we want to #ifdef timestamp_last_tick so it doesn't
    show on UP?
    44069c37
sched.c 97.2 KB