From 2a5ecb56d22340a00393fa60e7b910c472071875 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Thu, 25 Jan 2018 11:14:24 -0500
Subject: [PATCH] Update documentation to mention huge pages on other OSes

Previously, the docs implied that only Linux and Windows could use huge
pages.  That's not quite true: it's just that we only know how to
request them explicitly on those OSes.  Be more explicit about what
huge_pages really does and mention that some OSes may use huge pages
automatically.

Author: Thomas Munro and Catalin Iacob
Reviewed-By: Justin Pryzby, Peter Eisentraut
Discussion: https://postgr.es/m/CAEepm=3qzR-hfjepymohuC4XO5phxoSoipOjm6BEhnJHjNR+jg@mail.gmail.com
---
 doc/src/sgml/config.sgml | 33 +++++++++++++++++++++++----------
 1 file changed, 23 insertions(+), 10 deletions(-)

diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index 45b2af14eb..f951ddb41e 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -1372,14 +1372,20 @@ include_dir 'conf.d'
       </term>
       <listitem>
        <para>
-        Enables/disables the use of huge memory pages. Valid values are
-        <literal>try</literal> (the default), <literal>on</literal>,
-        and <literal>off</literal>.
+        Controls whether huge pages are requested for the main shared memory
+        area. Valid values are <literal>try</literal> (the default),
+        <literal>on</literal>, and <literal>off</literal>.  With
+        <varname>huge_pages</varname> set to <literal>try</literal>, the
+        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.
        </para>
 
        <para>
-        At present, this feature is supported only on Linux and Windows. The
-        setting is ignored on other systems when set to <literal>try</literal>.
+        At present, this setting is supported only on Linux and Windows. The
+        setting is ignored on other systems when set to
+        <literal>try</literal>.
        </para>
 
        <para>
@@ -1401,11 +1407,18 @@ include_dir 'conf.d'
        </para>
 
        <para>
-        With <varname>huge_pages</varname> set to <literal>try</literal>,
-        the server will try to use huge pages, but fall back to using
-        normal allocation if that fails. With <literal>on</literal>, failure
-        to use huge pages will prevent the server from starting up. With
-        <literal>off</literal>, huge pages will not be used.
+        Note that this setting only affects the main shared memory area.
+        Operating systems such as Linux, FreeBSD, and Illumos can also use
+        huge pages (also known as <quote>super</quote> pages or
+        <quote>large</quote> pages) automatically for normal memory
+        allocation, without an explicit request from
+        <productname>PostgreSQL</productname>. On Linux, this is called
+        <quote>transparent huge pages</quote><indexterm><primary>transparent
+        huge pages</primary></indexterm> (THP). That feature has been known to
+        cause performance degradation with
+        <productname>PostgreSQL</productname> for some users on some Linux
+        versions, so its use is currently discouraged (unlike explicit use of
+        <varname>huge_pages</varname>).
        </para>
       </listitem>
      </varlistentry>
-- 
2.40.0