Re: [PATCH] mm: page_alloc: use the correct THP order for THP PCP

From: Baolin Wang
Date: Thu Apr 04 2024 - 08:22:01 EST




On 2024/4/4 18:03, Vlastimil Babka wrote:
On 4/3/24 3:47 PM, Baolin Wang wrote:
Commit 44042b449872 ("mm/page_alloc: allow high-order pages to be stored
on the per-cpu lists") extends the PCP allocator to store THP pages, and
it determines whether to cache THP pags in PCP by comparing with pageblock_order.
But the pageblock_order is not always equal to THP order, it might also
be MAX_PAGE_ORDER, which could prevent PCP from caching THP pages.

Therefore, using HPAGE_PMD_ORDER instead to determine the need for caching
THP for PCP can fix this issue

Fixes: 44042b449872 ("mm/page_alloc: allow high-order pages to be stored on the per-cpu lists")
Signed-off-by: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx>

IIUC this happens with CONFIG_HUGETLB_PAGE disabled because HUGETLBFS is
disabled? But THPs are still enabled? I think there might be more of THP

Right, and seems the Powerpc arch will set pageblock_order via set_pageblock_order() when the huge page sizes are variable (not sure if this is always equal to THP order).

Moreover, it still does not make sense to use pageblock_order to indicate a THP page, especially when we already have HPAGE_PMD_ORDER to represent THP.

working suboptimally in that case with pageblock_order being larger
(MAX_PAGE_ORDER).

In other words, should be rather make pageblock_order itself defined as

min_t(unsigned int, HPAGE_PMD_ORDER, MAX_PAGE_ORDER)

in case with !CONFIG_HUGETLB_PAGE but THP enabled.

Yes, this makes sense to me (I wonder why this wasn't done before?). I can create a seperate patch to do this, what do you think? Thanks.