mlock() and vm_max_wired
Dmitry Sivachenko
trtrmitya at gmail.com
Mon Jun 23 10:00:43 UTC 2014
On 23 июня 2014 г., at 13:52, Dmitry Sivachenko <trtrmitya at gmail.com> wrote:
> Hello!
>
> I am using FreeBSD-10/stable and have a problem with mlock().
> I have 256GB of memory and a program which does mmap+mlock on a number of data files. It can process one file several times (so it does mmap() + mlock() on the same file more than once).
> I set vm.max_wired=67108864 (67108864 * 4k = 256GB), so it is allowed to mlock() the whole RAM.
>
> The total size of all files is about 180GB.
>
> The program fails with mlock: Resource temporarily unavailable error.
>
> If I increase vm.max_wired even more, the program works fine and after it starts top(1) shows about 186GB of Wired memory.
>
> Why does it fail with vm.max_wired=67108864? Is it a bug or am I missing something?
>
> Thanks.
Forgot to add the I suspect the following fragment in vm_mmap.c, in vm_mlock() function:
if (npages + cnt.v_wire_count > vm_page_max_wired)
return (EAGAIN);
If we mlock() the same region second time, this condition can be true though after mlock() these pages will not increase total locked pages counter.
More information about the freebsd-hackers
mailing list