__alloc_pages_direct_compact has many arguments so invoking it is very costly. And in almost invoking case, order is 0, so return immediately. Let's not invoke it when order 0 Signed-off-by: Joonsoo Kim <js1304@xxxxxxxxx> diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 6092f33..f4039aa 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2056,7 +2056,10 @@ out: } #ifdef CONFIG_COMPACTION -/* Try memory compaction for high-order allocations before reclaim */ +/* + * Try memory compaction for high-order allocations before reclaim + * Must be called with order > 0 + */ static struct page * __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order, struct zonelist *zonelist, enum zone_type high_zoneidx, @@ -2067,8 +2070,7 @@ __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order, { struct page *page; - if (!order) - return NULL; + BUG_ON(!order); if (compaction_deferred(preferred_zone, order)) { *deferred_compaction = true; @@ -2363,15 +2365,17 @@ rebalance: * Try direct compaction. The first pass is asynchronous. Subsequent * attempts after direct reclaim are synchronous */ - page = __alloc_pages_direct_compact(gfp_mask, order, - zonelist, high_zoneidx, - nodemask, - alloc_flags, preferred_zone, - migratetype, sync_migration, - &deferred_compaction, - &did_some_progress); - if (page) - goto got_pg; + if (unlikely(order)) { + page = __alloc_pages_direct_compact(gfp_mask, order, + zonelist, high_zoneidx, + nodemask, + alloc_flags, preferred_zone, + migratetype, sync_migration, + &deferred_compaction, + &did_some_progress); + if (page) + goto got_pg; + } sync_migration = true; /* @@ -2446,15 +2450,17 @@ rebalance: * direct reclaim and reclaim/compaction depends on compaction * being called after reclaim so call directly if necessary */ - page = __alloc_pages_direct_compact(gfp_mask, order, - zonelist, high_zoneidx, - nodemask, - alloc_flags, preferred_zone, - migratetype, sync_migration, - &deferred_compaction, - &did_some_progress); - if (page) - goto got_pg; + if (unlikely(order)) { + page = __alloc_pages_direct_compact(gfp_mask, order, + zonelist, high_zoneidx, + nodemask, + alloc_flags, preferred_zone, + migratetype, sync_migration, + &deferred_compaction, + &did_some_progress); + if (page) + goto got_pg; + } } nopage: -- 1.7.9.5 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>