Re: [PATCH v1 2/2] mm/memory: add anonymous mTHP folios to deferred split list

Barry Song <[email protected]> Tue, 4 Aug 2026 10:03:14 +0800
Newsgroups org.kvack.linux-mm
Message-ID <CAGsJ_4z7bsDzMtO5PzaSHV4CBYBFS=wmmG3H8xfj-mdUo4VyxA@mail.gmail.com>
On Tue, Aug 4, 2026 at 8:48=E2=80=AFAM Johannes Weiner <[email protected]>=
 wrote:
>
[...]
> >
> > #define LARGE_FOLIO_ZERO_SCAN_MIN_SIZE SZ_2M
> >
> > if (folio_size(folio) >=3D 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.

So maybe just

#define LARGE_FOLIO_ZERO_SCAN_MIN_SIZE SZ_2M
if (folio_nr_pages(folio) < LARGE_FOLIO_ZERO_SCAN_MIN_SIZE)
        return;

>
> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> index 2bccb0a53a0a..1670e9869bd3 100644
> --- a/mm/huge_memory.c
> +++ b/mm/huge_memory.c
> @@ -4364,6 +4364,9 @@ void deferred_split_folio(struct folio *folio, bool=
 partially_mapped)
>         if (!partially_mapped && !split_underused_thp)
>                 return;
>
> +       if (!partially_mapped && folio_nr_pages(folio) <=3D khugepaged_ma=
x_ptes_none)
> +               return;
> +
>         /*
>          * Exclude swapcache: originally to avoid a corrupt deferred spli=
t
>          * queue. Nowadays that is fully prevented by __memcg1_swapout();

Thanks
Barry