v2-0001-Fix-huge_pages-on-current-Windows.patch
text/x-diff
Filename: v2-0001-Fix-huge_pages-on-current-Windows.patch
Type: text/x-diff
Part: 0
Patch
Format: format-patch
Series: patch v2-0001
Subject: Fix huge_pages on current Windows.
| File | + | − |
|---|---|---|
| src/backend/port/win32_shmem.c | 7 | 1 |
From 9a1450ecbe291cfc92e97f49506db9f443c8cbe9 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@paquier.xyz>
Date: Thu, 7 Jul 2022 16:51:18 +0900
Subject: [PATCH v2] Fix huge_pages on current Windows.
Since Windows 10 1703, it's necessary to pass a flag to MapViewOfFile()
to enable large pages at map time.
Reported-by: Okano Naoki
Author: Thomas Munro
Discussion: https://postgr.es/m/17448-0a96583a67edb1f7%40postgresql.org
---
src/backend/port/win32_shmem.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/backend/port/win32_shmem.c b/src/backend/port/win32_shmem.c
index 6cf69411db..2f51da5a6a 100644
--- a/src/backend/port/win32_shmem.c
+++ b/src/backend/port/win32_shmem.c
@@ -216,6 +216,7 @@ PGSharedMemoryCreate(Size size,
SIZE_T largePageSize = 0;
Size orig_size = size;
DWORD flProtect = PAGE_READWRITE;
+ DWORD desiredAccess;
ShmemProtectiveRegion = VirtualAlloc(NULL, PROTECTIVE_REGION_SIZE,
MEM_RESERVE, PAGE_NOACCESS);
@@ -353,12 +354,17 @@ retry:
if (!CloseHandle(hmap))
elog(LOG, "could not close handle to shared memory: error code %lu", GetLastError());
+ desiredAccess = FILE_MAP_WRITE | FILE_MAP_READ;
+
+ /* Set large pages if wanted. */
+ if ((flProtect & SEC_LARGE_PAGES) != 0)
+ desiredAccess |= FILE_MAP_LARGE_PAGES;
/*
* Get a pointer to the new shared memory segment. Map the whole segment
* at once, and let the system decide on the initial address.
*/
- memAddress = MapViewOfFileEx(hmap2, FILE_MAP_WRITE | FILE_MAP_READ, 0, 0, 0, NULL);
+ memAddress = MapViewOfFileEx(hmap2, desiredAccess, 0, 0, 0, NULL);
if (!memAddress)
ereport(FATAL,
(errmsg("could not create shared memory segment: error code %lu", GetLastError()),
--
2.36.1