Date: Sun, 26 Jun 2005 16:50:21 -0700 (PDT) From: =?ISO-8859-1?Q?Mikko_Ty=F6l=E4j=E4rvi?= <mbsd@pacbell.net> To: freebsd-questions@FreeBSD.org Subject: Re: Perl 5.8.6 to 5.8.7 upgrade fails IPC tests Message-ID: <20050626163239.T1138@sotec.home> In-Reply-To: <20050626224825.GB970@keyslapper.net> References: <20050626191706.GB89575@keyslapper.net> <20050626223917.3b50913b.albi@scii.nl> <20050626205620.GC89575@keyslapper.net> <20050626142104.L1638@sotec.home> <20050626224825.GB970@keyslapper.net>
next in thread | previous in thread | raw e-mail | index | archive | help
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@scii.nl sat at the `puter and typed: >>>> On Sun, 26 Jun 2005 15:17:06 -0400 >>>> Louis LeBlanc <FreeBSD@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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050626163239.T1138>