From: Justin Pryzby <pryzby@telsasoft.com>
To: Andres Freund <andres@anarazel.de>
Cc: Michael Paquier <michael@paquier.xyz>
Cc: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Cc: thomas.munro@gmail.com
Cc: tgl@sss.pgh.pa.us
Cc: john.naylor@enterprisedb.com
Cc: noriyoshi.shinoda@hpe.com
Cc: jchampion@timescale.com
Cc: sawada.mshk@gmail.com
Cc: masao.fujii@oss.nttdata.com
Cc: pgsql-hackers@postgresql.org
Cc: rjuju123@gmail.com
Subject: Re: Improve logging when using Huge Pages
Date: Mon, 30 Jan 2023 21:56:39 -0600
Message-ID: <20230131035639.GJ22427@telsasoft.com> (raw)
In-Reply-To: <20230125013728.GK13860@telsasoft.com>
References: <20221107151458.6puzamerxti2y5in@awork3.anarazel.de>
<3239882.1667836576@sss.pgh.pa.us>
<CA+hUKGKRfzOH9gji-W7j=iKDQ50AjtGSsUfybNxeNVk+uy2gcg@mail.gmail.com>
<20221109.114757.661491395677294771.horikyota.ntt@gmail.com>
<Y2s0wCFgDv4LXzIW@paquier.xyz>
<20230124012100.GB13860@telsasoft.com>
<20230124013335.7u75j75ze5o7uh2l@awork3.anarazel.de>
<20230125013728.GK13860@telsasoft.com>
On Tue, Jan 24, 2023 at 07:37:29PM -0600, Justin Pryzby wrote:
> BTW, I didn't realize it when I made the suggestion, nor when I wrote
> the patch, but a GUC was implemented in the v2 patch.
> https://www.postgresql.org/message-id/TU4PR8401MB1152CB4FEB99658BC6B35543EECF9%40TU4PR8401MB1152.NAM...> Whether it's a GUC or a function, I propose to name it hugepages_active.
> If there's no objections, I'll add to the CF.
As such, I re-opened the previous CF.
https://commitfest.postgresql.org/38/3310/Attachments:
[text/x-diff] 0001-add-GUC-huge_pages_active.patch (4.4K, ../20230131035639.GJ22427@telsasoft.com/2-0001-add-GUC-huge_pages_active.patch)
download | inline diff:
From f23e27ed112aff2f177082a105d79aaa09b2ce3b Mon Sep 17 00:00:00 2001
From: Justin Pryzby <pryzbyj@telsasoft.com>
Date: Mon, 23 Jan 2023 18:33:51 -0600
Subject: [PATCH] add GUC: huge_pages_active
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 | 12 +++++++++---
src/backend/port/win32_shmem.c | 4 ++++
src/backend/utils/misc/guc_tables.c | 13 +++++++++++++
4 files changed, 42 insertions(+), 4 deletions(-)
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgmlindex f985afc009d..e5ef58d441d 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.cindex eaba244bc9c..62029e7fe0e 100644--- a/src/backend/port/sysv_shmem.c+++ b/src/backend/port/sysv_shmem.c@@ -621,9 +621,15 @@ 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 (huge_pages == HUGE_PAGES_TRY)+ {+ if (ptr == MAP_FAILED)+ elog(DEBUG1, "mmap(%zu) with MAP_HUGETLB failed, huge pages disabled: %m",+ allocsize);+ else+ SetConfigOption("huge_pages_active", "on",+ PGC_INTERNAL, PGC_S_DYNAMIC_DEFAULT);+ }
}
#endif
diff --git a/src/backend/port/win32_shmem.c b/src/backend/port/win32_shmem.cindex 62e08074770..352e68b7af2 100644--- a/src/backend/port/win32_shmem.c+++ b/src/backend/port/win32_shmem.c@@ -314,6 +314,10 @@ retry:
errdetail("Failed system call was CreateFileMapping(size=%zu, name=%s).",
size, szShareMem)));
}
+ else if (huge_pages == HUGE_PAGES_TRY)+ SetConfigOption("huge_pages_active", "on",+ PGC_INTERNAL, PGC_S_DYNAMIC_DEFAULT);+
/*
* If the segment already existed, CreateFileMapping() will return a
diff --git a/src/backend/utils/misc/guc_tables.c b/src/backend/utils/misc/guc_tables.cindex 4454d57322a..649aa473020 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
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: pgsql-hackers@postgresql.org
Cc: pryzby@telsasoft.com, andres@anarazel.de, michael@paquier.xyz, horikyota.ntt@gmail.com, thomas.munro@gmail.com, tgl@sss.pgh.pa.us, john.naylor@enterprisedb.com, noriyoshi.shinoda@hpe.com, jchampion@timescale.com, sawada.mshk@gmail.com, masao.fujii@oss.nttdata.com, rjuju123@gmail.com
Subject: Re: Improve logging when using Huge Pages
In-Reply-To: <20230131035639.GJ22427@telsasoft.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox