Perl 5.8.6 to 5.8.7 upgrade fails IPC tests
Mikko Työläjärvi
mbsd at pacbell.net
Sun Jun 26 23:50:48 GMT 2005
On Sun, 26 Jun 2005, Louis LeBlanc wrote:
> On 06/26/05 02:32 PM, Mikko Tyljrvi sat at the `puter and typed:
>> On Sun, 26 Jun 2005, Louis LeBlanc wrote:
>>
>>> On 06/26/05 10:39 PM, albi at scii.nl sat at the `puter and typed:
>>>> On Sun, 26 Jun 2005 15:17:06 -0400
>>>> Louis LeBlanc <FreeBSD at keyslapper.net> wrote:
>>>>
>>>>> I'm having a little trouble with my perl upgrade from 5.8.6 to 5.8.7.
>>>> -- cut --
>>>>> ok 5
>>>>> ok 6
>>>>> semget: No space left on device
>>>>
>>>> you need to make disc-space, one idea is to run portsclean -C or to make
>>>> some more space in /usr/home
>>>
>>> That would be the obvious cause, but not so:
>>
>> [...]
>>
>> Indeed. Disk space most likely has nothing to do with it.
>>
>> The semget(2) call returns ENOSPC when unable to allocate semaphores,
>> due to hitting one of the many SYSV IPC limitations. Some things to
>> look for:
>>
>> - You need to have SYSVSEM in your kernel, or "sysvsem.ko" loaded.
>>
>> - Check semaphore limits with "ipcs -S"
>>
>> - Check current semaphore usage with "ipcs -s"
>>
>> - Figure out what limit is being hit and do something about it :-)
>>
>> Some of the values can be tweaked at run-time, with
>> "sysctl kern.ipc.semxxx=value", others have to be set at boot
>> time (in /boot/loader.conf), or compiled into the kernel.
>
> This certainly does make sense, but I'm not sure I'm actually running
> short here. I have SYSVSEM in my kernel (as well as SYSVSHM and
> SYSVMSG), and the relevant sysctls are:
>
> kern.ipc.semmap: 30
> kern.ipc.semmni: 10
> kern.ipc.semmns: 60
> kern.ipc.semmnu: 30
> kern.ipc.semmsl: 60
> kern.ipc.semopm: 100
> kern.ipc.semume: 10
> kern.ipc.semusz: 92
> kern.ipc.semvmx: 32767
> kern.ipc.semaem: 16384
Ok, looks like the default settings, which are often too low for
anything that makes heavy use of SYSV IPCs...
>
> <root># ipcs -S
> seminfo:
> semmap: 30 (# of entries in semaphore map)
> semmni: 10 (# of semaphore identifiers)
> semmns: 60 (# of semaphores in system)
> semmnu: 30 (# of undo structures in system)
> semmsl: 60 (max # of semaphores per id)
> semopm: 100 (max # of operations per semop call)
> semume: 10 (max # of undo entries per process)
> semusz: 92 (size in bytes of undo structure)
> semvmx: 32767 (semaphore maximum value)
> semaem: 16384 (adjust on exit max value)
>
> <root># ipcs -s
> Semaphores:
> T ID KEY MODE OWNER GROUP
> s 65536 5432001 --rw------- pgsql pgsql
> s 65537 5432002 --rw------- pgsql pgsql
> s 65538 5432003 --rw------- pgsql pgsql
... such as databases :-)
Have a look at /usr/ports/databases/postgresql80-server/pkg-message-server
for some sample settings.
> Near as I can tell, this tells me I have at least 60 semaphores
> systemwide, 60 per id, 3 in use, none of which are being used by root
> (which is who I am running the test as). Shouldn't that leave 57 for
> the perl tests?
Not necessarily. The SYSV IPCs is a particularly vicious piece of
poor engineering.
Semaphores come in sets containing one or more semaphore. With your
settings you can have at most 10 sets, and a total of at most 60
semaphores, and at most 60 per set, and at most 30... something else.
Also, at most 30 locks can be released in case a process unexpectedly
exits.
Easy, right?
Looks like you'll have to use "ipcs -sa" to see the "NSEMS" column,
which should tell you how many semaphores are in use.
> How many does it need to open?
No idea. Read the code or just raise the retarded limits by a lot.
Or try stopping postgres while running the tests.
$.02,
/Mikko
More information about the freebsd-questions
mailing list