• Marko Mäkelä's avatar
    MDEV-28836: Memory alignment cleanup · 37946731
    Marko Mäkelä authored
    Table_cache_instance: Define the structure aligned at
    the CPU cache line, and remove a pad[] data member.
    Krunal Bauskar reported this to improve performance on ARMv8.
    
    aligned_malloc(): Wrapper for the Microsoft _aligned_malloc()
    and the ISO/IEC 9899:2011 <stdlib.h> aligned_alloc().
    Note: The parameters are in the Microsoft order (size, alignment),
    opposite of aligned_alloc(alignment, size).
    Note: The standard defines that size must be an integer multiple
    of alignment. It is enforced by AddressSanitizer but not by GNU libc
    on Linux.
    
    aligned_free(): Wrapper for the Microsoft _aligned_free() and
    the standard free().
    
    HAVE_ALIGNED_ALLOC: A new test. Unfortunately, support for
    aligned_alloc() may still be missing on some platforms.
    We will fall back to posix_memalign() for those cases.
    
    HAVE_MEMALIGN: Remove, along with any use of the nonstandard memalign().
    
    PFS_ALIGNEMENT (sic): Removed; we will use CPU_LEVEL1_DCACHE_LINESIZE.
    
    PFS_ALIGNED: Defined using the C++11 keyword alignas.
    
    buf_pool_t::page_hash_table::create(),
    lock_sys_t::hash_table::create():
    lock_sys_t::hash_table::resize(): Pad the allocation size to an
    integer multiple of the alignment.
    
    Reviewed by: Vladislav Vaintroub
    37946731
pfs_global.h 6.28 KB