Re: does the semantics of MAP_LOCKED is equal to mlock() function?

From: long.wanglong
Date: Mon Jan 19 2015 - 22:24:16 EST


On 2015/1/19 19:01, Michal Hocko wrote:
> On Mon 19-01-15 10:46:56, Michal Hocko wrote:
> [...]
>>> 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.
>
> Are you sure about this? memcg OOM killer shouldn't trigger even from
> mlock path. It should just lead to ENOMEM. If you see the OOM killer
> then it is probably coming from a page fault from a different source.
> strace of your test would tell you more.
>
hi, Michal Hocko

sorry for the wrong description in the email. i run the two testcase in kernel v3.10.63, not
the latest kernel.

in kernel v3.18, the two testcases can not invoke OOM killer.

The problem comes from the LTP tests, because the v3.10.61 lts apply the following patch:

f8a5117916dd2871c056963bf5ee0d1101c10099 mm: memcg: handle non-error OOM situations more gracefully
f79d6a468980516cbfb9e01313c846b82b9d2e7e mm: memcg: do not trap chargers with full callstack on OOM
7a147e0c45a8fa198ade4128bdcbf8592f48843e mm: memcg: rework and document OOM waiting and wakeup
11f34787b50ce71f66b85ad8790beaa5eee3f897 mm: memcg: enable memcg OOM killer only for user faults

as you said in: http://marc.info/?l=linux-api&m=142122902613316&w=2

"
The primary issue is that mmap doesn't report a failure if MAP_LOCKED fails to populate the area. Is
this the correct/expected behavior?
"

There is another problem:

in kernel v3.10.63 testcase 1 can not invoke OOM, but testcase2 can invoke OOM.
in kernel v3.18 both testcase 1 and testcase 2 can not invoke OOM.

in kernel v3.10.63, why testcase2 can invoke OOM killer?

Thanks


Best Regards
Wang Long










--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/