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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 040D0C64EC4 for ; Thu, 9 Mar 2023 09:36:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8F6026B0075; Thu, 9 Mar 2023 04:36:38 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 87DB8280001; Thu, 9 Mar 2023 04:36:38 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6F73C6B007B; Thu, 9 Mar 2023 04:36:38 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 5B6816B0075 for ; Thu, 9 Mar 2023 04:36:38 -0500 (EST) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 1381B1C6941 for ; Thu, 9 Mar 2023 09:36:38 +0000 (UTC) X-FDA: 80548854876.13.7E2BE11 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by imf24.hostedemail.com (Postfix) with ESMTP id DFCFA18000A for ; Thu, 9 Mar 2023 09:36:35 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=r1EsnW50; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=chsZFGv2; spf=pass (imf24.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1678354596; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=/UfrF/Vwc/LNYi2Rk9oLuWT5JiYHKO2T81orHmbB0Ww=; b=WYcNdzaZFfczuo+6ucltw3IVhvvPB82CpYGj5E+c06sM5wsPkoXdymJ2bCmu285cbX5px7 Kl81+QKnswZlHitei8fdtfUNbO10mVhc2TuQICnpEJaW9DRkI/JwuzAHERgxZ9dED/XU61 fVAxkQOXPThYErSuiLLA+22VexurSsA= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=r1EsnW50; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=chsZFGv2; spf=pass (imf24.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1678354596; a=rsa-sha256; cv=none; b=C8Nb1G9BzKTuvS9yEBGjAGd6VcSykDoDc35DPXVSJ4H1vT4kD53U1UOtOJnSGqxNJ8XCwL LSekC7PVRFnovWztH0YwhKvpTHrd79TUc9flYKZ0lG0sUb+VGO9P9Yx6hlR7kFO6oWuYFC 5hyPC+kzD0HfkRvt5lhiQyYRKk/0fKs= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 8F7391F8B0; Thu, 9 Mar 2023 09:36:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1678354594; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/UfrF/Vwc/LNYi2Rk9oLuWT5JiYHKO2T81orHmbB0Ww=; b=r1EsnW50oD6DnaMBtnnfjqwosKY7Ll9UtsLN5ySTV+18xm98dix5+7u0DT1X5YjpABnWwL HecmR1vIFbWQrlTYxGJAcKBuNRoD+ZpNHZk4WMb/cXh/OcpiapF/w8W2J60G1ueSUFNhEJ yniPTuFjiBqCBvNXrtI+Sb6SX8EZNw0= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1678354594; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/UfrF/Vwc/LNYi2Rk9oLuWT5JiYHKO2T81orHmbB0Ww=; b=chsZFGv2Amfumh7LD54uoE1TAnrxkIvZCtlsQ9ghg68OY06O+EKSA+qE68tY1V/f9TyDoj opcwtOXjkNYxwDBA== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 4FCA01391B; Thu, 9 Mar 2023 09:36:34 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id SNrYEqKoCWQmEwAAMHmgww (envelope-from ); Thu, 09 Mar 2023 09:36:34 +0000 Message-ID: Date: Thu, 9 Mar 2023 10:36:34 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: Re: [PATCH v4 5/8] mm: shrinkers: make count and scan in shrinker debugfs lockless Content-Language: en-US To: Qi Zheng , akpm@linux-foundation.org, tkhai@ya.ru, hannes@cmpxchg.org, shakeelb@google.com, mhocko@kernel.org, roman.gushchin@linux.dev, muchun.song@linux.dev, david@redhat.com, shy828301@gmail.com, rppt@kernel.org Cc: sultan@kerneltoast.com, dave@stgolabs.net, penguin-kernel@I-love.SAKURA.ne.jp, paulmck@kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <20230307065605.58209-1-zhengqi.arch@bytedance.com> <20230307065605.58209-6-zhengqi.arch@bytedance.com> From: Vlastimil Babka In-Reply-To: <20230307065605.58209-6-zhengqi.arch@bytedance.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: DFCFA18000A X-Stat-Signature: ur5hm69zcrjgufnocehrzzt8nedbtirm X-Rspam-User: X-HE-Tag: 1678354595-352123 X-HE-Meta: U2FsdGVkX1+cfx6HGw6nDWsBsTPehVbVGU9tq7WjwoH6xUeCj8Z1R6dUw3o0wo76Zz10yM1/6IHRVsBourizw9gJ6ECAEcIqlg5aQ7ZZRQe83J9PhFpR5Gqghb6aQ4YOLVCdypvD4BW4ZBEcRB3b91I6LBSWc1sP2ZJ3yFty45lcNhP63SA8EkUIxcR9+k64Jq8TAIHKT1KtOtww/kUYA3AgFbXC/qKdP/Nm0s8jjR4HWvq1AVwc7riTJgaTAwbJFeocuQsJ3xfNG76j9EVotkLGMY9Ri1xqjRFTlK09M4CFdK4nlKoKaGyaqAUQof0Sx5wxIRz3gtq4cLEDvM5UWN+2KXnX6vs869TdaMQkzVyo7O9uuSO3RqH4w3D4f+kSV9f3+DPK9zneNdpZebCCvBBPdOVixZ5Zk9SE6gekohSnItz1qRfDui6rgveRA+VIIjsXIBpZA6dEZzA+JwyXe/yR/G6vl1RkUgY53ENHwnRuhROmXnVcaPE1/zDkwZJ+LFyyix7/Ve25KuYnsdBxTmQgY9AvcQQdXEMAdRT0ODjkO3bEYaxahD8E4Jz7/WzxfqBLsgSDQ9+2LClKbJ/Rj/o4BpAQwiIn+5Q8dNvnpb9wOrqvZsf6FtP1QWiuuYEu5h7pN74urUvuIokVbx/Wo3Sipa+u5eprFhZO5ZW5u7u1oFr6GINHC3G7DWb6tyF4Gwfn8scje55h8oE2ua53yIlO0uQW0eFrihwae9AC+vJPfpxRgIiT0+5ipfhOil14v4sP0oZfNxaWU494mY48aH1OndVqBi7wyevY7jVfkuG9BXr0REApBV2vZgS3x5EWKycqqHRm9BOnci0S18Lzs9oL9y4vSFS95SORfzvCTzZBfBZqEb5c5XuMEDy2s/laFQUCO1YCpFmNB86np+4kq/5H4eS9RdCiQ2gyA2r/3WuRGciNDryBhCzq+5lWdtvOD2kdbNImaAgiPM0DHTo EXZ2svpT g/5wPoQuRZcj0niapJX6ra4JoO3QymzBVqp7nEnUiFVI+XPf/+pwrjLIeMEFAbHURZeCEVLnUAX9qIyGyAr4f3ELHDCoOGwonXyxr3u4SypVj22hFuncla29dBNhUSBaQMW8QDeZR9/GbbWmGz6b0f7LQ+EnGAiP4bvdfWChu+Vg8YxANclqNvqh59a1BzNhiFWReKRWA0m9ratSBZszsLJUpZn3OjnPt1qSP11vR70nKw1sU2PmWXOyrhVrjZJCpZZBosNRc9UXKJQETMw21yPDTiv1YqUtmASa3BPJVYG3kCRCJ7t7eoSLMzg== 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 3/7/23 07:56, Qi Zheng wrote: > Like global and memcg slab shrink, also use SRCU to > make count and scan operations in memory shrinker > debugfs lockless. > > Signed-off-by: Qi Zheng Acked-by: Vlastimil Babka > --- > mm/shrinker_debug.c | 24 +++++++----------------- > 1 file changed, 7 insertions(+), 17 deletions(-) > > diff --git a/mm/shrinker_debug.c b/mm/shrinker_debug.c > index 39c3491e28a3..6aa7a7ec69da 100644 > --- a/mm/shrinker_debug.c > +++ b/mm/shrinker_debug.c > @@ -9,6 +9,7 @@ > /* defined in vmscan.c */ > extern struct rw_semaphore shrinker_rwsem; > extern struct list_head shrinker_list; > +extern struct srcu_struct shrinker_srcu; > > static DEFINE_IDA(shrinker_debugfs_ida); > static struct dentry *shrinker_debugfs_root; > @@ -49,18 +50,13 @@ static int shrinker_debugfs_count_show(struct seq_file *m, void *v) > struct mem_cgroup *memcg; > unsigned long total; > bool memcg_aware; > - int ret, nid; > + int ret = 0, nid, srcu_idx; > > count_per_node = kcalloc(nr_node_ids, sizeof(unsigned long), GFP_KERNEL); > if (!count_per_node) > return -ENOMEM; > > - ret = down_read_killable(&shrinker_rwsem); > - if (ret) { > - kfree(count_per_node); > - return ret; > - } > - rcu_read_lock(); > + srcu_idx = srcu_read_lock(&shrinker_srcu); > > memcg_aware = shrinker->flags & SHRINKER_MEMCG_AWARE; > > @@ -91,8 +87,7 @@ static int shrinker_debugfs_count_show(struct seq_file *m, void *v) > } > } while ((memcg = mem_cgroup_iter(NULL, memcg, NULL)) != NULL); > > - rcu_read_unlock(); > - up_read(&shrinker_rwsem); > + srcu_read_unlock(&shrinker_srcu, srcu_idx); > > kfree(count_per_node); > return ret; > @@ -115,9 +110,8 @@ static ssize_t shrinker_debugfs_scan_write(struct file *file, > .gfp_mask = GFP_KERNEL, > }; > struct mem_cgroup *memcg = NULL; > - int nid; > + int nid, srcu_idx; > char kbuf[72]; > - ssize_t ret; > > read_len = size < (sizeof(kbuf) - 1) ? size : (sizeof(kbuf) - 1); > if (copy_from_user(kbuf, buf, read_len)) > @@ -146,11 +140,7 @@ static ssize_t shrinker_debugfs_scan_write(struct file *file, > return -EINVAL; > } > > - ret = down_read_killable(&shrinker_rwsem); > - if (ret) { > - mem_cgroup_put(memcg); > - return ret; > - } > + srcu_idx = srcu_read_lock(&shrinker_srcu); > > sc.nid = nid; > sc.memcg = memcg; > @@ -159,7 +149,7 @@ static ssize_t shrinker_debugfs_scan_write(struct file *file, > > shrinker->scan_objects(shrinker, &sc); > > - up_read(&shrinker_rwsem); > + srcu_read_unlock(&shrinker_srcu, srcu_idx); > mem_cgroup_put(memcg); > > return size;