lkml.org 
[lkml]   [2015]   [Jan]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
Subjectdoes the semantics of MAP_LOCKED is equal to mlock() function?
Hi all:

In the latest kernel, i set the memory limit (4096) in a test cgroup. and add the test task.
the test code code is:

testcase 1: mmap with MAP_LOCKED flag(memsize = 8192)

185 p = mmap(NULL, memsize, PROT_WRITE | PROT_READ,
186 MAP_PRIVATE | MAP_ANONYMOUS | MAP_LOCKED, 0, 0);
187 if (p == MAP_FAILED)
188 err(1, "mmap(lock) failed");

expect: invoke OOM killer.
result: not invoke OOM killer.


testcase 2: mmap without MAP_LOCKED flag and the call mlock (memsize = 8192)

185 p = mmap(NULL, memsize, PROT_WRITE | PROT_READ,
186 MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
187 if (p == MAP_FAILED)
188 err(1, "mmap(lock) failed");
189
190 if (mlock(p, memsize) == -1)
191 err(1, "mlock failed")

expect: invoke OOM killer.
result: invoke OOM killer.

in the Linux Programmer's Manual:

MAP_LOCKED (since Linux 2.5.37)
Lock the pages of the mapped region into memory in the manner
of mlock(2). This flag is ignored in older kernels.

and
mlock() locks pages in the address range starting at addr and
continuing for len bytes. All pages that contain a part of the
specified address range are guaranteed to be resident in RAM when the
call returns successfully; the pages are guaranteed to stay in RAM
until later unlocked.

According to the description in the manual, the two testcases are equivalent.

why the first testcase does not invoke OOM killer?
does the mmap with MAP_LOCKED flag will not immediately allocate physical memory?


Best Regards
Wang Long



\
 
 \ /
  Last update: 2015-01-19 07:41    [W:0.088 / U:1.372 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site