Re: [PATCH v3] ksm: use range-walk function to jump over holes in scan_get_next_rmap_item

From: David Hildenbrand

Date: Fri Oct 17 2025 - 11:45:02 EST


On 16.10.25 03:22, Pedro Demarchi Gomes wrote:
Currently, scan_get_next_rmap_item() walks every page address in a VMA
to locate mergeable pages. This becomes highly inefficient when scanning
large virtual memory areas that contain mostly unmapped regions.

This patch replaces the per-address lookup with a range walk using
walk_page_range(). The range walker allows KSM to skip over entire
unmapped holes in a VMA, avoiding unnecessary lookups.
This problem was previously discussed in [1].

[1] https://lore.kernel.org/linux-mm/423de7a3-1c62-4e72-8e79-19a6413e420c@xxxxxxxxxx/

---

v3:
- Treat THPs in ksm_pmd_entry
- Update ksm_scan.address outside walk_page_range
- Change goto to while loop

v2: https://lore.kernel.org/all/20251014151126.87589-1-pedrodemargomes@xxxxxxxxx/
- Use pmd_entry to walk page range
- Use cond_resched inside pmd_entry()
- walk_page_range returns page+folio

v1: https://lore.kernel.org/all/20251014055828.124522-1-pedrodemargomes@xxxxxxxxx/

Reported-by: craftfever <craftfever@xxxxxxxxxx>
Closes: https://lkml.kernel.org/r/020cf8de6e773bb78ba7614ef250129f11a63781@xxxxxxxxx
Suggested-by: David Hildenbrand <david@xxxxxxxxxx>
Signed-off-by: Pedro Demarchi Gomes <pedrodemargomes@xxxxxxxxx>
---

This patch will need some more work.

@Andrew, please drop it for now.

--
Cheers

David / dhildenb