summaryrefslogtreecommitdiff
path: root/mysys/my_lockmem.c
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2022-06-21 16:59:49 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2022-06-21 16:59:49 +0300
commit37946731110246b89607b85b391f32b0f390524e (patch)
tree49f41e64745aa799b77ae1bfa75e581c3d4997cd /mysys/my_lockmem.c
parent2e43af69e3e34019374b8d49f2599ec22a8095fe (diff)
downloadmariadb-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.c6
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 */