aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2015-03-21 22:06:19 -0400
committerBruce Momjian <bruce@momjian.us>2015-03-21 22:06:19 -0400
commit34afbba84e8fd12bbf905d68d1112f51ed584df9 (patch)
treea4e66fb4b46745b5996190dc467bdb1b36cc3318 /src
parent9d61b9953c1489cbb458ca70013cf5fca1bb7710 (diff)
downloadpostgresql-34afbba84e8fd12bbf905d68d1112f51ed584df9.tar.gz
postgresql-34afbba84e8fd12bbf905d68d1112f51ed584df9.zip
Use mmap MAP_NOSYNC option to limit shared memory writes
mmap() is rarely used for shared memory, but when it is, this option is useful, particularly on the BSDs. Patch by Sean Chittenden
Diffstat (limited to 'src')
-rw-r--r--src/backend/storage/ipc/dsm_impl.c4
-rw-r--r--src/include/portability/mem.h8
2 files changed, 10 insertions, 2 deletions
diff --git a/src/backend/storage/ipc/dsm_impl.c b/src/backend/storage/ipc/dsm_impl.c
index cf7938cb44d..0859fbfc930 100644
--- a/src/backend/storage/ipc/dsm_impl.c
+++ b/src/backend/storage/ipc/dsm_impl.c
@@ -368,7 +368,7 @@ dsm_impl_posix(dsm_op op, dsm_handle handle, Size request_size,
/* Map it. */
address = mmap(NULL, request_size, PROT_READ | PROT_WRITE,
- MAP_SHARED | MAP_HASSEMAPHORE, fd, 0);
+ MAP_SHARED | MAP_HASSEMAPHORE | MAP_NOSYNC, fd, 0);
if (address == MAP_FAILED)
{
int save_errno;
@@ -960,7 +960,7 @@ dsm_impl_mmap(dsm_op op, dsm_handle handle, Size request_size,
/* Map it. */
address = mmap(NULL, request_size, PROT_READ | PROT_WRITE,
- MAP_SHARED | MAP_HASSEMAPHORE, fd, 0);
+ MAP_SHARED | MAP_HASSEMAPHORE | MAP_NOSYNC, fd, 0);
if (address == MAP_FAILED)
{
int save_errno;
diff --git a/src/include/portability/mem.h b/src/include/portability/mem.h
index 7c77dbd1284..a4b01fecaed 100644
--- a/src/include/portability/mem.h
+++ b/src/include/portability/mem.h
@@ -30,6 +30,14 @@
#define MAP_HASSEMAPHORE 0
#endif
+/*
+ * BSD-derived systems use the MAP_NOSYNC flag to prevent dirty mmap(2)
+ * pages from being gratuitously flushed to disk.
+ */
+#ifndef MAP_NOSYNC
+#define MAP_NOSYNC 0
+#endif
+
#define PG_MMAP_FLAGS (MAP_SHARED|MAP_ANONYMOUS|MAP_HASSEMAPHORE)
/* Some really old systems don't define MAP_FAILED. */