• Andrew Morton's avatar
    [PATCH] sched: handle inter-CPU jiffies skew · db05a192
    Andrew Morton authored
    From: Nick Piggin <piggin@cyberone.com.au>
    
    John Hawkes discribed this problem to me:
    
    There *is* a small problem in this area, though, that SuSE avoids.
    "jiffies" gets updated by cpu0.  The other CPUs may, over time, get out of
    sync (and they're initialized on ia64 to start out being out of sync), so
    it's no guarantee that every CPU will wake up from its timer interrupt and
    see a "jiffies" value that is guaranteed to be last_jiffies+1.  Sometimes
    the jiffies value may be unchanged since the last wakeup.  Sometimes the
    jiffies value may have incremented by 2 (or more, especially if cpu0's
    interrupts are disabled for long stretches of time).  So an algoithm that
    says, "I'll call load_balance() only when jiffies is *exactly* N" is going
    to fail on occasion, either by calling load_balance() too often or not
    often enough.  ***
    
    I fixed this by adding a last_balance field to struct sched_domain, and
    working off that.
    db05a192
sched.c 87 KB