• Robert Haas's avatar
    Move buffer I/O and content LWLocks out of the main tranche. · 6150a1b0
    Robert Haas authored
    Move the content lock directly into the BufferDesc, so that locking and
    pinning a buffer touches only one cache line rather than two.  Adjust
    the definition of BufferDesc slightly so that this doesn't make the
    BufferDesc any larger than one cache line (at least on platforms where
    a spinlock is only 1 or 2 bytes).
    
    We can't fit the I/O locks into the BufferDesc and stay within one
    cache line, so move those to a completely separate tranche.  This
    leaves a relatively limited number of LWLocks in the main tranche, so
    increase the padding of those remaining locks to a full cache line,
    rather than allowing adjacent locks to share a cache line, hopefully
    reducing false sharing.
    
    Performance testing shows that these changes make little difference
    on laptop-class machines, but help significantly on larger servers,
    especially those with more than 2 sockets.
    
    Andres Freund, originally based on an earlier patch by Simon Riggs.
    Review and cosmetic adjustments (including heavy rewriting of the
    comments) by me.
    6150a1b0
lwlock.h 8.52 KB