From 65b338ad04e2c1943d039ed6e31f43f0aaa5db4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?kleines=20Filmr=C3=B6llchen?= Date: Fri, 4 Mar 2022 14:57:38 +0100 Subject: [PATCH] AK: Allow alignment to cache line size with CACHE_ALIGNED This is particularly important to avoid false sharing, which thrashes performance when two process-shared atomics are on the same cache line. --- AK/Platform.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/AK/Platform.h b/AK/Platform.h index d69ceba3af..b1534436d5 100644 --- a/AK/Platform.h +++ b/AK/Platform.h @@ -110,3 +110,16 @@ extern "C" { # define CLOCK_MONOTONIC_COARSE CLOCK_MONOTONIC # define CLOCK_REALTIME_COARSE CLOCK_REALTIME #endif + +#ifndef SYSTEM_CACHE_ALIGNMENT_SIZE +# if ARCH(AARCH64) || ARCH(x86_64) +# define SYSTEM_CACHE_ALIGNMENT_SIZE 64 +# else +# define SYSTEM_CACHE_ALIGNMENT_SIZE 128 +# endif +#endif /* SYSTEM_CACHE_ALIGNMENT_SIZE */ + +#ifdef CACHE_ALIGNED +# undef CACHE_ALIGNED +#endif +#define CACHE_ALIGNED alignas(SYSTEM_CACHE_ALIGNMENT_SIZE)