lkml.org 
[lkml]   [2016]   [Apr]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 07/11] mm, compaction: Update compaction_result ordering
    Date
    From: Michal Hocko <mhocko@suse.com>

    compaction_result will be used as the primary feedback channel for
    compaction users. At the same time try_to_compact_pages (and potentially
    others) assume a certain ordering where a more specific feedback takes
    precendence. This gets a bit awkward when we have conflicting feedback
    from different zones. E.g one returing COMPACT_COMPLETE meaning the full
    zone has been scanned without any outcome while other returns with
    COMPACT_PARTIAL aka made some progress. The caller should get
    COMPACT_PARTIAL because that means that the compaction still can make
    some progress. The same applies for COMPACT_PARTIAL vs.
    COMPACT_PARTIAL_SKIPPED. Reorder PARTIAL to be the largest one so the
    larger the value is the more progress we have done.

    Signed-off-by: Michal Hocko <mhocko@suse.com>
    ---
    include/linux/compaction.h | 26 ++++++++++++++++----------
    1 file changed, 16 insertions(+), 10 deletions(-)

    diff --git a/include/linux/compaction.h b/include/linux/compaction.h
    index 7c4de92d12cc..a7b9091ff349 100644
    --- a/include/linux/compaction.h
    +++ b/include/linux/compaction.h
    @@ -4,6 +4,8 @@
    /* Return values for compact_zone() and try_to_compact_pages() */
    /* When adding new states, please adjust include/trace/events/compaction.h */
    enum compact_result {
    + /* For more detailed tracepoint output - internal to compaction */
    + COMPACT_NOT_SUITABLE_ZONE,
    /*
    * compaction didn't start as it was not possible or direct reclaim
    * was more suitable
    @@ -11,30 +13,34 @@ enum compact_result {
    COMPACT_SKIPPED,
    /* compaction didn't start as it was deferred due to past failures */
    COMPACT_DEFERRED,
    +
    /* compaction not active last round */
    COMPACT_INACTIVE = COMPACT_DEFERRED,

    + /* For more detailed tracepoint output - internal to compaction */
    + COMPACT_NO_SUITABLE_PAGE,
    /* compaction should continue to another pageblock */
    COMPACT_CONTINUE,
    +
    /*
    - * direct compaction partially compacted a zone and there are suitable
    - * pages
    + * The full zone was compacted scanned but wasn't successfull to compact
    + * suitable pages.
    */
    - COMPACT_PARTIAL,
    + COMPACT_COMPLETE,
    /*
    * direct compaction has scanned part of the zone but wasn't successfull
    * to compact suitable pages.
    */
    COMPACT_PARTIAL_SKIPPED,
    +
    + /* compaction terminated prematurely due to lock contentions */
    + COMPACT_CONTENDED,
    +
    /*
    - * The full zone was compacted scanned but wasn't successfull to compact
    - * suitable pages.
    + * direct compaction partially compacted a zone and there might be
    + * suitable pages
    */
    - COMPACT_COMPLETE,
    - /* For more detailed tracepoint output */
    - COMPACT_NO_SUITABLE_PAGE,
    - COMPACT_NOT_SUITABLE_ZONE,
    - COMPACT_CONTENDED,
    + COMPACT_PARTIAL,
    };

    /* Used to signal whether compaction detected need_sched() or lock contention */
    --
    2.8.0.rc3
    \
     
     \ /
      Last update: 2016-04-05 14:01    [W:4.129 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site