huge_pages_log_v5.diff
application/octet-stream
Filename: huge_pages_log_v5.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 v5
| File | + | − |
|---|---|---|
| src/backend/port/sysv_shmem.c | 12 | 5 |
| src/backend/port/win32_shmem.c | 3 | 3 |
diff --git a/src/backend/port/sysv_shmem.c b/src/backend/port/sysv_shmem.c
index 9de96ed..2ac3b41 100644
--- a/src/backend/port/sysv_shmem.c
+++ b/src/backend/port/sysv_shmem.c
@@ -479,9 +479,10 @@ PGSharedMemoryAttach(IpcMemoryId shmId,
* and the hugepage-related mmap flags to use into *mmap_flags.
*/
static void
-GetHugePageSize(Size *hugepagesize, int *mmap_flags)
+GetHugePageSize(Size *hugepagesize, int *mmap_flags, unsigned int *total_pages)
{
Size default_hugepagesize = 0;
+ *total_pages = 0;
/*
* System-dependent code to find out the default huge page size.
@@ -495,6 +496,7 @@ GetHugePageSize(Size *hugepagesize, int *mmap_flags)
FILE *fp = AllocateFile("/proc/meminfo", "r");
char buf[128];
unsigned int sz;
+ unsigned int pg;
char ch;
if (fp)
@@ -506,10 +508,13 @@ GetHugePageSize(Size *hugepagesize, int *mmap_flags)
if (ch == 'k')
{
default_hugepagesize = sz * (Size) 1024;
- break;
}
/* We could accept other units besides kB, if needed */
}
+ else if (sscanf(buf, "HugePages_Total: %u", &pg) == 1)
+ {
+ *total_pages = pg;
+ }
}
FreeFile(fp);
}
@@ -582,8 +587,9 @@ CreateAnonymousSegment(Size *size)
*/
Size hugepagesize;
int mmap_flags;
+ unsigned int total_pages;
- GetHugePageSize(&hugepagesize, &mmap_flags);
+ GetHugePageSize(&hugepagesize, &mmap_flags, &total_pages);
if (allocsize % hugepagesize != 0)
allocsize += hugepagesize - (allocsize % hugepagesize);
@@ -592,8 +598,9 @@ CreateAnonymousSegment(Size *size)
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);
+ ereport((total_pages == 0) ? DEBUG3 : LOG,
+ (errmsg("fall back anonymous shared memory to non-huge "
+ "pages: required %zu bytes for huge pages", allocsize)));
}
#endif
diff --git a/src/backend/port/win32_shmem.c b/src/backend/port/win32_shmem.c
index d7a7199..9a9e98a 100644
--- a/src/backend/port/win32_shmem.c
+++ b/src/backend/port/win32_shmem.c
@@ -293,9 +293,9 @@ 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("fall back anonymous shared memory to non-huge "
+ "pages: required %zu bytes for huge pages", size)));
/*
* Use the original size, not the rounded-up value, when