All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH v2 0/3] support large folio for mlock
@ 2023-07-12  6:01 Yin Fengwei
  2023-07-12  6:01 ` [RFC PATCH v2 1/3] mm: add functions folio_in_range() and folio_within_vma() Yin Fengwei
                   ` (2 more replies)
  0 siblings, 3 replies; 42+ messages in thread
From: Yin Fengwei @ 2023-07-12  6:01 UTC (permalink / raw)
  To: linux-mm, linux-kernel, akpm, yuzhao, willy, david, ryan.roberts,
	shy828301
  Cc: fengwei.yin

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

Matthew commented on v1 that the large folio should be split if it
crosses the VMA boundaries. But there is no obvious correct method
to handle split failure and it's a common issue for mprotect,
mlock, mremap, munmap....

So I keep v1 behaivor (not split folio if it crosses VMA boundaries)
in v2.

[1] https://lore.kernel.org/linux-mm/CAOUHufbtNPkdktjt_5qM45GegVO-rCFOMkSh0HQminQ12zsV8Q@mail.gmail.com/

Changes from v1:
  patch1:
    - Add new function folio_within_vma() based on folio_in_range()
      per Yu's suggestion

  patch2:
    - Update folio_referenced_one() to skip the entries which are
      out of VM_LOCKED VMA range if the large folio cross VMA
      boundaries per Yu's suggestion

  patch3:
    - Simplify the changes in mlock_pte_range() by introduing two
      helper functions should_mlock_folio() and get_folio_mlock_step()
      per Yu's suggestion


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 |  43 +++++++++++++++++++--
 mm/mlock.c    | 104 +++++++++++++++++++++++++++++++++++++++++++++++---
 mm/rmap.c     |  34 +++++++++++++----
 3 files changed, 166 insertions(+), 15 deletions(-)

-- 
2.39.2


^ permalink raw reply	[flat|nested] 42+ messages in thread

end of thread, other threads:[~2023-07-27  0:17 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-12  6:01 [RFC PATCH v2 0/3] support large folio for mlock Yin Fengwei
2023-07-12  6:01 ` [RFC PATCH v2 1/3] mm: add functions folio_in_range() and folio_within_vma() Yin Fengwei
2023-07-12  6:11   ` Yu Zhao
2023-07-12  6:01 ` [RFC PATCH v2 2/3] mm: handle large folio when large folio in VM_LOCKED VMA range Yin Fengwei
2023-07-12  6:23   ` Yu Zhao
2023-07-12  6:43     ` Yin Fengwei
2023-07-12 17:03       ` Yu Zhao
2023-07-13  1:55         ` Yin Fengwei
2023-07-14  2:21       ` Hugh Dickins
2023-07-14  2:49         ` Yin, Fengwei
2023-07-14  3:41           ` Hugh Dickins
2023-07-14  5:45             ` Yin, Fengwei
2023-07-12  6:01 ` [RFC PATCH v2 3/3] mm: mlock: update mlock_pte_range to handle large folio Yin Fengwei
2023-07-12  6:31   ` Yu Zhao
2023-07-15  6:06     ` Yu Zhao
2023-07-16 23:59       ` Yin, Fengwei
2023-07-17  0:35         ` Yu Zhao
2023-07-17  1:58           ` Yin Fengwei
2023-07-18 22:48             ` Yosry Ahmed
2023-07-18 23:47               ` Yin Fengwei
2023-07-19  1:32                 ` Yosry Ahmed
2023-07-19  1:52                   ` Yosry Ahmed
2023-07-19  1:57                     ` Yin Fengwei
2023-07-19  2:00                       ` Yosry Ahmed
2023-07-19  2:09                         ` Yin Fengwei
2023-07-19  2:22                           ` Yosry Ahmed
2023-07-19  2:28                             ` Yin Fengwei
2023-07-19 14:26                               ` Hugh Dickins
2023-07-19 15:44                                 ` Yosry Ahmed
2023-07-20 12:02                                   ` Yin, Fengwei
2023-07-20 20:51                                     ` Yosry Ahmed
2023-07-21  1:12                                       ` Yin, Fengwei
2023-07-21  1:35                                         ` Yosry Ahmed
2023-07-21  3:18                                           ` Yin, Fengwei
2023-07-21  3:39                                             ` Yosry Ahmed
2023-07-20  1:52                                 ` Yin, Fengwei
2023-07-17  8:12           ` Yin Fengwei
2023-07-18  2:06             ` Yin Fengwei
2023-07-18  3:59               ` Yu Zhao
2023-07-26 12:49       ` Yin Fengwei
2023-07-26 16:57         ` Yu Zhao
2023-07-27  0:15           ` Yin Fengwei

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.