Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 12 Apr 2008 13:51:16 +0100
From:      Dieter <freebsd@sopwith.solgatos.com>
To:        freebsd-questions@freebsd.org
Subject:   Re: 6.2 -> 7.0 now mlock(2) fails 
Message-ID:  <200804122051.UAA06080@sopwith.solgatos.com>
In-Reply-To: Your message of "Sat, 12 Apr 2008 21:54:40 %2B0300." <87ej9aaopb.fsf@kobe.laptop> 

next in thread | previous in thread | raw e-mail | index | archive | help
> > I never saw mlock(2) fail in 6.2 but with 7.0 I sometimes
> > get mlock(2) failed: Resource temporarily unavailable.
> 
> That's error EAGAIN:
> 
>      [EAGAIN]           Locking the indicated range would exceed
>                         either the system or per-process limit
>                         for locked memory.
> 
> You are hitting either the `vm.max_wired' limit, or the per-process
> RLIMIT_MEMLOCK limit.
> 
> > What changed and how do I fix it?
> 
> It would be nice if you could run a test program that prints the value of
> vm.max_wired and RLIMIT_MEMLOCK on 6.2 and then on 7.0.  As an extra test,
> it may be worth printing these values in the log of your application when
> mlock(2) fails.

vm.max_wired looks like a sysctl, but sysctl doesn't know about it.

sysctl: unknown oid 'vm.max_wired'

sysctl -a | grep -i wire | grep -vi firewire 
vm.stats.vm.v_wire_count: 89046

/usr/include/sys/resource.h:#define     RLIMIT_MEMLOCK  6               /* locked-in-memory address space */

It doesn't always fail, just sometimes.  It is trying to lock 172490752 bytes.
There can be two processes wanting to do this at once.  Seems to be the 2nd
one that sometimes fails.

with one process:
vm.stats.vm.v_wire_count: 130992  (41946 more)

with two processes (mlock failed):
vm.stats.vm.v_wire_count: 131047  (55 more)

killed both proceses:
vm.stats.vm.v_wire_count: 88788



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200804122051.UAA06080>