huge_pages_log_v2.diff
application/octet-stream
Filename: huge_pages_log_v2.diff
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
Series: patch v2
| File | + | − |
|---|---|---|
| src/backend/port/sysv_shmem.c | 13 | 3 |
| src/backend/port/win32_shmem.c | 6 | 3 |
| src/backend/utils/misc/guc.c | 11 | 0 |
| src/include/storage/pg_shmem.h | 1 | 0 |
diff --git a/src/backend/port/sysv_shmem.c b/src/backend/port/sysv_shmem.c
index 9de96ed..6bd9b54 100644
--- a/src/backend/port/sysv_shmem.c
+++ b/src/backend/port/sysv_shmem.c
@@ -591,9 +591,19 @@ CreateAnonymousSegment(Size *size)
ptr = mmap(NULL, allocsize, PROT_READ | PROT_WRITE,
PG_MMAP_FLAGS | mmap_flags, -1, 0);
mmap_errno = errno;
- if (huge_pages == HUGE_PAGES_TRY && ptr == MAP_FAILED)
- elog(DEBUG1, "mmap(%zu) with MAP_HUGETLB failed, huge pages disabled: %m",
- allocsize);
+ if (ptr != MAP_FAILED)
+ using_huge_pages = true;
+ else if (huge_pages == HUGE_PAGES_TRY)
+ ereport(LOG,
+ (errmsg("could not map anonymous shared memory: %m"),
+ (mmap_errno == ENOMEM) ?
+ errhint("This error usually means that PostgreSQL's request "
+ "for a shared memory segment exceeded available memory, "
+ "swap space, or huge pages. To reduce the request size "
+ "(currently %zu bytes), reduce PostgreSQL's shared "
+ "memory usage, perhaps by reducing shared_buffers or "
+ "max_connections.",
+ allocsize) : 0));
}
#endif
diff --git a/src/backend/port/win32_shmem.c b/src/backend/port/win32_shmem.c
index d7a7199..fad1f38 100644
--- a/src/backend/port/win32_shmem.c
+++ b/src/backend/port/win32_shmem.c
@@ -293,9 +293,10 @@ retry:
huge_pages == HUGE_PAGES_TRY &&
(flProtect & SEC_LARGE_PAGES) != 0)
{
- elog(DEBUG1, "CreateFileMapping(%zu) with SEC_LARGE_PAGES failed, "
- "huge pages disabled",
- size);
+ ereport(LOG,
+ (errmsg("could not create shared memory segment: error code %lu", GetLastError()),
+ errdetail("Failed system call was CreateFileMapping(size=%zu, name=%s).",
+ size, szShareMem)));
/*
* Use the original size, not the rounded-up value, when
@@ -324,6 +325,8 @@ retry:
Sleep(1000);
continue;
}
+ if ((flProtect & SEC_LARGE_PAGES) != 0)
+ using_huge_pages = true;
break;
}
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 467b0fd..10148c3 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -639,6 +639,7 @@ int ssl_renegotiation_limit;
*/
int huge_pages;
int huge_page_size;
+bool using_huge_pages;
/*
* These variables are all dummies that don't do anything, except in some
@@ -2116,6 +2117,16 @@ static struct config_bool ConfigureNamesBool[] =
NULL, NULL, NULL
},
+ {
+ {"using_huge_pages", PGC_INTERNAL, RESOURCES_MEM,
+ gettext_noop("Whether the instance is using HugePages."),
+ NULL
+ },
+ &using_huge_pages,
+ false,
+ NULL, NULL, NULL
+ },
+
/* End-of-list marker */
{
{NULL, 0, 0, NULL, NULL}, NULL, false, NULL, NULL, NULL
diff --git a/src/include/storage/pg_shmem.h b/src/include/storage/pg_shmem.h
index 059df1b..48efba6 100644
--- a/src/include/storage/pg_shmem.h
+++ b/src/include/storage/pg_shmem.h
@@ -45,6 +45,7 @@ typedef struct PGShmemHeader /* standard header for all Postgres shmem */
extern int shared_memory_type;
extern int huge_pages;
extern int huge_page_size;
+extern bool using_huge_pages;
/* Possible values for huge_pages */
typedef enum