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 6D2BEC433DB for ; Mon, 11 Jan 2021 17:44:24 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 1AA7920738 for ; Mon, 11 Jan 2021 17:44:24 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1AA7920738 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 85CF86B00FC; Mon, 11 Jan 2021 12:44:23 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 80DDC6B00FE; Mon, 11 Jan 2021 12:44:23 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6FD168D0041; Mon, 11 Jan 2021 12:44:23 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0071.hostedemail.com [216.40.44.71]) by kanga.kvack.org (Postfix) with ESMTP id 5A19F6B00FC for ; Mon, 11 Jan 2021 12:44:23 -0500 (EST) Received: from smtpin07.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 258FF181AEF10 for ; Mon, 11 Jan 2021 17:44:23 +0000 (UTC) X-FDA: 77694218406.07.field54_1f0d0992750e Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin07.hostedemail.com (Postfix) with ESMTP id 002111803F9A5 for ; Mon, 11 Jan 2021 17:44:22 +0000 (UTC) X-HE-Tag: field54_1f0d0992750e X-Filterd-Recvd-Size: 6889 Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) by imf10.hostedemail.com (Postfix) with ESMTP for ; Mon, 11 Jan 2021 17:44:22 +0000 (UTC) Received: by mail-ed1-f54.google.com with SMTP id r5so576091eda.12 for ; Mon, 11 Jan 2021 09:44:22 -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=mCsEhqQNufWXvKqj70hNQJtFIr+1/eY9BnkZgw3eEHU=; b=WdLVaygag1lUeO2+2wpkBrCYfxnEdHj4D5uhqiQcd1rffCviN40OIBwfF5EZGfzcbJ /tIf0s/pDpkVoBElls4oaurZVwT25r//ITjTV6/qtnJSIGoyMc207SSHO7GMX/9Zpwj/ 3RQlLSUNdt5EdGr+eqpHTIZ0pM7bay7FWREwTGnSp5YLq82bfhAcd4xjZVZRusS1AcOi nRuWM/NajK2ST7AUnoEVtHNSWoUs0A/+Hvji6s3DnBT0xF78oSQMOxUf54hMoaJTWfS6 kFN0kfJvkrnsrlKtwNpr5lhVqAkUUMT1lLmrv0iQHwEi7SIF3ADG69b0QGGCK9OSkbmW yKHg== 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=mCsEhqQNufWXvKqj70hNQJtFIr+1/eY9BnkZgw3eEHU=; b=JB6CxUCjUJ0mD+SSJ3FyQqQqhKlJ7jekVD9/sgyRsKEgw+dCvS5D4cKV8wwar0MMXA JTZWZsXw3vo+/sMkjpbhDLkrWZFIOciqWxtJsWnEEMu9AUHLruonFiav2x1mYkQmEzb0 v3wKpl2Mb+EdUiI0sGDlN4rQmDPoLjbCXk4NCLGQW+oRZxxOhA0fmX99seQ7mwSngLEV fZX4VyPHofYamSU3hR9oiYiDEt6EhUx7PSGEUboT5ytlJN1m9ehz3dwAk91KU838mVr8 eKTEUbhKmbBxqKnqMMWYg9OUs/AqsW5JHzmVrHktUh/xybRrySlajMydp4IP9wNOqWRD nqhw== X-Gm-Message-State: AOAM532h+Od6Xf0j4t00PXYmgutomDg0bFBxRlP8H7x+LijiahDq84jO 2AtKm/buIOakQMmJjfyKoyDGKNJDG3Uj0VGT7Y76jHP4ccmAuw== X-Google-Smtp-Source: ABdhPJx+WjTFsu1b1mLfoswctxuuFRdJ4IseoJGWW0pPXYoP6QNr7dABxfqivghOWslz8YEXEX7UuskT+H2yOSzeWgs= X-Received: by 2002:a05:6402:ca2:: with SMTP id cn2mr364738edb.137.1610387061325; Mon, 11 Jan 2021 09:44:21 -0800 (PST) MIME-Version: 1.0 References: <20210105225817.1036378-1-shy828301@gmail.com> <20210105225817.1036378-5-shy828301@gmail.com> <955422c5-0703-e9fb-f309-6ed6b5fc0e0a@virtuozzo.com> In-Reply-To: <955422c5-0703-e9fb-f309-6ed6b5fc0e0a@virtuozzo.com> From: Yang Shi Date: Mon, 11 Jan 2021 09:44:09 -0800 Message-ID: Subject: Re: [v3 PATCH 04/11] mm: vmscan: remove memcg_shrinker_map_size To: Kirill Tkhai Cc: Roman Gushchin , 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 Wed, Jan 6, 2021 at 2:16 AM Kirill Tkhai wrote: > > On 06.01.2021 01:58, Yang Shi wrote: > > Both memcg_shrinker_map_size and shrinker_nr_max is maintained, but actually the > > map size can be calculated via shrinker_nr_max, so it seems unnecessary to keep both. > > Remove memcg_shrinker_map_size since shrinker_nr_max is also used by iterating the > > bit map. > > > > Signed-off-by: Yang Shi > > --- > > mm/vmscan.c | 12 ++++-------- > > 1 file changed, 4 insertions(+), 8 deletions(-) > > > > diff --git a/mm/vmscan.c b/mm/vmscan.c > > index ddb9f972f856..8da765a85569 100644 > > --- a/mm/vmscan.c > > +++ b/mm/vmscan.c > > @@ -185,8 +185,7 @@ static LIST_HEAD(shrinker_list); > > static DECLARE_RWSEM(shrinker_rwsem); > > > > #ifdef CONFIG_MEMCG > > - > > -static int memcg_shrinker_map_size; > > +static int shrinker_nr_max; > > > > static void memcg_free_shrinker_map_rcu(struct rcu_head *head) > > { > > @@ -248,7 +247,7 @@ int memcg_alloc_shrinker_maps(struct mem_cgroup *memcg) > > return 0; > > > > down_read(&shrinker_rwsem); > > - size = memcg_shrinker_map_size; > > + size = DIV_ROUND_UP(shrinker_nr_max, BITS_PER_LONG) * sizeof(unsigned long); > > for_each_node(nid) { > > map = kvzalloc(sizeof(*map) + size, GFP_KERNEL); > > if (!map) { > > @@ -269,7 +268,7 @@ static int memcg_expand_shrinker_maps(int new_id) > > struct mem_cgroup *memcg; > > > > size = DIV_ROUND_UP(new_id + 1, BITS_PER_LONG) * sizeof(unsigned long); > > - old_size = memcg_shrinker_map_size; > > + old_size = DIV_ROUND_UP(shrinker_nr_max, BITS_PER_LONG) * sizeof(unsigned long); > > if (size <= old_size) > > return 0; > > These bunch of DIV_ROUND_UP() looks too complex. Since now all the shrinker maps allocation > logic in the only file, can't we simplify this to look better? I mean something like below > to merge in your patch: Thanks for the suggestion. Will incorporate in v4. > > diff --git a/mm/vmscan.c b/mm/vmscan.c > index b951c289ef3a..27b6371a1656 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -247,7 +247,7 @@ int memcg_alloc_shrinker_maps(struct mem_cgroup *memcg) > return 0; > > down_read(&shrinker_rwsem); > - size = DIV_ROUND_UP(shrinker_nr_max, BITS_PER_LONG) * sizeof(unsigned long); > + size = shrinker_nr_max / BITS_PER_BYTE; > for_each_node(nid) { > map = kvzalloc(sizeof(*map) + size, GFP_KERNEL); > if (!map) { > @@ -264,13 +264,11 @@ int memcg_alloc_shrinker_maps(struct mem_cgroup *memcg) > > static int memcg_expand_shrinker_maps(int new_id) > { > - int size, old_size, ret = 0; > + int size, old_size, new_nr_max, ret = 0; > struct mem_cgroup *memcg; > > size = DIV_ROUND_UP(new_id + 1, BITS_PER_LONG) * sizeof(unsigned long); > - old_size = DIV_ROUND_UP(shrinker_nr_max, BITS_PER_LONG) * sizeof(unsigned long); > - if (size <= old_size) > - return 0; BTW, it seems the above chunk needs to be kept. > + new_nr_max = size * BITS_PER_BYTE; > > if (!root_mem_cgroup) > goto out; > @@ -287,6 +285,9 @@ static int memcg_expand_shrinker_maps(int new_id) > } while ((memcg = mem_cgroup_iter(NULL, memcg, NULL)) != NULL); > > out: > + if (ret == 0) > + shrinker_nr_max = new_nr_max; > + > return ret; > } > > @@ -334,8 +335,6 @@ static int prealloc_memcg_shrinker(struct shrinker *shrinker) > idr_remove(&shrinker_idr, id); > goto unlock; > } > - > - shrinker_nr_max = id + 1; > } > shrinker->id = id; > ret = 0; >