Re: [PATCH v1 2/2] mm/memory: add anonymous mTHP folios to deferred split list
Johannes Weiner <[email protected]> Tue, 4 Aug 2026 10:03:41 -0400
| Newsgroups | org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On Tue, Aug 04, 2026 at 10:03:14AM +0800, Barry Song wrote: > On Tue, Aug 4, 2026 at 8:48 AM Johannes Weiner <[email protected]> wrote: > > > [...] > > > > > > #define LARGE_FOLIO_ZERO_SCAN_MIN_SIZE SZ_2M > > > > > > if (folio_size(folio) >= LARGE_FOLIO_ZERO_SCAN_MIN_SIZE) > > > deferred_split_folio(folio, false); > > > > > > If, someday, people find that 1 MiB also helps, they can provide > > > data to support it. > > > > I am very confused. Did you not see my proposal above? > > > > Why not this? > > Hi Johannes, > > For arm64, if the base page size is 64KB, a PMD would be 512MB, > and PMD-1 would be 256MB. Usama mentioned 2MB, which is just > order-5, not PMD-1 on arm64. > > BTW, I assume khugepaged_max_ptes_none is intended for collapse, > not splitting. I am a bit concerned that reusing it for this > purpose would be quite disruptive. It already is: static bool thp_underused(struct folio *folio) { int num_zero_pages = 0, num_filled_pages = 0; int i; if (khugepaged_max_ptes_none == HPAGE_PMD_NR - 1) return false; if (folio_contain_hwpoisoned_page(folio)) return false; for (i = 0; i < folio_nr_pages(folio); i++) { if (pages_identical(folio_page(folio, i), ZERO_PAGE(0))) { if (++num_zero_pages > khugepaged_max_ptes_none) return true; } else { /* * Another path for early exit once the number * of non-zero filled pages exceeds threshold. */ if (++num_filled_pages >= HPAGE_PMD_NR - khugepaged_max_ptes_none) return false; } } return false; } That's ABI and setups are relying on it. All I'm proposing is to only queue pages that the shrinker would actually split under currently existing rules. That's a mostly transparent optimization, not a new policy. No new sysctls. No new policy hardcoded in kernel code. Default behavior remains unchanged.