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=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 27549C433DB for ; Fri, 29 Jan 2021 17:38:16 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id A599964DD8 for ; Fri, 29 Jan 2021 17:38:15 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A599964DD8 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 21C1C8D0003; Fri, 29 Jan 2021 12:38:15 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1A55C8D0001; Fri, 29 Jan 2021 12:38:15 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 094B78D0003; Fri, 29 Jan 2021 12:38:15 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0222.hostedemail.com [216.40.44.222]) by kanga.kvack.org (Postfix) with ESMTP id E52F18D0001 for ; Fri, 29 Jan 2021 12:38:14 -0500 (EST) Received: from smtpin15.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id A82C33628 for ; Fri, 29 Jan 2021 17:38:14 +0000 (UTC) X-FDA: 77759521308.15.lock52_0905cd3275aa Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin15.hostedemail.com (Postfix) with ESMTP id 7C3631814B0C8 for ; Fri, 29 Jan 2021 17:38:14 +0000 (UTC) X-HE-Tag: lock52_0905cd3275aa X-Filterd-Recvd-Size: 6817 Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) by imf44.hostedemail.com (Postfix) with ESMTP for ; Fri, 29 Jan 2021 17:38:13 +0000 (UTC) Received: by mail-ed1-f42.google.com with SMTP id d22so11473304edy.1 for ; Fri, 29 Jan 2021 09:38:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=XnJUFKT7mpJJkpoBZtT7iuNHzt9Orb+KaxsIyTb16E0=; b=COLNvH5yFRc1iWLXYNI9oTIMBzlO2VZPd5qpEtrEHo3ATyUwzRkkJJpBybh7Sz+E7U KvaZ9Bxx2aaqlmREglpeNGMhk56HaIXO0h+lDWOxIaJZ+ZTGyU2lVMXVkGt/rllLdPpF B4uGOZbB57eHeRUTts2Dtf9oq72yibbhAsgUzQAD2FNZioeMUtQZoSOPk3hlhlpKE3BB DoP8GVKEZp8ANV7wNZzt7gBfCS236/IPAc6fIBZ3A68VtKn92HJ9+ckCmbBH8jrVgKkw J/7fnDwyuruh8q8W9YgQljs3+wtLFQAiY72nmWSD/mYM1/TLTzCL8XphSe8jnRCsH8ZX FSng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=XnJUFKT7mpJJkpoBZtT7iuNHzt9Orb+KaxsIyTb16E0=; b=X7k0SSa8qjTe67EVO54Z0s8MjVFuSnZhBC1THQ1c2CEI5iGLQIGUv+w4xs3mvFCCaE +VmqLAsEfpdGLm/m7/417I+wX68dDWoY+weZWh1DV7hxhqng1Z3JAI+p3SanBqYs4Iv0 PXpH4pcTHrLuNr3zmUtDuP3HlLYiNFcwdGz43Agg1pi7jVPc4quIbG+c322iEATahnNd LcuNTuMJrShDkZxay4VzKIl9nIfMNDC0izOjZIr0hM3lb6Zzs3GfyvHrGwx+UjyaVBE7 0EyOZeYIB/l15togQkzu8abomGRvDsL0g4Z2Yr1IGewpqLM668z4opWDG8R57zrw01ue U+HA== X-Gm-Message-State: AOAM530JuCr84PYjKpIDZqUntN7HDVAXbn/uwUhsIbKHHu8aGtMd72vK +3btr33gEOdrNSvYEjKXZ4XL2TeNuUYNOmrxV2g= X-Google-Smtp-Source: ABdhPJxd629ibdjBhMM1erN6M0LiJ+fYgjJUKGph/ldUDOSSCcPf87XqaVqV8gqhPLw7e+VdSYNXLyCfr+VoUSdorV4= X-Received: by 2002:a05:6402:312e:: with SMTP id dd14mr6486295edb.366.1611941892968; Fri, 29 Jan 2021 09:38:12 -0800 (PST) MIME-Version: 1.0 References: <20210127233345.339910-1-shy828301@gmail.com> <20210127233345.339910-11-shy828301@gmail.com> <0eee1cbd-4149-9f03-615d-18c81b8a85af@suse.cz> In-Reply-To: <0eee1cbd-4149-9f03-615d-18c81b8a85af@suse.cz> From: Yang Shi Date: Fri, 29 Jan 2021 09:38:01 -0800 Message-ID: Subject: Re: [v5 PATCH 10/11] mm: memcontrol: reparent nr_deferred when memcg offline To: Vlastimil Babka Cc: Roman Gushchin , Kirill Tkhai , Shakeel Butt , Dave Chinner , Johannes Weiner , Michal Hocko , Andrew Morton , Linux MM , Linux FS-devel Mailing List , Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" 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 Fri, Jan 29, 2021 at 7:52 AM Vlastimil Babka wrote: > > On 1/28/21 12:33 AM, Yang Shi wrote: > > Now shrinker's nr_deferred is per memcg for memcg aware shrinkers, add to parent's > > corresponding nr_deferred when memcg offline. > > > > Signed-off-by: Yang Shi > > Acked-by: Vlastimil Babka > > A question somewhat outside of the scope of the series. Should we shrink before > reparenting on memcg offline? Would it make more sense than assume the kmemcg > objects that are still cached are used also by others? TBH, I'm not sure. I think it depends on workload. For example, the build server may prefer to keep the objects cached since the samce objects may be reused by multiple build jobs. > > > --- > > include/linux/memcontrol.h | 1 + > > mm/memcontrol.c | 1 + > > mm/vmscan.c | 31 +++++++++++++++++++++++++++++++ > > 3 files changed, 33 insertions(+) > > > > diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h > > index e0384367e07d..fe1375f08881 100644 > > --- a/include/linux/memcontrol.h > > +++ b/include/linux/memcontrol.h > > @@ -1586,6 +1586,7 @@ extern int alloc_shrinker_info(struct mem_cgroup *memcg); > > extern void free_shrinker_info(struct mem_cgroup *memcg); > > extern void set_shrinker_bit(struct mem_cgroup *memcg, > > int nid, int shrinker_id); > > +extern void reparent_shrinker_deferred(struct mem_cgroup *memcg); > > #else > > #define mem_cgroup_sockets_enabled 0 > > static inline void mem_cgroup_sk_alloc(struct sock *sk) { }; > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > > index f64ad0d044d9..21f36b73f36a 100644 > > --- a/mm/memcontrol.c > > +++ b/mm/memcontrol.c > > @@ -5282,6 +5282,7 @@ static void mem_cgroup_css_offline(struct cgroup_subsys_state *css) > > page_counter_set_low(&memcg->memory, 0); > > > > memcg_offline_kmem(memcg); > > + reparent_shrinker_deferred(memcg); > > wb_memcg_offline(memcg); > > > > drain_all_stock(memcg); > > diff --git a/mm/vmscan.c b/mm/vmscan.c > > index 0373d7619d7b..55ad91a26ba3 100644 > > --- a/mm/vmscan.c > > +++ b/mm/vmscan.c > > @@ -386,6 +386,37 @@ static long set_nr_deferred_memcg(long nr, int nid, struct shrinker *shrinker, > > return atomic_long_add_return(nr, &info->nr_deferred[shrinker->id]); > > } > > > > +static struct shrinker_info *shrinker_info_protected(struct mem_cgroup *memcg, > > + int nid) > > +{ > > + return rcu_dereference_protected(memcg->nodeinfo[nid]->shrinker_info, > > + lockdep_is_held(&shrinker_rwsem)); > > +} > > + > > +void reparent_shrinker_deferred(struct mem_cgroup *memcg) > > +{ > > + int i, nid; > > + long nr; > > + struct mem_cgroup *parent; > > + struct shrinker_info *child_info, *parent_info; > > + > > + parent = parent_mem_cgroup(memcg); > > + if (!parent) > > + parent = root_mem_cgroup; > > + > > + /* Prevent from concurrent shrinker_info expand */ > > + down_read(&shrinker_rwsem); > > + for_each_node(nid) { > > + child_info = shrinker_info_protected(memcg, nid); > > + parent_info = shrinker_info_protected(parent, nid); > > + for (i = 0; i < shrinker_nr_max; i++) { > > + nr = atomic_long_read(&child_info->nr_deferred[i]); > > + atomic_long_add(nr, &parent_info->nr_deferred[i]); > > + } > > + } > > + up_read(&shrinker_rwsem); > > +} > > + > > static bool cgroup_reclaim(struct scan_control *sc) > > { > > return sc->target_mem_cgroup; > > >