diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2022-06-21 16:59:49 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2022-06-21 16:59:49 +0300 |
commit | 37946731110246b89607b85b391f32b0f390524e (patch) | |
tree | 49f41e64745aa799b77ae1bfa75e581c3d4997cd /mysys/my_lockmem.c | |
parent | 2e43af69e3e34019374b8d49f2599ec22a8095fe (diff) | |
download | mariadb-git-37946731110246b89607b85b391f32b0f390524e.tar.gz |
MDEV-28836: Memory alignment cleanup
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
Diffstat (limited to 'mysys/my_lockmem.c')
-rw-r--r-- | mysys/my_lockmem.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/mysys/my_lockmem.c b/mysys/my_lockmem.c index e159502a278..732aef1fdac 100644 --- a/mysys/my_lockmem.c +++ b/mysys/my_lockmem.c @@ -1,4 +1,5 @@ /* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2022, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,6 +18,7 @@ #include "mysys_priv.h" #include "mysys_err.h" +#include "aligned.h" #include <my_list.h> #ifdef HAVE_MLOCK @@ -39,7 +41,7 @@ uchar *my_malloc_lock(uint size,myf MyFlags) DBUG_ENTER("my_malloc_lock"); size=((size-1) & ~(pagesize-1))+pagesize; - if (!(ptr=memalign(pagesize,size))) + if (!(ptr=aligned_malloc(size,pagesize))) { if (MyFlags & (MY_FAE+MY_WME)) my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_FATAL), size); @@ -91,7 +93,7 @@ void my_free_lock(uchar *ptr) } mysql_mutex_unlock(&THR_LOCK_malloc); my_free(element); - free(ptr); /* Free even if not locked */ + aligned_free(ptr); /* Free even if not locked */ } #endif /* HAVE_MLOCK */ |