From: Xishi Qiu <qiuxishi@huawei.com>
To: Michal Hocko <mhocko@kernel.org>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>,
Vlastimil Babka <vbabka@suse.cz>,
Mel Gorman <mgorman@techsingularity.net>,
Linux MM <linux-mm@kvack.org>,
LKML <linux-kernel@vger.kernel.org>,
zhong jiang <zhongjiang@huawei.com>,
yeyunfeng <yeyunfeng@huawei.com>, <wanghaitao12@huawei.com>,
"Zhoukang (A)" <zhoukang7@huawei.com>
Subject: Re: [RFC] a question about mlockall() and mprotect()
Date: Tue, 26 Sep 2017 16:39:56 +0800 [thread overview]
Message-ID: <59CA125C.8000801@huawei.com> (raw)
In-Reply-To: <20170926081716.xo375arjoyu5ytcb@dhcp22.suse.cz>
On 2017/9/26 16:17, Michal Hocko wrote:
> On Tue 26-09-17 15:56:55, Xishi Qiu wrote:
>> When we call mlockall(), we will add VM_LOCKED to the vma,
>> if the vma prot is ---p,
>
> not sure what you mean here. apply_mlockall_flags will set the flag on
> all vmas except for special mappings (mlock_fixup). This phase will
> cause that memory reclaim will not free already mapped pages in those
> vmas (see page_check_references and the lazy mlock pages move to
> unevictable LRUs).
>
>> then mm_populate -> get_user_pages will not alloc memory.
>
> mm_populate all the vmas with pages. Well there are certainly some
> constrains - e.g. memory cgroup hard limit might be hit and so the
> faulting might fail.
>
>> I find it said "ignore errors" in mm_populate()
>> static inline void mm_populate(unsigned long addr, unsigned long len)
>> {
>> /* Ignore errors */
>> (void) __mm_populate(addr, len, 1);
>> }
>
> But we do not report the failure because any failure past
> apply_mlockall_flags would be tricky to handle. We have already dropped
> the mmap_sem lock so some other address space operations could have
> interfered.
>
>> And later we call mprotect() to change the prot, then it is
>> still not alloc memory for the mlocked vma.
>>
>> My question is that, shall we alloc memory if the prot changed,
>> and who(kernel, glibc, user) should alloc the memory?
>
> I do not understand your question but if you are asking how to get pages
> to map your vmas then touching that area will fault the memory in.
Hi Michal,
syscall mlockall() will first apply the VM_LOCKED to the vma, then
call mm_populate() to map the vmas.
mm_populate
populate_vma_page_range
__get_user_pages
check_vma_flags
And the above path maybe return -EFAULT in some case, right?
If we call mprotect() to change the prot of vma, just let
check_vma_flags() return 0, then we will get the mlocked pages
in following page-fault, right?
My question is that, shall we map the vmas immediately when
the prot changed? If we should map it immediately, who(kernel, glibc, user)
do this step?
Thanks,
Xishi Qiu
next prev parent reply other threads:[~2017-09-26 8:40 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-26 7:56 [RFC] a question about mlockall() and mprotect() Xishi Qiu
2017-09-26 8:17 ` Michal Hocko
2017-09-26 8:39 ` Xishi Qiu [this message]
2017-09-26 9:02 ` Michal Hocko
2017-09-26 9:13 ` Xishi Qiu
2017-09-26 9:18 ` Michal Hocko
2017-09-26 9:22 ` Xishi Qiu
2017-09-26 9:45 ` Vlastimil Babka
2017-09-26 11:00 ` Michal Hocko
2017-09-27 5:51 ` Xishi Qiu
2017-10-09 18:26 ` Michal Hocko
2017-10-10 1:22 ` Xishi Qiu
2017-10-10 5:50 ` Michal Hocko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=59CA125C.8000801@huawei.com \
--to=qiuxishi@huawei.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@techsingularity.net \
--cc=mhocko@kernel.org \
--cc=vbabka@suse.cz \
--cc=wanghaitao12@huawei.com \
--cc=yeyunfeng@huawei.com \
--cc=zhongjiang@huawei.com \
--cc=zhoukang7@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox