[PATCHv2 0/5] mm: Improve mlock tracking for large folios

Kiryl Shutsemau posted 5 patches 1 week, 5 days ago
There is a newer version of this series
include/linux/rmap.h |   5 +++
mm/memory.c          |   9 +---
mm/page_vma_mapped.c |   1 +
mm/rmap.c            | 101 +++++++++++++++++++++++--------------------
4 files changed, 61 insertions(+), 55 deletions(-)
[PATCHv2 0/5] mm: Improve mlock tracking for large folios
Posted by Kiryl Shutsemau 1 week, 5 days ago
From: Kiryl Shutsemau <kas@kernel.org>

The patchset includes several fixes and improvements related to mlock
tracking of large folios.

The main objective is to reduce the undercount of Mlocked memory in
/proc/meminfo and improve the accuracy of the statistics.

Patches 1-2:

These patches address a minor race condition in folio_referenced_one()
related to mlock_vma_folio().

Currently, mlock_vma_folio() is called on large folio without the page
table lock, which can result in a race condition with unmap (i.e.
MADV_DONTNEED). This can lead to partially mapped folios on the
unevictable LRU list.

While not a significant issue, I do not believe backporting is
necessary.

Patch 3:

This patch adds mlocking logic similar to folio_referenced_one() to
try_to_unmap_one(), allowing for mlocking of large folios where
possible.

Patch 4:

This patch modifies finish_fault() to fault in the entire folio when
possible, enabling efficient mlocking upon addition to the rmap.

Patch 5:

This patch ensures that rmap mlocks large folios if they are fully
mapped, addressing the primary source of mlock undercount for large
folios.

Kiryl Shutsemau (5):
  mm/page_vma_mapped: Track if the page is mapped across page table
    boundary
  mm/rmap: Fix a mlock race condition in folio_referenced_one()
  mm/rmap: mlock large folios in try_to_unmap_one()
  mm/fault: Try to map the entire file folio in finish_fault()
  mm/rmap: Improve mlock tracking for large folios

 include/linux/rmap.h |   5 +++
 mm/memory.c          |   9 +---
 mm/page_vma_mapped.c |   1 +
 mm/rmap.c            | 101 +++++++++++++++++++++++--------------------
 4 files changed, 61 insertions(+), 55 deletions(-)

-- 
2.50.1