[RFC PATCH v4 0/3] mm: retry page faults under per-VMA lock when possible
Hongru Zhang <[email protected]> Tue, 4 Aug 2026 17:51:35 +0800
| 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