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 321FCC636D7 for ; Thu, 23 Feb 2023 04:36:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 60C0E6B0072; Wed, 22 Feb 2023 23:36:14 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5BCC76B0073; Wed, 22 Feb 2023 23:36:14 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 483F36B0074; Wed, 22 Feb 2023 23:36:14 -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 34D156B0072 for ; Wed, 22 Feb 2023 23:36:14 -0500 (EST) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id E6AC440FBE for ; Thu, 23 Feb 2023 04:36:13 +0000 (UTC) X-FDA: 80497294626.01.A3B9EF7 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) by imf19.hostedemail.com (Postfix) with ESMTP id 197EB1A0002 for ; Thu, 23 Feb 2023 04:36:09 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=MwM88iKJ; spf=pass (imf19.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=none) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1677126971; 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=+XK4ibI8/uUfdNyj+CoDahUPgh1hk1k4xSJibemMMbU=; b=1a4mpJzBkykCwoqrIkXS5xdZDVlfPS29IaewrBfuC0plbiILh+KdLGrqOGQCOcY/Gi+NYC fI1wQcJnrcIY1teiNqbTL+B75oxGe9W7OvxlIZr5xH9eE9dzAggUtuOC41jloXKVHLZ1jk g+dY6oyddJmoxBsCHmEek25DQNzhFMY= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=MwM88iKJ; spf=pass (imf19.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=none) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1677126971; a=rsa-sha256; cv=none; b=OOsfts/JA9xIMCPJXT4bWtPwOI1z3nHCnBCNGJVB+QkUVslAdURdn4evoGhqc1gBaD4NYI aUo1h+WA7/14fEOhIFFZ25JNpCvYkvW9FSRFtkV07LzpnNkTTqr7yg5XFD4a6YG7XoJzZS B/mRnG05OOt6t0cu5H5A7SQv/r+HNpI= Received: by mail-pl1-f173.google.com with SMTP id u14so7504611ple.7 for ; Wed, 22 Feb 2023 20:36:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=+XK4ibI8/uUfdNyj+CoDahUPgh1hk1k4xSJibemMMbU=; b=MwM88iKJj+5FHMLrX6MQ87HI+V5GLGcQS/e1HnbX121YYIRnPeVUQLPz/Ab73429h0 DHVN0ZHfUEAMOSUUNsdmCF8rZeyDyT8OZiPuXb9gk0Ri7aqjxmylnTURMdkPb8QUxawe qH2IX/Hv9L7RlKBBEzs+i7tZ4uezCu85IdggYavrJeYqJiajjJGfdvVAKH/Dccsa3XGB gYHxTBmX85MASmstqPNM5HPGw/BjeJUCFGN8qjCZeyoIRuatLzYP4QLEx5oODuEzzby3 5R1IJbKLorPuS3/Bw037p2WnZ3OpTlRGI/HJJEdqlZnXDTDZ8Cv672iLNo/weVH5u/mj SPkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=+XK4ibI8/uUfdNyj+CoDahUPgh1hk1k4xSJibemMMbU=; b=u69VOEFj6JuqTaoftrJUfbgJWZgmlBYUWj+CWWN8LapIqL5ljciMfYTVM9nmI7jD+0 zwmrDC0KYIFHIO03Eq1N/G8wXcA5bAHCpENruQB15TYst/xTOaPdB2C2nTiApia6oPvI ZkwCJP7Lk0xkbUB3bGX+q8I7MiJyMZGbt++yIj9iLcrrw7tCY5kPUCPkUrbIxEeoHHyb 8tdYAoUTfCMTD2lSrRIlUvIDj2TOjvgBJ2s+Ap82OG7qHCktYAAvdZdoP/MSMV0hztj6 /OycBp18IbFD2fqQ620F61qjHR3o8z3bzxXBSsZR1WqueMRQWvN5+sCRitlv2Qfi8jeZ o3Mw== X-Gm-Message-State: AO0yUKX5jQ//N6Qjqr4OuC8tG9WdbHlvWGpgmkCaBxao82lMQIME+7MP 7OWt/7Nyb29n6KCsbrAGQ/+PPQ== X-Google-Smtp-Source: AK7set+k6V8krmEU27aMnHaUWN3cNVVoz5AuFIm3KkclaffwIWLcTyYrGBxgQHtMc71TKJn039YlYw== X-Received: by 2002:a05:6a21:3399:b0:c7:6a98:5bd9 with SMTP id yy25-20020a056a21339900b000c76a985bd9mr14002720pzb.3.1677126968589; Wed, 22 Feb 2023 20:36:08 -0800 (PST) Received: from [10.70.252.135] ([139.177.225.229]) by smtp.gmail.com with ESMTPSA id b21-20020a6567d5000000b00476dc914262sm5306590pgs.1.2023.02.22.20.36.03 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 22 Feb 2023 20:36:08 -0800 (PST) Message-ID: <46020fa1-d55b-c719-3bde-df66c93cd0d0@bytedance.com> Date: Thu, 23 Feb 2023 12:36:00 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.7.2 Subject: Re: [PATCH 2/5] mm: vmscan: make memcg slab shrink lockless Content-Language: en-US To: Kirill Tkhai 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, Andrew Morton , Johannes Weiner , Shakeel Butt , Michal Hocko , Roman Gushchin , Muchun Song , David Hildenbrand , Yang Shi References: <20230220091637.64865-1-zhengqi.arch@bytedance.com> <20230220091637.64865-3-zhengqi.arch@bytedance.com> <8733cb3c-7a6a-33c4-b84e-4fb981dae765@ya.ru> <2eb276f1-0d81-f207-4cf9-e6586c5e18c8@bytedance.com> <715594a8-1eca-7f80-adc0-3655153adffa@ya.ru> From: Qi Zheng In-Reply-To: <715594a8-1eca-7f80-adc0-3655153adffa@ya.ru> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 197EB1A0002 X-Stat-Signature: 7dqen9wx77tu8mk8q81ffwhmath86pw9 X-Rspam-User: X-HE-Tag: 1677126969-263621 X-HE-Meta: U2FsdGVkX18CgHC0KyvmEA/S9agq0JIiKG1WxvcZ63pmwFiZz/z0j3NFnOZMqD4C4xy09clS1A2RdQVUtC2UzQ0P/amJjTGWFaGCQ260X6FaP/iUk+F3lRx+QHh5zhnFD8sw5NavojUEfr01iVKqtsug9nmdfUo+rklCPHbsGsVlrhQ77CQNvypKe9OLF65EromRyru3Pzp2sosGXUG9YrsYol9Yj46xjf0OFY/LF4nLIWLKv4rrtPBRFIU44+70t7AWEKLsT7FaOrLZkj9gKsDmJqWmtTFqZPIbLRkVyNLYMMrhpL5ma1VBURSrjsdF7yDhc8w9oPQUyEQ4ESUvsdETyjS5NnWQh26sngg+Crd0+wvVD9GLRF/weXl08ON67vK0aCaCGaghrG1qBXn3fmlXjLd3x3LyKUZU5oVmqtZz4iCWz/U2rx69XhYRotnWV1jIe/Brc5Na0JHdiPL6zKrYjaKicvhtjVuFZIK2Zg6YI+A9rwh0sIHXiYLiO6dBEmtyK+EmQCBt/OYbNwjEvWbBcws1QPsbP4vm/riYIVlQEEwZ4PU9+CNDm2LWc8jPqKNgl1XEVKXHMFXvjFKHvYZVbgLcYfzPE3/Ws+KTipiaQxAyehX1TYJAOFfqSYjCnGhnEz35rGnKh0XWoJ02q86tKT01AqBKM7fQlsTYhnvSIQCARSm70GbrFsVkI/TawIC4Zzsa8hZHdXAGXjEk9ES3kcwj8kLDLbgpl4NBF7rYBNrP6EcaV5IkM4qFDVCrllLdn94BhgMG2MmJInslV9vEtHGvw6quNdPtxVFSF68RQmlf7nXiL+yNCj/BHVXklcgWrFRhi0MMigmE2blwu7YXvaVzErUaJ67rty6Uu9RJlcWB/WhwjgBbRbNat6uCq7GugVMk17KSbMG4Wcpplc/2GNuu/gbqqnL8ytpZeJFfexU8+FJL1E4XhJLBWs+5otQ6dGMJIli5dJUDwjO ZPjS3yur bV02A3dn/MurDfn+c6L9zZShJFzKkK4eRkJ5osR5k3/etHUT+MY8RjncDX1ZzBn37Gtd5pYJzWzim+4eCmemE9lSgGedGRFdbkSd8M1osWMID4nQ8kVclYGEHF3EEEoJq+laAnqwKG8au0lXN47QA0vETH4YcTqUv/XM4qaJXxnD199aUuUdv9Jcv3lgvRogTmBVLezmreMWv44Pbc51eBurXY+hO1Ot4PqjiR2o1T6T3NIHZVcXy86PQGfxNFuDrGPIVzJMPldG/QNVtT09RSM1FI69/l37d11hhzYM5B+IC2Hf7CqnwcFW2lDritxGLTNPiEMYfv5ZaUe4LzI3DJGQL9lOj6wLhqqYQ5hF3ZnkZ3SnINItioCCTvvt7balN/9jhC0MxST+g+Yntm9fUjOED+Oqi2w41XQP84o9Vm7mIsjyxmNoy+zJkKeIVao/WPIUH X-Bogosity: Ham, tests=bogofilter, spamicity=0.000175, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On 2023/2/23 03:58, Kirill Tkhai wrote: > On 22.02.2023 10:32, Qi Zheng wrote: >> >> >> On 2023/2/22 05:28, Kirill Tkhai wrote: >>> On 20.02.2023 12:16, Qi Zheng wrote: >> <...> >>>>     void reparent_shrinker_deferred(struct mem_cgroup *memcg) >>>>   { >>>> -    int i, nid; >>>> +    int i, nid, srcu_idx; >>>>       long nr; >>>>       struct mem_cgroup *parent; >>>>       struct shrinker_info *child_info, *parent_info; >>>> @@ -429,16 +443,16 @@ void reparent_shrinker_deferred(struct mem_cgroup *memcg) >>>>           parent = root_mem_cgroup; >>>>         /* Prevent from concurrent shrinker_info expand */ >>>> -    down_read(&shrinker_rwsem); >>>> +    srcu_idx = srcu_read_lock(&shrinker_srcu); >>> >>> Don't we still have to be protected against parallel expand_one_shrinker_info()? >>> >>> It looks like parent->nodeinfo[nid]->shrinker_info pointer may be changed in expand* >>> right after we've dereferenced it here. >> >> Hi Kirill, >> >> Oh, indeed. We may wrongly reparent the child's nr_deferred to the old >> parent's nr_deferred (it is about to be freed by call_srcu). >> >> The reparent_shrinker_deferred() will only be called on the offline >> path (not a hotspot path), so we may be able to use shrinker_mutex >> introduced later for protection. What do you think? > > It looks good for me. One more thing I'd analyzed is whether we want to have > is two reparent_shrinker_deferred() are executing in parallel. I see that mem_cgroup_css_offline() is already protected by cgroup_mutex, so maybe shrinker_mutex is enough here. :) > > Possible, we should leave rwsem there as it was used before.. > >>> >>>>       for_each_node(nid) { >>>> -        child_info = shrinker_info_protected(memcg, nid); >>>> -        parent_info = shrinker_info_protected(parent, nid); >>>> +        child_info = shrinker_info_srcu(memcg, nid); >>>> +        parent_info = shrinker_info_srcu(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); >>>> +    srcu_read_unlock(&shrinker_srcu, srcu_idx); >>>>   } >>>>     static bool cgroup_reclaim(struct scan_control *sc) >>>> @@ -891,15 +905,14 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, >>>>   { >>>>       struct shrinker_info *info; >>>>       unsigned long ret, freed = 0; >>>> +    int srcu_idx; >>>>       int i; >>>>         if (!mem_cgroup_online(memcg)) >>>>           return 0; >>>>   -    if (!down_read_trylock(&shrinker_rwsem)) >>>> -        return 0; >>>> - >>>> -    info = shrinker_info_protected(memcg, nid); >>>> +    srcu_idx = srcu_read_lock(&shrinker_srcu); >>>> +    info = shrinker_info_srcu(memcg, nid); >>>>       if (unlikely(!info)) >>>>           goto unlock; >>>>   @@ -949,14 +962,9 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, >>>>                   set_shrinker_bit(memcg, nid, i); >>>>           } >>>>           freed += ret; >>>> - >>>> -        if (rwsem_is_contended(&shrinker_rwsem)) { >>>> -            freed = freed ? : 1; >>>> -            break; >>>> -        } >>>>       } >>>>   unlock: >>>> -    up_read(&shrinker_rwsem); >>>> +    srcu_read_unlock(&shrinker_srcu, srcu_idx); >>>>       return freed; >>>>   } >>>>   #else /* CONFIG_MEMCG */ >>> >> > -- Thanks, Qi