On Sat, Sep 20, 2014 at 10:24:51PM +0100, Laurence Parry wrote:
> Regarding the coverage of huge pages (added in 9.4):
> http://www.postgresql.org/docs/9.4/static/kernel-resources.html#LINUX-HUGE-PAGES
> 
> This section does not call out the need to add the PostgreSQL user
> to a group which has been given access to shared memory by setting
> its number as vm.hugetlb_shm_group, nor that the "memlock" limit
> needs to be raised or set to unlimited for this user.
> 
> If these are not done, postgres would need to be running as a user
> with CAP_IPC_LOCK (e.g. root) to take advantage of large pages.
> These restrictions exist because reserving a large page locks it in
> physical memory, which can lead to resource exhaustion.
> 
> Compare
> http://dev.mysql.com/doc/refman/5.7/en/large-page-support.html which
> mentions both of these issues (although it does not show adding the
> user to the group, just setting the group as vm.hugetlb_shm_group).
> 
> An example command sequence:
> groupadd hugepages
> gpasswd -a postgres hugepages
> id postgres [user finds "hugepages" group has id 1234]
> 
> sysctl -w vm.hugetlb_shm_group=1234
> sysctl -w vm.nr_hugepages=5678 [as estimated in documentation]
> 
> Edit /etc/sysctl.conf and add:
>    vm.hugetlb_shm_group=1234
>    vm.nr_hugepages=5678
> 
> Add to /etc/security/limits.conf:
>    @hugepages      soft    memlock         unlimited
>    @hugepages      hard    memlock         unlimited
> 
> In some cases (e.g. Debian's start-stop-daemon) the command "ulimit
> -l unlimited" may be needed in the PostgreSQL startup scripts
> instead of the limits.conf edit, because PAM limits are not called
> for those scripts.

I have applied the attached doc patch.

-- 
  Bruce Momjian  <br...@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + Everyone has their own god. +
diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml
new file mode 100644
index 639b288..026850a
*** a/doc/src/sgml/runtime.sgml
--- b/doc/src/sgml/runtime.sgml
*************** $ <userinput>sysctl -w vm.nr_hugepages=3
*** 1361,1366 ****
--- 1361,1373 ----
     </para>
  
     <para>
+     It is also necessary to give the database server operating system
+     user permission to use huge pages by setting
+     <varname>vm.hugetlb_shm_group</> via <application>sysctl</>, and
+     permission to lock memory with <command>ulimit -l</>.
+    </para>
+ 
+    <para>
      The default behavior for huge pages in
      <productname>PostgreSQL</productname> is to use them when possible and
      to fallback to normal pages when failing. To enforce the use of huge
-- 
Sent via pgsql-docs mailing list (pgsql-docs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-docs

Reply via email to