summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2013-09-04 23:14:33 +0300
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2013-09-04 23:14:33 +0300
commit375d8526f2900d0c377f44532f6d09ee06531f67 (patch)
tree866db5b0ff2a176ff815e80ca2a72c780079bee8 /src/include
parentcc52d5b33ff5df29de57dcae9322214cfe9c8464 (diff)
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.
Diffstat (limited to 'src/include')
-rw-r--r--src/include/pg_config_manual.h11
1 files changed, 11 insertions, 0 deletions
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
@@ -200,6 +200,17 @@
#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
* controlling user-visible features or resource limits.