aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorVlastimil Babka <vbabka@suse.cz>2016-10-07 20:00:46 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2016-10-07 21:46:29 -0400
commit20311420282f3402888f1d9b8b80d924d491aadf (patch)
tree6ef33e5e616118f2000188440290e52709a0d488 /mm
parentcc5c9f098fe48a8736add8a23c983524ca16cea5 (diff)
mm, compaction: restrict fragindex to costly orders
Fragmentation index and the vm.extfrag_threshold sysctl is meant as a heuristic to prevent excessive compaction for costly orders (i.e. THP). It's unlikely to make any difference for non-costly orders, especially with the default threshold. But we cannot afford any uncertainty for the non-costly orders where the only alternative to successful reclaim/compaction is OOM. After the recent patches we are guaranteed maximum effort without heuristics from compaction before deciding OOM, and fragindex is the last remaining heuristic. Therefore skip fragindex altogether for non-costly orders. Suggested-by: Michal Hocko <mhocko@suse.com> Link: http://lkml.kernel.org/r/20160926162025.21555-5-vbabka@suse.cz Signed-off-by: Vlastimil Babka <vbabka@suse.cz> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Mel Gorman <mgorman@techsingularity.net> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Cc: David Rientjes <rientjes@google.com> Cc: Rik van Riel <riel@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/compaction.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/mm/compaction.c b/mm/compaction.c
index b918bdb28aed..0409a4ad6ea1 100644
--- a/mm/compaction.c
+++ b/mm/compaction.c
@@ -1435,9 +1435,14 @@ enum compact_result compaction_suitable(struct zone *zone, int order,
1435 * index towards 0 implies failure is due to lack of memory 1435 * index towards 0 implies failure is due to lack of memory
1436 * index towards 1000 implies failure is due to fragmentation 1436 * index towards 1000 implies failure is due to fragmentation
1437 * 1437 *
1438 * Only compact if a failure would be due to fragmentation. 1438 * Only compact if a failure would be due to fragmentation. Also
1439 * ignore fragindex for non-costly orders where the alternative to
1440 * a successful reclaim/compaction is OOM. Fragindex and the
1441 * vm.extfrag_threshold sysctl is meant as a heuristic to prevent
1442 * excessive compaction for costly orders, but it should not be at the
1443 * expense of system stability.
1439 */ 1444 */
1440 if (ret == COMPACT_CONTINUE) { 1445 if (ret == COMPACT_CONTINUE && (order > PAGE_ALLOC_COSTLY_ORDER)) {
1441 fragindex = fragmentation_index(zone, order); 1446 fragindex = fragmentation_index(zone, order);
1442 if (fragindex >= 0 && fragindex <= sysctl_extfrag_threshold) 1447 if (fragindex >= 0 && fragindex <= sysctl_extfrag_threshold)
1443 ret = COMPACT_NOT_SUITABLE_ZONE; 1448 ret = COMPACT_NOT_SUITABLE_ZONE;