Re: [PATCH v2] mm/mglru: Fix young counter undercount for large folios
From: Barry Song
Date: Thu Aug 13 2026 - 02:36:19 EST
On Thu, Aug 13, 2026 at 2:10 PM Hui Zhu <hui.zhu@xxxxxxxxx> wrote:
>
> From: Hui Zhu <zhuhui@xxxxxxxxxx>
>
> lru_gen_look_around() feeds its local 'young' counter into
> suitable_to_scan(), which decides whether the current PMD is added to
> the bloom filter and checked again on the next aging round.
>
> The folio triggering the look-around is processed at function entry:
> test_and_clear_young_ptes_notify() clears the accessed bits of the nr
> PTEs it maps, and the function bails out if none of them is young. The
> loop that follows therefore never recounts this folio, since its
> accessed bits are already cleared. Every other young folio the loop
> finds is accounted as a batch (young += nr), where nr is the number of
> consecutive PTEs it maps. The triggering folio, however, still
> contributes a fixed young = 1 regardless of its size -- a leftover from
> before PTE batching. A large triggering folio is thus accounted
> inconsistently with the rest of the window.
>
> Initialize young to nr so the triggering folio is accounted the same way
> as any other young folio batch in the loop.
>
> Note this is a deliberate overestimate, not a measured value. The
> test-and-clear helper only reports whether any of the nr PTEs is young,
> not how many were accessed, so the true number of accessed PTEs in a
> large folio is unknown and can be smaller than nr. Counting the full
> batch is intentional: the mm core tracks accessed/dirty state per folio,
> not per page, so a per-page count is neither obtainable nor meaningful.
> The only consumer is suitable_to_scan(), and the bloom filter it feeds
> tolerates error. Overestimating is also the safe direction: at worst a
> PMD that saw little access is rescanned, whereas underestimating could
> skip rescanning a PMD whose folios are still hot and reclaim them
> incorrectly. (nr here is the PTE batch size, not necessarily
> folio_nr_pages().)
>
> Fixes: 56e5b60b2114 ("mm: support batched checking of the young flag for MGLRU")
> Signed-off-by: Hui Zhu <zhuhui@xxxxxxxxxx>
> Reviewed-by: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx>
LGTM, thanks!
Reviewed-by: Barry Song <baohua@xxxxxxxxxx>