lkml.org 
[lkml]   [2018]   [May]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 47/92] vmscan: do not force-scan file lru if its absolute size is small
    Date
    4.4-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Vladimir Davydov <vdavydov@virtuozzo.com>

    commit 316bda0e6cc5f36f94b4af8bded16d642c90ad75 upstream.

    We assume there is enough inactive page cache if the size of inactive
    file lru is greater than the size of active file lru, in which case we
    force-scan file lru ignoring anonymous pages. While this logic works
    fine when there are plenty of page cache pages, it fails if the size of
    file lru is small (several MB): in this case (lru_size >> prio) will be
    0 for normal scan priorities, as a result, if inactive file lru happens
    to be larger than active file lru, anonymous pages of a cgroup will
    never get evicted unless the system experiences severe memory pressure,
    even if there are gigabytes of unused anonymous memory there, which is
    unfair in respect to other cgroups, whose workloads might be page cache
    oriented.

    This patch attempts to fix this by elaborating the "enough inactive page
    cache" check: it makes it not only check that inactive lru size > active
    lru size, but also that we will scan something from the cgroup at the
    current scan priority. If these conditions do not hold, we proceed to
    SCAN_FRACT as usual.

    Signed-off-by: Vladimir Davydov <vdavydov@virtuozzo.com>
    Acked-by: Johannes Weiner <hannes@cmpxchg.org>
    Acked-by: Michal Hocko <mhocko@suse.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Mel Gorman <mgorman@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    mm/vmscan.c | 12 +++++++++---
    1 file changed, 9 insertions(+), 3 deletions(-)

    --- a/mm/vmscan.c
    +++ b/mm/vmscan.c
    @@ -2057,10 +2057,16 @@ static void get_scan_count(struct lruvec
    }

    /*
    - * There is enough inactive page cache, do not reclaim
    - * anything from the anonymous working set right now.
    + * If there is enough inactive page cache, i.e. if the size of the
    + * inactive list is greater than that of the active list *and* the
    + * inactive list actually has some pages to scan on this priority, we
    + * do not reclaim anything from the anonymous working set right now.
    + * Without the second condition we could end up never scanning an
    + * lruvec even if it has plenty of old anonymous pages unless the
    + * system is under heavy pressure.
    */
    - if (!inactive_file_is_low(lruvec)) {
    + if (!inactive_file_is_low(lruvec) &&
    + get_lru_size(lruvec, LRU_INACTIVE_FILE) >> sc->priority) {
    scan_balance = SCAN_FILE;
    goto out;
    }

    \
     
     \ /
      Last update: 2018-05-24 11:46    [W:2.420 / U:1.192 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site