• Rik van Riel's avatar
    ipc,sem: fine grained locking for semtimedop · 6062a8dc
    Rik van Riel authored
    Introduce finer grained locking for semtimedop, to handle the common case
    of a program wanting to manipulate one semaphore from an array with
    multiple semaphores.
    
    If the call is a semop manipulating just one semaphore in an array with
    multiple semaphores, only take the lock for that semaphore itself.
    
    If the call needs to manipulate multiple semaphores, or another caller is
    in a transaction that manipulates multiple semaphores, the sem_array lock
    is taken, as well as all the locks for the individual semaphores.
    
    On a 24 CPU system, performance numbers with the semop-multi
    test with N threads and N semaphores, look like this:
    
    	vanilla		Davidlohr's	Davidlohr's +	Davidlohr's +
    threads			patches		rwlock patches	v3 patches
    10	610652		726325		1783589		2142206
    20	341570		365699		1520453		1977878
    30	288102		307037		1498167		2037995
    40	290714		305955		1612665		2256484
    50	288620		312890		1733453		2650292
    60	289987		306043		1649360		2388008
    70	291298		306347		1723167		2717486
    80	290948		305662		1729545		2763582
    90	290996		306680		1736021		2757524
    100	292243		306700		1773700		3059159
    
    [davidlohr.bueso@hp.com: do not call sem_lock when bogus sma]
    [davidlohr.bueso@hp.com: make refcounter atomic]
    Signed-off-by: default avatarRik van Riel <riel@redhat.com>
    Suggested-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Acked-by: default avatarDavidlohr Bueso <davidlohr.bueso@hp.com>
    Cc: Chegu Vinod <chegu_vinod@hp.com>
    Cc: Jason Low <jason.low2@hp.com>
    Reviewed-by: default avatarMichel Lespinasse <walken@google.com>
    Cc: Peter Hurley <peter@hurleysoftware.com>
    Cc: Stanislav Kinsbursky <skinsbursky@parallels.com>
    Tested-by: default avatarEmmanuel Benisty <benisty.e@gmail.com>
    Tested-by: default avatarSedat Dilek <sedat.dilek@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    6062a8dc
sem.c 46.6 KB