• John Hawkes's avatar
    [PATCH] sched: improved load_balance() tolerance for pinned tasks · 83e2ae7f
    John Hawkes authored
    A large number of processes that are pinned to a single CPU results in
    every other CPU's load_balance() seeing this overloaded CPU as "busiest",
    yet move_tasks() never finds a task to pull-migrate.  This condition occurs
    during module unload, but can also occur as a denial-of-service using
    sys_sched_setaffinity().  Several hundred CPUs performing this fruitless
    load_balance() will livelock on the busiest CPU's runqueue lock.  A smaller
    number of CPUs will livelock if the pinned task count gets high.  This
    simple patch remedies the more common first problem: after a move_tasks()
    failure to migrate anything, the balance_interval increments.  Using a
    simple increment, vs.  the more dramatic doubling of the balance_interval,
    is conservative and yet also effective.
    Signed-off-by: default avatarJohn Hawkes <hawkes@sgi.com>
    Acked-by: default avatarIngo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    83e2ae7f
sched.c 113 KB