diff mbox series

[v2] mm/compaction: fix 'limit' in fast_isolate_freepages

Message ID 20210626082443.22547-1-vvghjk1234@gmail.com (mailing list archive)
State New
Headers show
Series [v2] mm/compaction: fix 'limit' in fast_isolate_freepages | expand

Commit Message

Wonhyuk Yang June 26, 2021, 8:24 a.m. UTC
Because of 'min(1, ...)', fast_isolate_freepages set 'limit'
to 0 or 1. This takes away the opportunities of find candinate
pages. So, by making enough scans available, increases the
probability of finding the appropriate freepage.

Tested it on the thpscale and the results are as follows.

                                        5.12.0                 5.12.0
                                      valnilla                patched
Amean     fault-both-1       598.15 (   0.00%)      592.56 (   0.93%)
Amean     fault-both-3      1494.47 (   0.00%)     1514.35 (  -1.33%)
Amean     fault-both-5      2519.48 (   0.00%)     2471.76 (   1.89%)
Amean     fault-both-7      3173.85 (   0.00%)     3079.19 (   2.98%)
Amean     fault-both-12     8063.83 (   0.00%)     7858.29 (   2.55%)
Amean     fault-both-18     8781.20 (   0.00%)     7827.70 *  10.86%*
Amean     fault-both-24    12576.44 (   0.00%)    12250.20 (   2.59%)
Amean     fault-both-30    18503.27 (   0.00%)    17528.11 *   5.27%*
Amean     fault-both-32    16133.69 (   0.00%)    13874.24 *  14.00%*

                                           5.12.0         5.12.0
                                          vanilla        patched
Ops Compaction migrate scanned         6547133.00     5963901.00
Ops Compaction free scanned           32452453.00    26609101.00

                        5.12        5.12
                     vanilla     patched
Duration User          27.99       28.84
Duration System       244.08      236.76
Duration Elapsed       78.27       78.38

Fixes: 5a811889de10f ("mm, compaction: use free lists to quickly locate a migration target")
Signed-off-by: Wonhyuk Yang <vvghjk1234@gmail.com>
---
 mm/compaction.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Mel Gorman June 29, 2021, 1:52 p.m. UTC | #1
On Sat, Jun 26, 2021 at 05:24:43PM +0900, Wonhyuk Yang wrote:
> Because of 'min(1, ...)', fast_isolate_freepages set 'limit'
> to 0 or 1. This takes away the opportunities of find candinate
> pages. So, by making enough scans available, increases the
> probability of finding the appropriate freepage.
> 
> Tested it on the thpscale and the results are as follows.
> 
>                                         5.12.0                 5.12.0
>                                       valnilla                patched
> Amean     fault-both-1       598.15 (   0.00%)      592.56 (   0.93%)
> Amean     fault-both-3      1494.47 (   0.00%)     1514.35 (  -1.33%)
> Amean     fault-both-5      2519.48 (   0.00%)     2471.76 (   1.89%)
> Amean     fault-both-7      3173.85 (   0.00%)     3079.19 (   2.98%)
> Amean     fault-both-12     8063.83 (   0.00%)     7858.29 (   2.55%)
> Amean     fault-both-18     8781.20 (   0.00%)     7827.70 *  10.86%*
> Amean     fault-both-24    12576.44 (   0.00%)    12250.20 (   2.59%)
> Amean     fault-both-30    18503.27 (   0.00%)    17528.11 *   5.27%*
> Amean     fault-both-32    16133.69 (   0.00%)    13874.24 *  14.00%*
> 
>                                            5.12.0         5.12.0
>                                           vanilla        patched
> Ops Compaction migrate scanned         6547133.00     5963901.00
> Ops Compaction free scanned           32452453.00    26609101.00
> 
>                         5.12        5.12
>                      vanilla     patched
> Duration User          27.99       28.84
> Duration System       244.08      236.76
> Duration Elapsed       78.27       78.38
> 
> Fixes: 5a811889de10f ("mm, compaction: use free lists to quickly locate a migration target")
> Signed-off-by: Wonhyuk Yang <vvghjk1234@gmail.com>

Acked-by: Mel Gorman <mgorman@techsingularity.net>
diff mbox series

Patch

diff --git a/mm/compaction.c b/mm/compaction.c
index 84fde270ae74..12d5b5a86078 100644
--- a/mm/compaction.c
+++ b/mm/compaction.c
@@ -1380,7 +1380,7 @@  static int next_search_order(struct compact_control *cc, int order)
 static unsigned long
 fast_isolate_freepages(struct compact_control *cc)
 {
-	unsigned int limit = min(1U, freelist_scan_limit(cc) >> 1);
+	unsigned int limit = max(1U, freelist_scan_limit(cc) >> 1);
 	unsigned int nr_scanned = 0;
 	unsigned long low_pfn, min_pfn, highest = 0;
 	unsigned long nr_isolated = 0;
@@ -1492,11 +1492,11 @@  fast_isolate_freepages(struct compact_control *cc)
 		spin_unlock_irqrestore(&cc->zone->lock, flags);
 
 		/*
-		 * Smaller scan on next order so the total scan ig related
+		 * Smaller scan on next order so the total scan is related
 		 * to freelist_scan_limit.
 		 */
 		if (order_scanned >= limit)
-			limit = min(1U, limit >> 1);
+			limit = max(1U, limit >> 1);
 	}
 
 	if (!page) {