7.3.8 under FC3 takes excessive semaphores?

From: "Mark Cave-Ayland" <m(dot)cave-ayland(at)webbased(dot)co(dot)uk>
To: <pgsql-hackers(at)postgresql(dot)org>
Subject: 7.3.8 under FC3 takes excessive semaphores?
Date: 2005-01-31 12:34:02
Message-ID: 9EB50F1A91413F4FA63019487FCD251DADE2@WEBBASEDDC.webbasedltd.local
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi everyone,

I'm trying to install a copy of PostgreSQL 7.3.8 on FC3 x86_64, and having a
very strange problem with shared memory in that PostgreSQL seems to be
taking far too many semaphores for the parameters in the postgresql.conf
file. I've raised this with some of the members of the IRC channel, and they
have been unable to explain why this is happening.

Using the default parameters from a fresh initdb, if I increase shared
buffers much above 1000 then the postmaster refuses to start with the
following error:

-----

IpcSemaphoreCreate: semget(key=5433025, num=17, 03600) failed: No space left
on device

This error does *not* mean that you have run out of disk space.

It occurs when either the system limit for the maximum number of
semaphore sets (SEMMNI), or the system wide maximum number of
semaphores (SEMMNS), would be exceeded. You need to raise the
respective kernel parameter. Alternatively, reduce PostgreSQL's
consumption of semaphores by reducing its max_connections parameter
(currently 32).

The PostgreSQL Administrator's Guide contains more information about
configuring your system for PostgreSQL.

-----

Even when I have increased the values of SEMMNI and SEMMNS far above their
default values, the postmaster still refuses to start. When I drop
shared_buffers back to 1000, the postmaster starts but takes 127(??!)
different semaphores arrays each with 17 elements (as listed using ipcs).

To check this, I installed the same source on a FC1 i386 machine to do a
comparison, using my original shared_buffers value of 10000, and found that
a successfully running postmaster only takes 3 semaphore arrays with 17
elements. Digging into the source, I added an elog() at line 227 in
src/backend/port/sysv_sema.c and found that on the FC1 i386 machine, the
loop in IpcSemaphoreCreate() is called only 3 times. Doing the same on the
FC3 x86_64 machine, the loop seems to cycle endlessly until I run out of
semaphores.

Can anyone suggest a reason why the behaviour is so different between FC3
x86_64 and FC1 i386? I'm thinking it may be either to do with the x86_64
platform or perhaps the newer version of gcc used to compile from source.
Any pointers in the right direction would be gratefully received :)

Kind regards,

Mark.

------------------------
WebBased Ltd
South West Technology Centre
Tamar Science Park
Plymouth
PL6 8BT

T: +44 (0)1752 791021
F: +44 (0)1752 791023
W: http://www.webbased.co.uk

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message a_ogawa 2005-01-31 14:38:01 FunctionCallN improvement.
Previous Message Gaetano Mendola 2005-01-31 11:25:13 weird behaviour on DISTINCT ON