Skip to content
  • Anton Blanchard's avatar
    powerpc: Move 64bit heap above 1TB on machines with 1TB segments · 8bbde7a7
    Anton Blanchard authored and Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt committed
    
    
    If we are using 1TB segments and we are allowed to randomise the heap, we can
    put it above 1TB so it is backed by a 1TB segment. Otherwise the heap will be
    in the bottom 1TB which always uses 256MB segments and this may result in a
    performance penalty.
    
    This functionality is disabled when heap randomisation is turned off:
    
    echo 1 > /proc/sys/kernel/randomize_va_space
    
    which may be useful when trying to allocate the maximum amount of 16M or 16G
    pages.
    
    On a microbenchmark that repeatedly touches 32GB of memory with a stride of
    256MB + 4kB (designed to stress 256MB segments while still mapping nicely into
    the L1 cache), we see the improvement:
    
    Force malloc to use heap all the time:
    # export MALLOC_MMAP_MAX_=0 MALLOC_TRIM_THRESHOLD_=-1
    
    Disable heap randomization:
    # echo 1 > /proc/sys/kernel/randomize_va_space
    # time ./test
    12.51s
    
    Enable heap randomization:
    # echo 2 > /proc/sys/kernel/randomize_va_space
    # time ./test
    1.70s
    
    Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    8bbde7a7