On Sat, Aug 15, 2026 at 02:58:45AM +0100, Kiryl Shutsemau wrote: > From: "Kiryl Shutsemau (Meta)" <[email protected]> > > wait_for_scan() gives every case the same three seconds, whatever the huge > page costs to build. collapse_full() asks for four of them: 8M at a 2M > PMD, but 2G at a 512M PMD -- arm64 with 64K base pages. > > Three seconds is thin at that size rather than generous. Across 80 runs of > collapse_full() on arm64 with 64K pages the wait was half a second in 73 of > them, with a tail to two seconds. The case has also timed out in a full > matrix run, reporting a failure for a collapse that was still going. > > Keep three seconds as the floor and add a second per 128M collapsed. A 2M > PMD is unchanged. A 512M PMD gets 19 seconds.
Yikes that does make this run really slow for 64 KiB page size machines and a key aim in the selftests is that they don't take too egregiously long to run. Can this somehow be trimmed some other way? > > arm64/64K: khugepaged all:anon 21 pass/1 fail -> 22 pass/0 fail. x86-64 is > unchanged. > > Assisted-by: Claude-Code:claude-opus-5 > Reviewed-by: Mike Rapoport (Microsoft) <[email protected]> > Tested-by: Muhammad Usama Anjum <[email protected]> > Signed-off-by: Kiryl Shutsemau (Meta) <[email protected]> In general though the patch seems reasonable so: Acked-by: Lorenzo Stoakes (ARM) <[email protected]> > --- > tools/testing/selftests/mm/khugepaged.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/tools/testing/selftests/mm/khugepaged.c > b/tools/testing/selftests/mm/khugepaged.c > index dd924edd8557..c499804a0ec4 100644 > --- a/tools/testing/selftests/mm/khugepaged.c > +++ b/tools/testing/selftests/mm/khugepaged.c > @@ -561,8 +561,10 @@ static bool wait_for_scan(const char *msg, char *p, > size_t len, > int nr_hpages, int collap_order, struct mem_ops *ops) > { > unsigned long hpage_size = page_size << collap_order; > + /* Three seconds as a floor, plus a second per 128M to collapse */ > + const unsigned long bytes = (unsigned long)nr_hpages * hpage_size; > + int timeout = 6 + 2 * (bytes / (128UL << 20)); > int full_scans; > - int timeout = 6; /* 3 seconds */ > > /* Sanity check */ > if (!ops->check_huge(p, len, 0, hpage_size)) > -- > 2.54.0 > -- Cheers, Lorenzo

