• Matt Stancliff's avatar
    Allow atomic memory count update with C11 builtins · 27e30e2f
    Matt Stancliff authored
    From mailing list post https://groups.google.com/forum/#!topic/redis-db/QLjiQe4D7LA
    
    In zmalloc.c the following primitives are currently used
    to synchronize access to single global variable:
    __sync_add_and_fetch
    __sync_sub_and_fetch
    
    In some architectures such as powerpc these primitives are overhead
    intensive. More efficient C11 __atomic builtins are available with
    newer GCC versions, see
    http://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/_005f_005fatomic-Builtins.html#_005f_005fatomic-Builtins
    
    By substituting the following  __atomic… builtins:
    __atomic_add_fetch
    __atomic_sub_fetch
    
    the performance improvement on certain architectures such as powerpc can be significant,
    around 10% to 15%, over the implementation using __sync builtins while there is only slight uptick on
    Intel architectures because it was already enforcing Intel Strongly ordered memory semantics.
    
    The selection of __atomic built-ins can be predicated on the definition of ATOMIC_RELAXED
    which Is available on in gcc 4.8.2 and later versions.
    27e30e2f
zmalloc.c 10.1 KB