agora inbox for [email protected]
help / color / mirror / Atom feedFrom: Justin Pryzby <[email protected]>
Subject: [PATCH v2] add GUC: huge_pages_active
Date: Mon, 23 Jan 2023 18:33:51 -0600
This is useful to show the current state of huge pages when
huge_pages=try. The effective status is not otherwise visible without
OS level tools like gdb or /proc/N/smaps.
---
doc/src/sgml/config.sgml | 17 ++++++++++++++++-
src/backend/port/sysv_shmem.c | 5 ++++-
src/backend/port/win32_shmem.c | 5 ++++-
src/backend/utils/misc/guc_tables.c | 13 +++++++++++++
4 files changed, 37 insertions(+), 3 deletions(-)
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index d190be1925d..fcef4e3ce8e 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -1708,7 +1708,8 @@ include_dir 'conf.d'
server will try to request huge pages, but fall back to the default if
that fails. With <literal>on</literal>, failure to request huge pages
will prevent the server from starting up. With <literal>off</literal>,
- huge pages will not be requested.
+ huge pages will not be requested. The actual state of huge pages is
+ indicated by the server variable <xref linkend="guc-huge-pages-active"/>.
</para>
<para>
@@ -10687,6 +10688,20 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
</listitem>
</varlistentry>
+ <varlistentry id="guc-huge-pages-active" xreflabel="huge_pages_active">
+ <term><varname>huge_pages_active</varname> (<type>boolean</type>)
+ <indexterm>
+ <primary><varname>huge_pages_active</varname> configuration parameter</primary>
+ </indexterm>
+ </term>
+ <listitem>
+ <para>
+ Reports whether huge pages are in use by the current process.
+ See <xref linkend="guc-huge-pages"/> for more information.
+ </para>
+ </listitem>
+ </varlistentry>
+
<varlistentry id="guc-integer-datetimes" xreflabel="integer_datetimes">
<term><varname>integer_datetimes</varname> (<type>boolean</type>)
<indexterm>
diff --git a/src/backend/port/sysv_shmem.c b/src/backend/port/sysv_shmem.c
index eaba244bc9c..9b9b25d53ba 100644
--- a/src/backend/port/sysv_shmem.c
+++ b/src/backend/port/sysv_shmem.c
@@ -621,7 +621,10 @@ 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)
+ if (ptr != MAP_FAILED)
+ SetConfigOption("huge_pages_active", "on",
+ PGC_INTERNAL, PGC_S_DYNAMIC_DEFAULT);
+ else if (huge_pages == HUGE_PAGES_TRY)
elog(DEBUG1, "mmap(%zu) with MAP_HUGETLB failed, huge pages disabled: %m",
allocsize);
}
diff --git a/src/backend/port/win32_shmem.c b/src/backend/port/win32_shmem.c
index 62e08074770..73472a18f25 100644
--- a/src/backend/port/win32_shmem.c
+++ b/src/backend/port/win32_shmem.c
@@ -290,7 +290,10 @@ retry:
size_low, /* Size Lower 32 bits */
szShareMem);
- if (!hmap)
+ if (hmap)
+ SetConfigOption("huge_pages_active", "on",
+ PGC_INTERNAL, PGC_S_DYNAMIC_DEFAULT);
+ else
{
if (GetLastError() == ERROR_NO_SYSTEM_RESOURCES &&
huge_pages == HUGE_PAGES_TRY &&
diff --git a/src/backend/utils/misc/guc_tables.c b/src/backend/utils/misc/guc_tables.c
index b21698934c8..1e8e67a4c54 100644
--- a/src/backend/utils/misc/guc_tables.c
+++ b/src/backend/utils/misc/guc_tables.c
@@ -571,6 +571,7 @@ static int shared_memory_size_mb;
static int shared_memory_size_in_huge_pages;
static int wal_block_size;
static bool data_checksums;
+static bool huge_pages_active = false; /* dynamically set */
static bool integer_datetimes;
#ifdef USE_ASSERT_CHECKING
@@ -1013,6 +1014,18 @@ struct config_bool ConfigureNamesBool[] =
true,
NULL, NULL, NULL
},
+
+ {
+ {"huge_pages_active", PGC_INTERNAL, PRESET_OPTIONS,
+ gettext_noop("Indicates whether huge pages are in use."),
+ NULL,
+ GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE | GUC_RUNTIME_COMPUTED
+ },
+ &huge_pages_active,
+ false,
+ NULL, NULL, NULL
+ },
+
{
/* Not for general use --- used by SET SESSION AUTHORIZATION */
{"is_superuser", PGC_INTERNAL, UNGROUPED,
--
2.25.1
--LQAwcd5tHl0Qlnzi--
view thread (8+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected]
Subject: Re: [PATCH v2] add GUC: huge_pages_active
In-Reply-To: <no-message-id-102089@localhost>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox