From 375d8526f2900d0c377f44532f6d09ee06531f67 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Wed, 4 Sep 2013 23:14:33 +0300 Subject: Keep heavily-contended fields in XLogCtlInsert on different cache lines. Performance testing shows that if the insertpos_lck spinlock and the fields that it protects are on the same cache line with other variables that are frequently accessed, the false sharing can hurt performance a lot. Keep them apart by adding some padding. --- src/include/pg_config_manual.h | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/include/pg_config_manual.h') diff --git a/src/include/pg_config_manual.h b/src/include/pg_config_manual.h index 1d60be2c477..2e6aad1ca56 100644 --- a/src/include/pg_config_manual.h +++ b/src/include/pg_config_manual.h @@ -199,6 +199,17 @@ #define USE_PPC_LWSYNC #endif +/* + * Assumed cache line size. This doesn't affect correctness, but can be + * used for low-level optimizations. Currently, this is only used to pad + * some data structures in xlog.c, to ensure that highly-contended fields + * are on different cache lines. Too small a value can hurt performance due + * to false sharing, while the only downside of too large a value is a few + * bytes of wasted memory. The default is 128, which should be large enough + * for all supported platforms. + */ +#define CACHE_LINE_SIZE 128 + /* *------------------------------------------------------------------------ * The following symbols are for enabling debugging code, not for -- cgit v1.2.3