The patch titled Subject: mm: compaction: consider the number of scanning compound pages in isolate fail path has been added to the -mm mm-unstable branch. Its filename is mm-compaction-consider-the-number-of-scanning-compound-pages-in-isolate-fail-path.patch This patch will shortly appear at https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/mm-compaction-consider-the-number-of-scanning-compound-pages-in-isolate-fail-path.patch This patch will later appear in the mm-unstable branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next via the mm-everything branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm and is updated there every 2-3 working days ------------------------------------------------------ From: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx> Subject: mm: compaction: consider the number of scanning compound pages in isolate fail path Date: Mon, 13 Mar 2023 18:37:16 +0800 Commit b717d6b93b54 ("mm: compaction: include compound page count for scanning in pageblock isolation") added compound page statistics for scanning in pageblock isolation, to make sure the number of scanned pages is always larger than the number of isolated pages when isolating migratable or free pageblocks. However, when failing to isolate the pages when scanning the migratable or free pageblocks, the isolation failure path did not consider the scanning statistics of the compound pages, which can show the incorrect number of scanned pages in tracepoints or vmstats to make people confused about the page scanning pressure in memory compaction. Thus we should take into account the number of scanned pages when failing to isolate the compound pages to make the statistics accurate. Link: https://lkml.kernel.org/r/1bc1c955b03603c4e14f56dfbbef9f637f18dbbd.1678703534.git.baolin.wang@xxxxxxxxxxxxxxxxx Signed-off-by: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx> Cc: Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx> Cc: Oscar Salvador <osalvador@xxxxxxx> Cc: Vlastimil Babka <vbabka@xxxxxxx> Cc: William Lam <william.lam@xxxxxxxxxxxxx> Cc: Mike Kravetz <mike.kravetz@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- --- a/mm/compaction.c~mm-compaction-consider-the-number-of-scanning-compound-pages-in-isolate-fail-path +++ a/mm/compaction.c @@ -587,6 +587,7 @@ static unsigned long isolate_freepages_b blockpfn += (1UL << order) - 1; cursor += (1UL << order) - 1; } + nr_scanned += (1UL << order) - 1; goto isolate_fail; } @@ -873,9 +874,8 @@ isolate_migratepages_block(struct compac cond_resched(); } - nr_scanned++; - page = pfn_to_page(low_pfn); + nr_scanned += compound_nr(page); /* * Check if the pageblock has already been marked skipped. @@ -1077,6 +1077,7 @@ isolate_migratepages_block(struct compac */ if (unlikely(PageCompound(page) && !cc->alloc_contig)) { low_pfn += compound_nr(page) - 1; + nr_scanned += compound_nr(page) - 1; SetPageLRU(page); goto isolate_fail_put; } @@ -1097,7 +1098,6 @@ isolate_success: isolate_success_no_list: cc->nr_migratepages += compound_nr(page); nr_isolated += compound_nr(page); - nr_scanned += compound_nr(page) - 1; /* * Avoid isolating too much unless this block is being _ Patches currently in -mm which might be from baolin.wang@xxxxxxxxxxxxxxxxx are mm-compaction-consider-the-number-of-scanning-compound-pages-in-isolate-fail-path.patch mm-compaction-fix-the-possible-deadlock-when-isolating-hugetlb-pages.patch