From: "Lorenzo Stoakes (ARM)" <ljs@kernel.org>
To: Kiryl Shutsemau <kirill@shutemov.name>
Cc: akpm@linux-foundation.org, david@kernel.org,
nico.pache@linux.dev, baolin.wang@linux.alibaba.com,
baohua@kernel.org, dev.jain@arm.com, hughd@google.com,
lance.yang@linux.dev, liam@infradead.org, mhocko@suse.com,
rppt@kernel.org, ryan.roberts@arm.com, shuah@kernel.org,
surenb@google.com, usama.arif@linux.dev, vbabka@kernel.org,
ziy@nvidia.com, usama.anjum@arm.com, agordeev@linux.ibm.com,
linux-mm@kvack.org, linux-kselftest@vger.kernel.org,
linux-kernel@vger.kernel.org, kas@kernel.org
Subject: Re: [PATCH v4 12/19] selftests/mm: parameterize the mixed-source collapse case by source order
Date: Tue, 18 Aug 2026 11:47:51 +0100 [thread overview]
Message-ID: <aoQ2XCILH-0h2B3G@lucifer> (raw)
In-Reply-To: <20260815015901.1236937-13-kirill@shutemov.name>
On Sat, Aug 15, 2026 at 02:58:54AM +0100, Kiryl Shutsemau wrote:
> From: "Kiryl Shutsemau (Meta)" <kas@kernel.org>
>
> collapse_order_mixed_sources() faults its region as order-2 folios and
> collapses them to the -c target. Order 2 sits below the contpte threshold
> on both arm64 page-size configurations, so nothing in this suite unfolds a
> contpte source on purpose.
>
> Let -s name the source order alongside -c. The case then faults at that
> order, keeping order 2 when -s is absent, and the source order has to be a
> supported mTHP order below the target. The other mTHP cases are
> unaffected: mthp_push_target_order() enables only the target order.
>
> "-s 5 -c 7" on arm64/64K then collapses contpte-mapped sources into a
> larger mTHP.
>
> Assisted-by: Claude-Code:claude-opus-5
> Tested-by: Muhammad Usama Anjum <usama.anjum@arm.com>
> Signed-off-by: Kiryl Shutsemau (Meta) <kas@kernel.org>
Looks reasonable to me so:
Acked-by: Lorenzo Stoakes (ARM) <ljs@kernel.org>
> ---
> tools/testing/selftests/mm/khugepaged.c | 25 +++++++++++++++----------
> 1 file changed, 15 insertions(+), 10 deletions(-)
>
> diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/selftests/mm/khugepaged.c
> index 0489967d6ee0..1844ddd77b59 100644
> --- a/tools/testing/selftests/mm/khugepaged.c
> +++ b/tools/testing/selftests/mm/khugepaged.c
> @@ -1389,10 +1389,13 @@ static void collapse_order_max_ptes_none(struct collapse_context *c,
> static void collapse_order_mixed_sources(struct collapse_context *c,
> struct mem_ops *ops)
> {
> + int source_order = anon_order ? anon_order : MIN_MTHP_ORDER;
> struct thp_settings settings;
> void *p;
>
> - if (collapse_order <= MIN_MTHP_ORDER) {
> + /* Sources must be a supported mTHP order strictly below the target. */
> + if (source_order >= collapse_order ||
> + !(thp_supported_orders() & (1UL << source_order))) {
> ksft_test_result_skip("%s: no source order below target\n",
> __func__);
> return;
> @@ -1400,23 +1403,22 @@ static void collapse_order_mixed_sources(struct collapse_context *c,
>
> mthp_push_target_order();
>
> - /* Fault the whole region as order-MIN_MTHP_ORDER folios. */
> + /* Fault the whole region as order-@source_order folios. */
> settings = *thp_current_settings();
> - settings.hugepages[MIN_MTHP_ORDER].enabled = THP_ALWAYS;
> + settings.hugepages[source_order].enabled = THP_ALWAYS;
> thp_push_settings(&settings);
> p = ops->setup_area(1);
> ops->fault(p, 0, hpage_pmd_size);
> thp_pop_settings();
>
> /*
> - * The order is enabled, but the allocator can still fall back under
> - * fragmentation. That leaves nothing to collapse from, which is the
> - * machine's answer rather than a reason to end the run.
> + * The order is enabled and supported, but the allocator can still fall
> + * back under fragmentation. That leaves nothing to collapse from,
> + * which is the machine's answer rather than a reason to end the run.
> */
> - if (!is_range_backed_by_folio_orders(p, hpage_pmd_size, MIN_MTHP_ORDER,
> + if (!is_range_backed_by_folio_orders(p, hpage_pmd_size, source_order,
> pagemap_fd, kpageflags_fd)) {
> - ksft_print_msg("No order-%d sources to collapse...",
> - MIN_MTHP_ORDER);
> + ksft_print_msg("No order-%d sources to collapse...", source_order);
> skip("Skip");
> ops->cleanup_area(p, hpage_pmd_size);
> thp_pop_settings();
> @@ -1425,7 +1427,8 @@ static void collapse_order_mixed_sources(struct collapse_context *c,
> }
>
> madvise(p, hpage_pmd_size, MADV_HUGEPAGE);
> - ksft_print_msg("Collapse region backed by smaller large folios...");
> + ksft_print_msg("Collapse region backed by order-%d sources...",
> + source_order);
> if (!khugepaged_wait_full_pass())
> fail("Timeout");
> else if (window_collapsed(p, hpage_pmd_size))
> @@ -1456,6 +1459,8 @@ static void usage(void)
> fprintf(stderr, "\t\t-s: mTHP size, expressed as page order.\n");
> fprintf(stderr, "\t\t Defaults to 0. Use this size for anon or shmem allocations.\n");
> fprintf(stderr, "\t\t-c: collapse order for mTHP collapse, expressed as page order.\n");
> + fprintf(stderr, "\t\t With -s, -s names the mTHP source order for the\n");
> + fprintf(stderr, "\t\t mixed-source case (source order below the target).\n");
> exit(1);
> }
>
> --
> 2.54.0
>
--
Cheers, Lorenzo
next prev parent reply other threads:[~2026-08-18 10:48 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-15 1:58 [PATCH v4 00/19] selftests/mm: improve khugepaged coverage Kiryl Shutsemau
2026-08-15 1:58 ` [PATCH v4 01/19] selftests/mm: raise the khugepaged test-case cap Kiryl Shutsemau
2026-08-18 9:11 ` Lorenzo Stoakes (ARM)
2026-08-15 1:58 ` [PATCH v4 02/19] selftests/mm: skip collapse_compound_extreme() where the PMD is too large Kiryl Shutsemau
2026-08-18 9:22 ` Lorenzo Stoakes (ARM)
2026-08-15 1:58 ` [PATCH v4 03/19] selftests/mm: scale khugepaged's collapse wait with the PMD size Kiryl Shutsemau
2026-08-18 10:04 ` Lorenzo Stoakes (ARM)
2026-08-15 1:58 ` [PATCH v4 04/19] selftests/mm: skip khugepaged page cache cases without a PMD folio Kiryl Shutsemau
2026-08-18 10:07 ` Lorenzo Stoakes (ARM)
2026-08-15 1:58 ` [PATCH v4 05/19] selftests/mm: make the swap cases' swapout reliable Kiryl Shutsemau
2026-08-18 10:11 ` Lorenzo Stoakes (ARM)
2026-08-15 1:58 ` [PATCH v4 06/19] selftests/mm: stop khugepaged during the MADV_COLLAPSE cases Kiryl Shutsemau
2026-08-18 10:12 ` Lorenzo Stoakes (ARM)
2026-08-15 1:58 ` [PATCH v4 07/19] selftests/mm: move is_backed_by_folio() into vm_util Kiryl Shutsemau
2026-08-18 10:14 ` Lorenzo Stoakes (ARM)
2026-08-15 1:58 ` [PATCH v4 08/19] selftests/mm: add folio-order check for address ranges Kiryl Shutsemau
2026-08-18 10:25 ` Lorenzo Stoakes (ARM)
2026-08-15 1:58 ` [PATCH v4 09/19] selftests/mm: add folio-order detection self-check Kiryl Shutsemau
2026-08-18 10:30 ` Lorenzo Stoakes (ARM)
2026-08-15 1:58 ` [PATCH v4 10/19] selftests/mm: add khugepaged completion barrier helper Kiryl Shutsemau
2026-08-18 10:34 ` Lorenzo Stoakes (ARM)
2026-08-15 1:58 ` [PATCH v4 11/19] selftests/mm: add order-parameterized khugepaged collapse cases Kiryl Shutsemau
2026-08-18 10:38 ` Lorenzo Stoakes (ARM)
2026-08-15 1:58 ` [PATCH v4 12/19] selftests/mm: parameterize the mixed-source collapse case by source order Kiryl Shutsemau
2026-08-18 10:47 ` Lorenzo Stoakes (ARM) [this message]
2026-08-15 1:58 ` [PATCH v4 13/19] selftests/mm: cover a shared-source collapse write race Kiryl Shutsemau
2026-08-15 1:58 ` [PATCH v4 14/19] selftests/mm: run every supported collapse order by default Kiryl Shutsemau
2026-08-15 1:58 ` [PATCH v4 15/19] selftests/mm: check that one khugepaged pass collapses one window Kiryl Shutsemau
2026-08-15 1:58 ` [PATCH v4 16/19] selftests/mm: add khugepaged race harness Kiryl Shutsemau
2026-08-15 1:58 ` [PATCH v4 17/19] selftests/mm: race collapse of windows with holes Kiryl Shutsemau
2026-08-15 1:59 ` [PATCH v4 18/19] selftests/mm: add memory-pressure threads to the khugepaged race harness Kiryl Shutsemau
2026-08-15 1:59 ` [PATCH v4 19/19] selftests/mm: zap whole PTE tables in " Kiryl Shutsemau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aoQ2XCILH-0h2B3G@lucifer \
--to=ljs@kernel.org \
--cc=agordeev@linux.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=baohua@kernel.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=david@kernel.org \
--cc=dev.jain@arm.com \
--cc=hughd@google.com \
--cc=kas@kernel.org \
--cc=kirill@shutemov.name \
--cc=lance.yang@linux.dev \
--cc=liam@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.com \
--cc=nico.pache@linux.dev \
--cc=rppt@kernel.org \
--cc=ryan.roberts@arm.com \
--cc=shuah@kernel.org \
--cc=surenb@google.com \
--cc=usama.anjum@arm.com \
--cc=usama.arif@linux.dev \
--cc=vbabka@kernel.org \
--cc=ziy@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.