• Andres Freund's avatar
    Improve LWLock scalability. · ab5194e6
    Andres Freund authored
    The old LWLock implementation had the problem that concurrent lock
    acquisitions required exclusively acquiring a spinlock. Often that
    could lead to acquirers waiting behind the spinlock, even if the
    actual LWLock was free.
    
    The new implementation doesn't acquire the spinlock when acquiring the
    lock itself. Instead the new atomic operations are used to atomically
    manipulate the state. Only the waitqueue, used solely in the slow
    path, is still protected by the spinlock. Check lwlock.c's header for
    an explanation about the used algorithm.
    
    For some common workloads on larger machines this can yield
    significant performance improvements. Particularly in read mostly
    workloads.
    
    Reviewed-By: Amit Kapila and Robert Haas
    Author: Andres Freund
    
    Discussion: 20130926225545.GB26663@awork2.anarazel.de
    ab5194e6
lwlock.h 9.39 KB