| From: | Kyotaro HORIGUCHI <horiguchi(dot)kyotaro(at)lab(dot)ntt(dot)co(dot)jp> | 
|---|---|
| To: | pgsql-hackers(at)postgresql(dot)org | 
| Subject: | Incorrect formula for SysV IPC parameters | 
| Date: | 2016-02-03 03:51:19 | 
| Message-ID: | 20160203.125119.66820697.horiguchi.kyotaro@lab.ntt.co.jp | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-hackers | 
Hello, I found that the formulas to calculate SEMMNI and SEMMNS
are incorrect in 9.2 and later.
http://www.postgresql.org/docs/9.5/static/kernel-resources.html
All of them say that the same thing as following,
| SEMMNI  Maximum number of semaphore identifiers (i.e., sets)
| 
|   at least ceil((max_connections + autovacuum_max_workers + 4) / 16)
| 
| SEMMNS	Maximum number of semaphores system-wide
| 
|  ceil((max_connections + autovacuum_max_workers + 4) / 16) * 17
|    plus room for other applications
But actually the number of semaphores PostgreSQL needs is
calculated as following in 9.4 and later.
  numSemas = MaxConnections + NUM_AUXILIARY_PROCS(=4)
  MaxConnections = max_connections + autovacuum_max_workers + 1 +
                   max_worker_processes
So, the formula for SEMMNI should be
ceil((max_connections + autovacuum_max_workers + max_worker_processes + 5) / 16)
and SEMMNS should have the same fix.
In 9.3 and 9.2, the documentation says the same thing but
actually it is calculated as following,
  numSemas = MaxConnections + NUM_AUXILIARY_PROCS(=4)
  MaxConnections = max_connections + autovacuum_max_workers + 1 +
                   GetNumShmemAttachedBgworkers()
Omitting GetNumShmemAttachedBgworkers, the actual formula is
ceil((max_connections + autovacuum_max_workers + 5) / 16)
In 9.1, NUM_AUXILIARY_PROCS is 3 so the documentations is correct.
I attached two patches for 9.2-9.3 and 9.4-9.6dev
respectively. patch command complains a bit on applying it on
9.2.
On the platforforms that doesn't have tas operation needs
additional 1024 + 64 semaphores but I understand it as out of
scope of the documentation.
One concern is that 'at least' and 'plus room for other
applications' are mixed in the table 17-1, especially for SEMMNI
and SEMMNS. It seems to me that they should be in the same
wording, but it is not an actual problem.
regards,
-- 
Kyotaro Horiguchi
NTT Open Source Software Center
        
| Attachment | Content-Type | Size | 
|---|---|---|
| fix_doc_sysvipc_92-93.patch | text/x-patch | 1.3 KB | 
| fix_doc_sysvipc_94-96.patch | text/x-patch | 1.4 KB | 
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Tom Lane | 2016-02-03 03:58:15 | Re: Raising the checkpoint_timeout limit | 
| Previous Message | Corey Huinker | 2016-02-03 03:42:14 | Re: [POC] FETCH limited by bytes. |