lkml.org 
[lkml]   [2012]   [Jul]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] mm: don't invoke __alloc_pages_direct_compact when order 0
    Date
    __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@gmail.com>

    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


    \
     
     \ /
      Last update: 2012-07-06 18:21    [W:2.201 / U:0.332 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site