Re: [PATCH] mm/compaction: do not break pages whose order is larger than target order

From: Baolin Wang
Date: Fri Apr 25 2025 - 02:53:50 EST




On 2025/4/24 23:38, Wenchao Hao wrote:
When scanning free pages for memory compaction, if the compaction target
order is explicitly specified, do not split pages in buddy whose order
are larger than compaction target order.

We've already checked this in suitable_migration_target(), so how did you observe that there are still attempts to isolate such non-suitable free large folios? Please explain your usecase in detail.

Signed-off-by: Wenchao Hao <haowenchao22@xxxxxxxxx>
---
mm/compaction.c | 11 +++++++++++
1 file changed, 11 insertions(+)

diff --git a/mm/compaction.c b/mm/compaction.c
index 3925cb61dbb8..b0ed0831c400 100644
--- a/mm/compaction.c
+++ b/mm/compaction.c
@@ -656,6 +656,17 @@ static unsigned long isolate_freepages_block(struct compact_control *cc,
/* Found a free page, will break it into order-0 pages */
order = buddy_order(page);
+
+ /*
+ * Do not break free pages whose order is larger than
+ * compact's desired order
+ */
+ if (cc->order != -1 && order >= cc->order) {
+ blockpfn += (1 << order) - 1;
+ page += (1 << order) - 1;
+ goto isolate_fail;
+ }
+
isolated = __isolate_free_page(page, order);
if (!isolated)
break;