Re: [RFC] mm/swap.c: Enable promotion of unmapped MGLRU page cache pages

From: Matthew Wilcox
Date: Wed Jan 15 2025 - 08:25:44 EST


On Wed, Jan 15, 2025 at 06:06:25AM -0600, Donet Tom wrote:
> An MGLRU page cache page is eligible for promotion when:
>
> 1. Memory Tiering and pagecache_promotion_enabled are enabled
> 2. It resides in a lower memory tier.
> 3. It is referenced.
> 4. It is part of the working set.
> 5. It belongs to the active list.
> For MGLRU, the youngest generation and the youngest generation - 1
> are treated as the active list.

... why do you only promote folios if they belong to a memcg?

> +promo_candid:
> + if (!folio_test_isolated(folio) &&
> + (sysctl_numa_balancing_mode & NUMA_BALANCING_MEMORY_TIERING) &&
> + numa_pagecache_promotion_enabled) {
> + memcg = folio_memcg(folio);
> + if (memcg) {
> + lruvec = mem_cgroup_lruvec(memcg, folio_pgdat(folio));
> + gen = folio_lru_gen(folio);
> +
> + if ((gen < MAX_NR_GENS) && lru_gen_is_active(lruvec, gen))
> + promotion_candidate(folio);
> + }

Should there be an 'else' clause here? Or should it be:

lruvec = mem_cgroup_lruvec(memcg, folio_pgdat(folio));
gen = folio_lru_gen(folio);
if ((gen < MAX_NR_GENS) && lru_gen_is_active(lruvec, gen))
promotion_candidate(folio);