From: Yin Fengwei <fengwei.yin@intel.com>
To: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
akpm@linux-foundation.org, yuzhao@google.com,
willy@infradead.org, david@redhat.com, ryan.roberts@arm.com,
shy828301@gmail.com, hughd@google.com
Cc: fengwei.yin@intel.com
Subject: [PATCH 0/3] support large folio for mlock
Date: Fri, 28 Jul 2023 15:09:26 +0800 [thread overview]
Message-ID: <20230728070929.2487065-1-fengwei.yin@intel.com> (raw)
Yu mentioned at [1] about the mlock() can't be applied to large folio.
I leant the related code and here is my understanding:
- For RLIMIT_MEMLOCK related, there is no problem. Becuase the
RLIMIT_MEMLOCK statistics is not related underneath page. That means
underneath page mlock or munlock doesn't impact the RLIMIT_MEMLOCK
statistics collection which is always correct.
- For keeping the page in RAM, there is no problem either. At least,
during try_to_unmap_one(), once detect the VMA has VM_LOCKED bit
set in vm_flags, the folio will be kept whatever the folio is
mlocked or not.
So the function of mlock for large folio works. But it's not optimized
because the page reclaim needs scan these large folio and may split
them.
This series identified the large folio for mlock to two types:
- The large folio is in VM_LOCKED VMA range
- The large folio cross VM_LOCKED VMA boundary
For the first type, we mlock large folio so page relcaim will skip it.
For the second type, we don't mlock large folio. It's allowed to be
picked by page reclaim and be split. So the pages not in VM_LOCKED VMA
range are allowed to be reclaimed/released.
patch1 introduce API to check whether large folio is in VMA range.
patch2 make page reclaim/mlock_vma_folio/munlock_vma_folio support
large folio mlock/munlock.
patch3 make mlock/munlock syscall support large folio.
testing done:
- kernel selftest. No extra failure introduced
RFC v2 was post here [2].
Yu also mentioned a race which can make folio unevictable after munlock
during RFC v2 discussion [3]:
We decided that race issue didn't block this series based on:
- That race issue was not introduced by this sereis
- We had a looks-ok fix for that race issue. Need to wait
for mlock_count fixing patch as Yosry Ahmed suggested [4]
ChangeLog from RFC v2:
- Removed RFC
- dropped folio_is_large() check as suggested by both Yu and Huge
- Besides the address/pgoff check, also check the page table
entry when check whether the folio is in the range. This is
to handle mremap case that address/pgoff is in range, but
folio can't be identified as in range.
- Fixed one issue in page_add_anon_rmap() and page_add_anon_rmap()
introdued by RFC v2. As these two functions can be called multiple
times against one folio. And remove_rmap() may not be called same
times. Which can bring imbalanced mlock_count. Fix it by skip
mlock large folio in these two functions.
[1] https://lore.kernel.org/linux-mm/CAOUHufbtNPkdktjt_5qM45GegVO-rCFOMkSh0HQminQ12zsV8Q@mail.gmail.com/
[2] https://lore.kernel.org/linux-mm/20230712060144.3006358-1-fengwei.yin@intel.com/
[3] https://lore.kernel.org/linux-mm/CAOUHufZ6=9P_=CAOQyw0xw-3q707q-1FVV09dBNDC-hpcpj2Pg@mail.gmail.com/
[4] https://lore.kernel.org/linux-mm/CAJD7tkZJFG=7xs=9otc5CKs6odWu48daUuZP9Wd9Z-sZF07hXg@mail.gmail.com/
Yin Fengwei (3):
mm: add functions folio_in_range() and folio_within_vma()
mm: handle large folio when large folio in VM_LOCKED VMA range
mm: mlock: update mlock_pte_range to handle large folio
mm/internal.h | 87 +++++++++++++++++++++++++++++++++++++++++++++------
mm/mlock.c | 57 +++++++++++++++++++++++++++++++--
mm/rmap.c | 27 +++++++++++-----
3 files changed, 153 insertions(+), 18 deletions(-)
--
2.39.2
next reply other threads:[~2023-07-28 7:11 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-28 7:09 Yin Fengwei [this message]
2023-07-28 7:09 ` [PATCH 1/3] mm: add functions folio_in_range() and folio_within_vma() Yin Fengwei
2023-07-28 18:34 ` Andrew Morton
2023-07-29 13:54 ` Yin, Fengwei
2023-08-02 11:14 ` Ryan Roberts
2023-08-02 11:35 ` Ryan Roberts
2023-08-02 13:12 ` Yin, Fengwei
2023-08-02 15:12 ` Ryan Roberts
2023-08-03 1:36 ` Yin Fengwei
2023-08-02 12:50 ` Yin, Fengwei
2023-08-02 13:09 ` Ryan Roberts
2023-08-02 13:46 ` Yin, Fengwei
2023-08-02 14:08 ` Ryan Roberts
2023-08-02 14:14 ` Yin, Fengwei
2023-08-02 14:59 ` Ryan Roberts
2023-08-03 0:24 ` Yin Fengwei
2023-08-02 15:15 ` Ryan Roberts
2023-08-03 0:41 ` Yin Fengwei
2023-08-03 9:58 ` Ryan Roberts
2023-08-03 10:48 ` Yin Fengwei
2023-08-03 13:20 ` Ryan Roberts
2023-08-03 23:15 ` Yin, Fengwei
2023-08-04 8:46 ` Ryan Roberts
2023-08-04 9:05 ` Yin, Fengwei
2023-07-28 7:09 ` [PATCH 2/3] mm: handle large folio when large folio in VM_LOCKED VMA range Yin Fengwei
2023-07-28 7:09 ` [PATCH 3/3] mm: mlock: update mlock_pte_range to handle large folio Yin Fengwei
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=20230728070929.2487065-1-fengwei.yin@intel.com \
--to=fengwei.yin@intel.com \
--cc=akpm@linux-foundation.org \
--cc=david@redhat.com \
--cc=hughd@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ryan.roberts@arm.com \
--cc=shy828301@gmail.com \
--cc=willy@infradead.org \
--cc=yuzhao@google.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