From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.0 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4AAF5C433DF for ; Thu, 30 Jul 2020 11:26:25 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id EF3A72074B for ; Thu, 30 Jul 2020 11:26:24 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EF3A72074B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 2DB416B0002; Thu, 30 Jul 2020 07:26:24 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 264366B0005; Thu, 30 Jul 2020 07:26:24 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 12C866B0006; Thu, 30 Jul 2020 07:26:24 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0215.hostedemail.com [216.40.44.215]) by kanga.kvack.org (Postfix) with ESMTP id F19406B0002 for ; Thu, 30 Jul 2020 07:26:23 -0400 (EDT) Received: from smtpin10.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 6CCCD180AD802 for ; Thu, 30 Jul 2020 11:26:23 +0000 (UTC) X-FDA: 77094513846.10.camp40_4f03e2c26f7a Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin10.hostedemail.com (Postfix) with ESMTP id 404E616A0DD for ; Thu, 30 Jul 2020 11:26:23 +0000 (UTC) X-HE-Tag: camp40_4f03e2c26f7a X-Filterd-Recvd-Size: 5381 Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by imf42.hostedemail.com (Postfix) with ESMTP for ; Thu, 30 Jul 2020 11:26:22 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id AE098ABCE; Thu, 30 Jul 2020 11:26:33 +0000 (UTC) Date: Thu, 30 Jul 2020 13:26:20 +0200 From: Michal Hocko To: Yafang Shao Cc: hannes@cmpxchg.org, akpm@linux-foundation.org, linux-mm@kvack.org Subject: Re: [PATCH] mm, memcg: do full scan initially in force_empty Message-ID: <20200730112620.GH18727@dhcp22.suse.cz> References: <20200728074032.1555-1-laoar.shao@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200728074032.1555-1-laoar.shao@gmail.com> X-Rspamd-Queue-Id: 404E616A0DD X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam05 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Tue 28-07-20 03:40:32, Yafang Shao wrote: > Sometimes we use memory.force_empty to drop pages in a memcg to work > around some memory pressure issues. When we use force_empty, we want the > pages can be reclaimed ASAP, however force_empty reclaims pages as a > regular reclaimer which scans the page cache LRUs from DEF_PRIORITY > priority and finally it will drop to 0 to do full scan. That is a waste > of time, we'd better do full scan initially in force_empty. Do you have any numbers please? > Signed-off-by: Yafang Shao > --- > include/linux/swap.h | 3 ++- > mm/memcontrol.c | 16 ++++++++++------ > mm/vmscan.c | 5 +++-- > 3 files changed, 15 insertions(+), 9 deletions(-) > > diff --git a/include/linux/swap.h b/include/linux/swap.h > index 5b3216ba39a9..d88430f1b964 100644 > --- a/include/linux/swap.h > +++ b/include/linux/swap.h > @@ -364,7 +364,8 @@ extern int __isolate_lru_page(struct page *page, isolate_mode_t mode); > extern unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *memcg, > unsigned long nr_pages, > gfp_t gfp_mask, > - bool may_swap); > + bool may_swap, > + int priority); > extern unsigned long mem_cgroup_shrink_node(struct mem_cgroup *mem, > gfp_t gfp_mask, bool noswap, > pg_data_t *pgdat, > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 13f559af1ab6..c873a98f8c7e 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -2237,7 +2237,8 @@ static void reclaim_high(struct mem_cgroup *memcg, > READ_ONCE(memcg->memory.high)) > continue; > memcg_memory_event(memcg, MEMCG_HIGH); > - try_to_free_mem_cgroup_pages(memcg, nr_pages, gfp_mask, true); > + try_to_free_mem_cgroup_pages(memcg, nr_pages, gfp_mask, true, > + DEF_PRIORITY); > } while ((memcg = parent_mem_cgroup(memcg)) && > !mem_cgroup_is_root(memcg)); > } > @@ -2515,7 +2516,8 @@ static int try_charge(struct mem_cgroup *memcg, gfp_t gfp_mask, > memcg_memory_event(mem_over_limit, MEMCG_MAX); > > nr_reclaimed = try_to_free_mem_cgroup_pages(mem_over_limit, nr_pages, > - gfp_mask, may_swap); > + gfp_mask, may_swap, > + DEF_PRIORITY); > > if (mem_cgroup_margin(mem_over_limit) >= nr_pages) > goto retry; > @@ -3089,7 +3091,8 @@ static int mem_cgroup_resize_max(struct mem_cgroup *memcg, > } > > if (!try_to_free_mem_cgroup_pages(memcg, 1, > - GFP_KERNEL, !memsw)) { > + GFP_KERNEL, !memsw, > + DEF_PRIORITY)) { > ret = -EBUSY; > break; > } > @@ -3222,7 +3225,8 @@ static int mem_cgroup_force_empty(struct mem_cgroup *memcg) > return -EINTR; > > progress = try_to_free_mem_cgroup_pages(memcg, 1, > - GFP_KERNEL, true); > + GFP_KERNEL, true, > + 0); > if (!progress) { > nr_retries--; > /* maybe some writeback is necessary */ > @@ -6065,7 +6069,7 @@ static ssize_t memory_high_write(struct kernfs_open_file *of, > } > > reclaimed = try_to_free_mem_cgroup_pages(memcg, nr_pages - high, > - GFP_KERNEL, true); > + GFP_KERNEL, true, DEF_PRIORITY); > > if (!reclaimed && !nr_retries--) > break; > @@ -6113,7 +6117,7 @@ static ssize_t memory_max_write(struct kernfs_open_file *of, > > if (nr_reclaims) { > if (!try_to_free_mem_cgroup_pages(memcg, nr_pages - max, > - GFP_KERNEL, true)) > + GFP_KERNEL, true, DEF_PRIORITY)) > nr_reclaims--; > continue; > } > diff --git a/mm/vmscan.c b/mm/vmscan.c > index 749d239c62b2..49298bb2892d 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -3315,7 +3315,8 @@ unsigned long mem_cgroup_shrink_node(struct mem_cgroup *memcg, > unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *memcg, > unsigned long nr_pages, > gfp_t gfp_mask, > - bool may_swap) > + bool may_swap, > + int priority) > { > unsigned long nr_reclaimed; > unsigned long pflags; > @@ -3326,7 +3327,7 @@ unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *memcg, > (GFP_HIGHUSER_MOVABLE & ~GFP_RECLAIM_MASK), > .reclaim_idx = MAX_NR_ZONES - 1, > .target_mem_cgroup = memcg, > - .priority = DEF_PRIORITY, > + .priority = priority, > .may_writepage = !laptop_mode, > .may_unmap = 1, > .may_swap = may_swap, > -- > 2.18.1 -- Michal Hocko SUSE Labs