• Paul Jackson's avatar
    [PATCH] cpuset: use rcu directly optimization · 6b9c2603
    Paul Jackson authored
    Optimize the cpuset impact on page allocation, the most performance critical
    cpuset hook in the kernel.
    On each page allocation, the cpuset hook needs to check for a possible change
    in the current tasks cpuset.  It can now handle the common case, of no change,
    without taking any spinlock or semaphore, thanks to RCU.
    Convert a spinlock on the current task to an rcu_read_lock(), saving
    approximately a memory barrier and an atomic op, depending on architecture.
    This is done by adding rcu_assign_pointer() and synchronize_rcu() calls to the
    write side of the task->cpuset pointer, in cpuset.c:attach_task(), to delay
    freeing up a detached cpuset until after any critical sections referencing
    that pointer.
    Thanks to Andi Kleen, Nick Piggin and Eric Dumazet for ideas.
    Signed-off-by: default avatarPaul Jackson <pj@sgi.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
cpuset.c 64.1 KB