[RFC PATCH v4 0/3] mm: retry page faults under per-VMA lock when possible

Hongru Zhang <[email protected]>
Newsgroups gmane.linux.kernel,gmane.linux.kernel.mm
Message-ID <[email protected]>
This v4 reworks the v3 approach in response to review feedback: it keeps
VM_FAULT_RETRY unchanged and introduces VM_FAULT_MAY_USE_VMA_LOCK as an
advisory opt-in bit. Fault handlers can return
VM_FAULT_RETRY | VM_FAULT_MAY_USE_VMA_LOCK when a retry may continue
under the per-VMA lock, and architecture fault handlers perform at most
one bounded VMA-lock retry by setting FAULT_FLAG_TRIED before retrying.
This preserves the existing fallback behavior for retry paths that do
not opt in.

Patch 1 adds the new advisory bit and the bounded retry plumbing.
Patch 2 lets filemap faults opt in to VMA-lock retry.
Patch 3 lets swap faults opt in to VMA-lock retry.

We tested this on a 20-core Intel i7-12700 desktop with a 2GB swapfile.
For the filemap workload, we adapted the v2 stress model to a 20-core
desktop by reducing the thread count and adjusting the memcg limits. The
benchmark uses concurrent file-backed page faults under memcg pressure
with parallel munmap to amplify mmap_lock read-write contention.
Throughput improved by 31.3% to 69.5%, while mmap_lock contention
dropped by about 97.8% to 97.9%.

For the swap workload, we use a non-zero anonymous mapping under memcg
pressure with optional mmap writer threads. Throughput improved by 6.3%
to 47.1%, with the largest gain under four mmap writers.

The detailed benchmark tables are in the individual patch changelogs.
Build testing was done with C=1 on x86, arm, arm64, loongarch, powerpc,
riscv and s390, with no new warnings in the touched files.

Changes since v3:
- Keep VM_FAULT_RETRY unchanged and add VM_FAULT_MAY_USE_VMA_LOCK as an advisory bit
- Bound VMA-lock retries with FAULT_FLAG_TRIED
- Opt in filemap_fault() and do_swap_page() to VM_FAULT_MAY_USE_VMA_LOCK
- Rebased on mm-unstable

Link to v3:
https://lore.kernel.org/all/[email protected]/

Link to v2:
https://lore.kernel.org/all/[email protected]/

Link to v1:
https://lore.kernel.org/all/[email protected]/

Hongru Zhang (3):
  mm: allow page faults to request VMA-lock retry
  mm/filemap: allow filemap faults to retry under the VMA lock
  mm/swap: allow swap faults to retry under the VMA lock

 arch/arm/mm/fault.c       |  6 ++++--
 arch/arm64/mm/fault.c     |  7 +++++--
 arch/loongarch/mm/fault.c |  6 ++++--
 arch/powerpc/mm/fault.c   |  6 ++++--
 arch/riscv/mm/fault.c     |  6 ++++--
 arch/s390/mm/fault.c      |  5 +++--
 arch/x86/mm/fault.c       |  6 ++++--
 include/linux/mm.h        | 28 ++++++++++++++++++++++++++++
 include/linux/mm_types.h  |  4 ++++
 mm/filemap.c              |  2 +-
 mm/memory.c               |  4 +++-
 11 files changed, 64 insertions(+), 16 deletions(-)


base-commit: 486855239e38a91d3eae26618ccb7845c1764625
-- 
2.43.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.