From: Vlastimil Babka <vbabka@suse.cz>
To: Eric B Munson <emunson@akamai.com>, Michal Hocko <mhocko@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Shuah Khan <shuahkh@osg.samsung.com>,
Michael Kerrisk <mtk.manpages@gmail.com>,
Jonathan Corbet <corbet@lwn.net>,
Ralf Baechle <ralf@linux-mips.org>,
linux-alpha@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-mips@linux-mips.org, linux-parisc@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, sparclinux@vger.kernel.org,
linux-xtensa@linux-xtensa.org, linux-mm@kvack.org,
linux-arch@vger.kernel.org, linux-api@vger.kernel.org
Subject: Re: [PATCH V5 0/7] Allow user to request memory to be locked on page fault
Date: Tue, 28 Jul 2015 17:10:55 +0200 [thread overview]
Message-ID: <55B79B7F.9010604@suse.cz> (raw)
In-Reply-To: <20150728134942.GB2407@akamai.com>
On 07/28/2015 03:49 PM, Eric B Munson wrote:
> On Tue, 28 Jul 2015, Michal Hocko wrote:
>
[...]
> The only
> remaining question I have is should we have 2 new mlockall flags so that
> the caller can explicitly set VM_LOCKONFAULT in the mm->def_flags vs
> locking all current VMAs on fault. I ask because if the user wants to
> lock all current VMAs the old way, but all future VMAs on fault they
> have to call mlockall() twice:
>
> mlockall(MCL_CURRENT);
> mlockall(MCL_CURRENT | MCL_FUTURE | MCL_ONFAULT);
>
> This has the side effect of converting all the current VMAs to
> VM_LOCKONFAULT, but because they were all made present and locked in the
> first call, this should not matter in most cases.
Shouldn't the user be able to do this?
mlockall(MCL_CURRENT)
mlockall(MCL_FUTURE | MCL_ONFAULT);
Note that the second call shouldn't change (i.e. munlock) existing vma's
just because MCL_CURRENT is not present. The current implementation
doesn't do that thanks to the following in do_mlockall():
if (flags == MCL_FUTURE)
goto out;
before current vma's are processed and MCL_CURRENT is checked. This is
probably so that do_mlockall() can also handle the munlockall() syscall.
So we should be careful not to break this, but otherwise there are no
limitations by not having two MCL_ONFAULT flags. Having to do invoke
syscalls instead of one is not an issue as this shouldn't be frequent
syscall.
> The catch is that,
> like mmap(MAP_LOCKED), mlockall() does not communicate if mm_populate()
> fails. This has been true of mlockall() from the beginning so I don't
> know if it needs more than an entry in the man page to clarify (which I
> will add when I add documentation for MCL_ONFAULT).
Good point.
> In a much less
> likely corner case, it is not possible in the current setup to request
> all current VMAs be VM_LOCKONFAULT and all future be VM_LOCKED.
So again this should work:
mlockall(MCL_CURRENT | MCL_ONFAULT)
mlockall(MCL_FUTURE);
But the order matters here, as current implementation of do_mlockall()
will clear VM_LOCKED from def_flags if MCL_FUTURE is not passed. So
*it's different* from how it handles MCL_CURRENT (as explained above).
And not documented in manpage. Oh crap, this API is a closet full of
skeletons. Maybe it was an unnoticed regression and we can restore some
sanity?
WARNING: multiple messages have this Message-ID (diff)
From: Vlastimil Babka <vbabka@suse.cz>
To: Eric B Munson <emunson@akamai.com>, Michal Hocko <mhocko@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Shuah Khan <shuahkh@osg.samsung.com>,
Michael Kerrisk <mtk.manpages@gmail.com>,
Jonathan Corbet <corbet@lwn.net>,
Ralf Baechle <ralf@linux-mips.org>,
linux-alpha@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-mips@linux-mips.org, linux-parisc@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, sparclinux@vger.kernel.org,
linux-xtensa@linux-xtensa.org, linux-mm@kvack.org,
linux-arch@vger.kernel.org, linux-api@vger.kernel.org
Subject: Re: [PATCH V5 0/7] Allow user to request memory to be locked on page fault
Date: Tue, 28 Jul 2015 15:10:55 +0000 [thread overview]
Message-ID: <55B79B7F.9010604@suse.cz> (raw)
In-Reply-To: <20150728134942.GB2407@akamai.com>
On 07/28/2015 03:49 PM, Eric B Munson wrote:
> On Tue, 28 Jul 2015, Michal Hocko wrote:
>
[...]
> The only
> remaining question I have is should we have 2 new mlockall flags so that
> the caller can explicitly set VM_LOCKONFAULT in the mm->def_flags vs
> locking all current VMAs on fault. I ask because if the user wants to
> lock all current VMAs the old way, but all future VMAs on fault they
> have to call mlockall() twice:
>
> mlockall(MCL_CURRENT);
> mlockall(MCL_CURRENT | MCL_FUTURE | MCL_ONFAULT);
>
> This has the side effect of converting all the current VMAs to
> VM_LOCKONFAULT, but because they were all made present and locked in the
> first call, this should not matter in most cases.
Shouldn't the user be able to do this?
mlockall(MCL_CURRENT)
mlockall(MCL_FUTURE | MCL_ONFAULT);
Note that the second call shouldn't change (i.e. munlock) existing vma's
just because MCL_CURRENT is not present. The current implementation
doesn't do that thanks to the following in do_mlockall():
if (flags = MCL_FUTURE)
goto out;
before current vma's are processed and MCL_CURRENT is checked. This is
probably so that do_mlockall() can also handle the munlockall() syscall.
So we should be careful not to break this, but otherwise there are no
limitations by not having two MCL_ONFAULT flags. Having to do invoke
syscalls instead of one is not an issue as this shouldn't be frequent
syscall.
> The catch is that,
> like mmap(MAP_LOCKED), mlockall() does not communicate if mm_populate()
> fails. This has been true of mlockall() from the beginning so I don't
> know if it needs more than an entry in the man page to clarify (which I
> will add when I add documentation for MCL_ONFAULT).
Good point.
> In a much less
> likely corner case, it is not possible in the current setup to request
> all current VMAs be VM_LOCKONFAULT and all future be VM_LOCKED.
So again this should work:
mlockall(MCL_CURRENT | MCL_ONFAULT)
mlockall(MCL_FUTURE);
But the order matters here, as current implementation of do_mlockall()
will clear VM_LOCKED from def_flags if MCL_FUTURE is not passed. So
*it's different* from how it handles MCL_CURRENT (as explained above).
And not documented in manpage. Oh crap, this API is a closet full of
skeletons. Maybe it was an unnoticed regression and we can restore some
sanity?
WARNING: multiple messages have this Message-ID (diff)
From: Vlastimil Babka <vbabka@suse.cz>
To: Eric B Munson <emunson@akamai.com>, Michal Hocko <mhocko@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Shuah Khan <shuahkh@osg.samsung.com>,
Michael Kerrisk <mtk.manpages@gmail.com>,
Jonathan Corbet <corbet@lwn.net>,
Ralf Baechle <ralf@linux-mips.org>,
linux-alpha@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-mips@linux-mips.org, linux-parisc@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, sparclinux@vger.kernel.org,
linux-xtensa@linux-xtensa.org, linux-mm@kvack.org,
linux-arch@vger.kernel.org, linux-api@vger.kernel.org
Subject: Re: [PATCH V5 0/7] Allow user to request memory to be locked on page fault
Date: Tue, 28 Jul 2015 17:10:55 +0200 [thread overview]
Message-ID: <55B79B7F.9010604@suse.cz> (raw)
In-Reply-To: <20150728134942.GB2407@akamai.com>
On 07/28/2015 03:49 PM, Eric B Munson wrote:
> On Tue, 28 Jul 2015, Michal Hocko wrote:
>
[...]
> The only
> remaining question I have is should we have 2 new mlockall flags so that
> the caller can explicitly set VM_LOCKONFAULT in the mm->def_flags vs
> locking all current VMAs on fault. I ask because if the user wants to
> lock all current VMAs the old way, but all future VMAs on fault they
> have to call mlockall() twice:
>
> mlockall(MCL_CURRENT);
> mlockall(MCL_CURRENT | MCL_FUTURE | MCL_ONFAULT);
>
> This has the side effect of converting all the current VMAs to
> VM_LOCKONFAULT, but because they were all made present and locked in the
> first call, this should not matter in most cases.
Shouldn't the user be able to do this?
mlockall(MCL_CURRENT)
mlockall(MCL_FUTURE | MCL_ONFAULT);
Note that the second call shouldn't change (i.e. munlock) existing vma's
just because MCL_CURRENT is not present. The current implementation
doesn't do that thanks to the following in do_mlockall():
if (flags == MCL_FUTURE)
goto out;
before current vma's are processed and MCL_CURRENT is checked. This is
probably so that do_mlockall() can also handle the munlockall() syscall.
So we should be careful not to break this, but otherwise there are no
limitations by not having two MCL_ONFAULT flags. Having to do invoke
syscalls instead of one is not an issue as this shouldn't be frequent
syscall.
> The catch is that,
> like mmap(MAP_LOCKED), mlockall() does not communicate if mm_populate()
> fails. This has been true of mlockall() from the beginning so I don't
> know if it needs more than an entry in the man page to clarify (which I
> will add when I add documentation for MCL_ONFAULT).
Good point.
> In a much less
> likely corner case, it is not possible in the current setup to request
> all current VMAs be VM_LOCKONFAULT and all future be VM_LOCKED.
So again this should work:
mlockall(MCL_CURRENT | MCL_ONFAULT)
mlockall(MCL_FUTURE);
But the order matters here, as current implementation of do_mlockall()
will clear VM_LOCKED from def_flags if MCL_FUTURE is not passed. So
*it's different* from how it handles MCL_CURRENT (as explained above).
And not documented in manpage. Oh crap, this API is a closet full of
skeletons. Maybe it was an unnoticed regression and we can restore some
sanity?
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2015-07-28 15:10 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-24 21:28 [PATCH V5 0/7] Allow user to request memory to be locked on page fault Eric B Munson
2015-07-24 21:28 ` Eric B Munson
2015-07-24 21:28 ` Eric B Munson
2015-07-24 21:28 ` [PATCH V5 1/7] mm: mlock: Refactor mlock, munlock, and munlockall code Eric B Munson
2015-07-24 21:28 ` Eric B Munson
2015-07-27 6:31 ` Kirill A. Shutemov
2015-07-27 6:31 ` Kirill A. Shutemov
2015-07-24 21:28 ` [PATCH V5 2/7] mm: mlock: Add new mlock system call Eric B Munson
2015-07-24 21:28 ` Eric B Munson
2015-07-24 21:28 ` Eric B Munson
2015-07-24 21:28 ` Eric B Munson
2015-07-24 21:28 ` Eric B Munson
2015-07-27 6:43 ` Kirill A. Shutemov
2015-07-27 6:43 ` Kirill A. Shutemov
2015-07-27 6:43 ` Kirill A. Shutemov
2015-07-27 6:43 ` Kirill A. Shutemov
2015-07-27 6:43 ` Kirill A. Shutemov
2015-07-27 6:43 ` Kirill A. Shutemov
2015-07-24 21:28 ` Eric B Munson
2015-07-24 21:28 ` [PATCH V5 3/7] mm: Introduce VM_LOCKONFAULT Eric B Munson
2015-07-24 21:28 ` Eric B Munson
[not found] ` <1437773325-8623-4-git-send-email-emunson-JqFfY2XvxFXQT0dZR+AlfA@public.gmane.org>
2015-07-27 7:02 ` Kirill A. Shutemov
2015-07-27 7:02 ` Kirill A. Shutemov
2015-07-27 7:02 ` Kirill A. Shutemov
2015-07-24 21:28 ` [PATCH V5 4/7] mm: mlock: Add mlock flags to enable VM_LOCKONFAULT usage Eric B Munson
2015-07-24 21:28 ` Eric B Munson
2015-07-24 21:28 ` Eric B Munson
2015-07-27 7:15 ` Kirill A. Shutemov
2015-07-27 7:15 ` Kirill A. Shutemov
2015-07-27 7:15 ` Kirill A. Shutemov
2015-07-24 21:28 ` [PATCH V5 5/7] mm: mmap: Add mmap flag to request VM_LOCKONFAULT Eric B Munson
2015-07-24 21:28 ` Eric B Munson
2015-07-24 21:28 ` Eric B Munson
2015-07-27 7:31 ` Kirill A. Shutemov
2015-07-27 7:31 ` Kirill A. Shutemov
2015-07-27 7:31 ` Kirill A. Shutemov
2015-07-27 13:41 ` Eric B Munson
2015-07-27 13:41 ` Eric B Munson
2015-07-27 14:03 ` Kirill A. Shutemov
2015-07-27 14:03 ` Kirill A. Shutemov
2015-07-27 14:03 ` Kirill A. Shutemov
2015-07-27 14:11 ` Eric B Munson
2015-07-27 14:11 ` Eric B Munson
2015-07-24 21:28 ` [PATCH V5 6/7] selftests: vm: Add tests for lock on fault Eric B Munson
2015-07-24 21:28 ` Eric B Munson
2015-07-24 21:28 ` [PATCH V5 7/7] mips: Add entry for new mlock2 syscall Eric B Munson
2015-07-24 21:28 ` Eric B Munson
2015-07-27 9:08 ` [PATCH V5 0/7] Allow user to request memory to be locked on page fault Vlastimil Babka
2015-07-27 9:08 ` Vlastimil Babka
2015-07-27 9:08 ` Vlastimil Babka
2015-07-27 13:35 ` Eric B Munson
2015-07-27 13:35 ` Eric B Munson
2015-07-27 14:16 ` Vlastimil Babka
2015-07-27 14:16 ` Vlastimil Babka
2015-07-27 14:16 ` Vlastimil Babka
2015-07-27 14:54 ` Eric B Munson
2015-07-27 14:54 ` Eric B Munson
2015-07-27 15:40 ` Vlastimil Babka
2015-07-27 15:40 ` Vlastimil Babka
2015-07-27 15:40 ` Vlastimil Babka
2015-07-28 11:17 ` Michal Hocko
2015-07-28 11:17 ` Michal Hocko
2015-07-28 11:17 ` Michal Hocko
2015-07-28 11:23 ` Vlastimil Babka
2015-07-28 11:23 ` Vlastimil Babka
2015-07-28 11:23 ` Vlastimil Babka
2015-07-28 13:49 ` Eric B Munson
2015-07-28 13:49 ` Eric B Munson
2015-07-28 15:10 ` Vlastimil Babka [this message]
2015-07-28 15:10 ` Vlastimil Babka
2015-07-28 15:10 ` Vlastimil Babka
2015-07-28 18:06 ` Eric B Munson
2015-07-28 18:06 ` Eric B Munson
2015-07-29 10:45 ` Michal Hocko
2015-07-29 10:45 ` Michal Hocko
2015-07-29 10:45 ` Michal Hocko
2015-07-29 10:49 ` Vlastimil Babka
2015-07-29 10:49 ` Vlastimil Babka
2015-07-29 10:49 ` Vlastimil Babka
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=55B79B7F.9010604@suse.cz \
--to=vbabka@suse.cz \
--cc=akpm@linux-foundation.org \
--cc=corbet@lwn.net \
--cc=emunson@akamai.com \
--cc=linux-alpha@vger.kernel.org \
--cc=linux-api@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=linux-mm@kvack.org \
--cc=linux-parisc@vger.kernel.org \
--cc=linux-xtensa@linux-xtensa.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mhocko@kernel.org \
--cc=mtk.manpages@gmail.com \
--cc=ralf@linux-mips.org \
--cc=shuahkh@osg.samsung.com \
--cc=sparclinux@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.