lkml.org 
[lkml]   [2020]   [Dec]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH 2/4] mm/swap.c: bail out early for no memcg and no numa
    Date
    If a system has memcg disabled and no numa node, like a embedded system,
    there is no needs to do the pagevec sort, since only just one lruvec in
    system. In this situation, we could skip the pagevec sorting.

    Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com>
    Cc: Konstantin Khlebnikov <koct9i@gmail.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Yu Zhao <yuzhao@google.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: linux-mm@kvack.org
    Cc: linux-kernel@vger.kernel.org
    ---
    mm/swap.c | 19 ++++++++++---------
    1 file changed, 10 insertions(+), 9 deletions(-)

    diff --git a/mm/swap.c b/mm/swap.c
    index 994641331bf7..bb5300b7e321 100644
    --- a/mm/swap.c
    +++ b/mm/swap.c
    @@ -235,6 +235,7 @@ void sort_isopv(struct pagevec *pvec, struct pagevec *isopv,

    pagevec_init(&busypv);

    +
    for (i = 0, j = 0; i < pagevec_count(pvec); i++) {
    struct page *page = pvec->pages[i];

    @@ -253,7 +254,8 @@ void sort_isopv(struct pagevec *pvec, struct pagevec *isopv,
    if (pagevec_count(&busypv))
    release_pages(busypv.pages, busypv.nr);

    - shell_sort(isopv, lvaddr);
    + if (!mem_cgroup_disabled() || num_online_nodes() > 1)
    + shell_sort(isopv, lvaddr);
    }

    static void pagevec_lru_move_fn(struct pagevec *pvec,
    @@ -263,13 +265,12 @@ static void pagevec_lru_move_fn(struct pagevec *pvec,
    struct lruvec *lruvec = NULL;
    unsigned long flags = 0;
    unsigned long lvaddr[PAGEVEC_SIZE];
    - struct pagevec isopv;
    -
    - pagevec_init(&isopv);
    + struct pagevec sortedpv;

    - sort_isopv(pvec, &isopv, lvaddr);
    + pagevec_init(&sortedpv);
    + sort_isopv(pvec, &sortedpv, lvaddr);

    - n = pagevec_count(&isopv);
    + n = pagevec_count(&sortedpv);
    if (!n)
    return;

    @@ -284,12 +285,12 @@ static void pagevec_lru_move_fn(struct pagevec *pvec,
    spin_lock_irqsave(&lruvec->lru_lock, flags);
    }

    - (*move_fn)(isopv.pages[i], lruvec);
    + (*move_fn)(sortedpv.pages[i], lruvec);

    - SetPageLRU(isopv.pages[i]);
    + SetPageLRU(sortedpv.pages[i]);
    }
    spin_unlock_irqrestore(&lruvec->lru_lock, flags);
    - release_pages(isopv.pages, isopv.nr);
    + release_pages(sortedpv.pages, sortedpv.nr);
    }

    static void pagevec_move_tail_fn(struct page *page, struct lruvec *lruvec)
    --
    2.29.GIT
    \
     
     \ /
      Last update: 2020-12-25 11:03    [W:3.261 / U:0.112 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site