On Aug 19, 2025, at 08:55, zhangqilong <zhangqilong3@huawei.com> wrote:


Hi all,

This patchset is introduced to make pagefault write-protect copy support
mthp, with this series, pagefault write-protect copy will have a 9-14%
performance improvement.

Currently pagefaults on anonymous pages support mthp [1], and hardware
features (such as arm64 contpte) can be used to store multiple ptes in one
TLB entry, reducing the probability of TLB misses. However, when the
process is forked and the cow is triggered again, the above optimization
effect is lost, and only 4KB is requested once at a time.

Therefore, make pagefault write-protect copy support mthp to maintain the
optimization effect of TLB and improve the efficiency of cow pagefault.

vm-scalability usemem shows a great improvement, test using: usemem -n
32 --prealloc --prefault 249062617 (result unit is KB/s, bigger is better)

|    size     | w/o patch | w/ patch  |  delta  |
|-------------|-----------|-----------|---------|
| baseline 4K | 723041.63 | 717643.21 | -0.75%  |
| mthp 16K    | 732871.14 | 799513.18 | +9.09%  |
| mthp 32K    | 746060.91 | 836261.83 | +12.09% |
| mthp 64K    | 747333.18 | 855570.43 | +14.48% |

This series is based on Linux v6.16 (038d61fd6422).

Thanks,
Vernon

[1] https://lore.kernel.org/all/20231207161211.2374093-1-
ryan.roberts@arm.com/

Vernon Yang (7):
mm: memory: replace single-operation with multi-operation in wp
mm: memory: add ptep_clear_flush_range function
mm: memory: add kmsan_copy_pages_meta function
mm: memory: add offset to start copy for copy_user_gigantic_page
mm: memory: improve wp_page_copy readability
mm: memory: add mTHP support for wp

Oh, we are also doing similar optimizations, but only for the code segment. :)

Good! You use a similar optimizations in your code segment, which mthp size 
do you use? 


selftests: mm: support wp mTHP collapse testing

include/linux/huge_mm.h                 |   3 +
include/linux/kmsan.h                   |  13 +-
include/linux/mm.h                      |   8 +
include/linux/pgtable.h                 |   3 +
mm/hugetlb.c                            |   6 +-
mm/kmsan/shadow.c                       |  26 +-
mm/memory.c                             | 309 ++++++++++++++++++------
mm/pgtable-generic.c                    |  20 ++
tools/testing/selftests/mm/khugepaged.c |   5 +-
9 files changed, 302 insertions(+), 91 deletions(-)

--
2.50.1