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 B0360E9413A for ; Fri, 6 Oct 2023 22:59:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 15AAB80012; Fri, 6 Oct 2023 18:59:38 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0E49A80008; Fri, 6 Oct 2023 18:59:38 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E9F2780012; Fri, 6 Oct 2023 18:59:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id D500580008 for ; Fri, 6 Oct 2023 18:59:37 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id A2729B42AF for ; Fri, 6 Oct 2023 22:59:37 +0000 (UTC) X-FDA: 81316555194.04.FAE6E70 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) by imf13.hostedemail.com (Postfix) with ESMTP id C421120008 for ; Fri, 6 Oct 2023 22:59:35 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=SSyMaSzi; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf13.hostedemail.com: domain of dennisszhou@gmail.com designates 209.85.221.41 as permitted sender) smtp.mailfrom=dennisszhou@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1696633175; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=a4kjcUaoav85BgSvtv1BA6kawwG45pQg/poo37oA9DU=; b=5Hzk1ztF4EI9apLRYtixDLS/x7qs3hjWLdhtaaiwYDozWOWJDSDXaaCeOEEqK+R+HF3NN2 ntX9qaW1idVl+XmpSAurqaQ1R7RzEgyDydWaws6HqpmOiitw28y5onIP7V30ntKoSS8CZa gUR33nSFZTLkWy6zDnHx0fv7hES4C1M= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=SSyMaSzi; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf13.hostedemail.com: domain of dennisszhou@gmail.com designates 209.85.221.41 as permitted sender) smtp.mailfrom=dennisszhou@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1696633175; a=rsa-sha256; cv=none; b=YLElRLc7HGYjfNR+TpQFbINaV/0FBOX0u87nSTKrmNJSTVrPuQtsKq/oUkTNaLyLB1o443 hSI3Q4wTUyJT+VNQPYSt1xjuFCoo+L6f1Rfc+8E0DrvCTY+E+CKbSFKRybiBm3Funqma9K APS/irf/vCQD6WKlqR3J6Thte1fs+QY= Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3296b49c546so857449f8f.3 for ; Fri, 06 Oct 2023 15:59:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696633174; x=1697237974; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=a4kjcUaoav85BgSvtv1BA6kawwG45pQg/poo37oA9DU=; b=SSyMaSziui3Zn6AiYd7gUN8l7OCxBkR2Y9MSZp2VCUqMDxL4Lc8SWX71HiHjxgRgg3 A3TYIHHdiY1ZZ912SvgFHBqTiHqt3Axi/DSGQYBFUxzVGrm+zM0t1gdjrhQvRnqzn9Ex CS1oZ0GQKJaDKtDafJPPpGF7eu5EOuYvOWalLgICWVqOvjOQ+ngR1OJ+attwisWu76gp s2AZz0Xq3vdDAWF45Jzs1V3Luunhv5+kB5Nx5wEtWt2dBUB/JJZgCVHq8XrTtdHalp2O khIQSHTwlIINHermG4BIoWiuWfjzYDr0Jf5fwwqviDvbIZZ0CQ81QODUNImR+NnjxadD jULw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696633174; x=1697237974; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=a4kjcUaoav85BgSvtv1BA6kawwG45pQg/poo37oA9DU=; b=JrpSw1VVVR9P2OrY+KpeumXfh+gc+6hLU3Gc/9m6LU/R7dbqf8jm2DwuUFwT1SGDRe z3tgnkDND0LnL+OiWzqw9TFOuMgSzMreOG6lFSt86I37cuaLbZskQsQRkH4xDtR3kMNt /wslX9HPZtKdSzC+NQ6oJCSH8pcYP+9vFPMMUokajNchLGo23g4vPFQPg7/qik8iQDW5 9qpDlet68N8Wr6kuaFxPOTw35QbTDwHKesy4G97i/itHpelQXpl+g65OJNDsQmvAwPZ/ N3/8n43Zl6tsNJJGPIzqv3gCMEskxgTz5XBNsoNiJHol4sEJNGnOhHxxjQ0vcpOtZCJV wkUw== X-Gm-Message-State: AOJu0YyYjb3dgoTksSoY+pTLxjsKBNJ5CAy6RqGmYryy91JpqysVXcEs q1RezyGK2QBQmtnwkN/45wg= X-Google-Smtp-Source: AGHT+IGGwAEzUi1vGrqfSHucnhnxYAKWrFPtL6Ez8wKd/cxxlGuXqAv5ZREH5fqYGsW8nA600wYPxQ== X-Received: by 2002:adf:f9cc:0:b0:320:1c7:fd30 with SMTP id w12-20020adff9cc000000b0032001c7fd30mr8011763wrr.17.1696633173942; Fri, 06 Oct 2023 15:59:33 -0700 (PDT) Received: from snowbird (host86-164-181-115.range86-164.btcentralplus.com. [86.164.181.115]) by smtp.gmail.com with ESMTPSA id v6-20020adff686000000b0031980294e9fsm2565811wrp.116.2023.10.06.15.59.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Oct 2023 15:59:33 -0700 (PDT) Date: Fri, 6 Oct 2023 15:59:31 -0700 From: Dennis Zhou To: Hugh Dickins Cc: "Chen, Tim C" , Andrew Morton , Dave Chinner , "Darrick J. Wong" , Christian Brauner , Carlos Maiolino , Chuck Lever , Jan Kara , Matthew Wilcox , Johannes Weiner , Axel Rasmussen , "linux-fsdevel@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-mm@kvack.org" Subject: Re: [PATCH 8/8] shmem,percpu_counter: add _limited_add(fbc, limit, amount) Message-ID: References: <17877ef1-8aac-378b-94-af5afa2793ae@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <17877ef1-8aac-378b-94-af5afa2793ae@google.com> X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: C421120008 X-Stat-Signature: k9ms9rg6ii8oiq745as4x393e1urwrjm X-Rspam-User: X-HE-Tag: 1696633175-325751 X-HE-Meta: U2FsdGVkX1/m3oEguFWX4n4X+MXF7k9/NIKDyZzwZ0L35dWDo4y9jMBk8TOJEDho84oMWWe+dlMpOvr9kID4/ogJzQvtIXpUyaan9/HjcX/hQGbZCdi3m3TIxMqF7g1d6NJBTRmDTEccQJ3P8ZFXkB4B6EitwOOtVtJLUIqXN1VVa5FEhniUv7U8uwJuACdYmNUtVxu/9mpR98BuTuHdxt7WY8H2cuUQO0pqsGpVOhVhv8Zf9mUPqtWuLugOHY01YLEXianBaFN7JNSjqAkK+wrryxo6Y/IWjgvnqeIoCLXaBWh8neGxWvpZHepeFzNDmkgoyuK9fSS2iwS1dAISMPhUxjOLunvkMTyRZiGVwhrtRkT+bpnRsYuBubvimKUMIO/zVdOBYuM/7r/n+GVHHOVGt+By7cCBram+FlfEPWzK/nGNRKL1zXsBkFjsjPsveJzYf/rOk5/kllNISMO5CVO4LJh3FOfDNkbWu018peF1DcZabisWvpkt0e1RJh9WLOViAAhO5gUxMknM6tK+XkR0vNoLoFfzPQ+7IrMK5XiXCopDehPyQw2b9KFnfQILD49hcF4StRhvP+IYY/I8QP1N3BjWxf/1sKcGkXuT2ivRtOju7F6J1wbSjYn7yVdx2ri4HhdKiLuIO9Q1TZwvi4uw4spf/ihpiixatJb7lQlRi6V78nE7K6+8NlB2+VjyEXWuWu991SxXaLyAG5FVZJqvyM94+kxqIp83KrnDh8Q+hs11OCjUdKwyXRPlWoAUkBc2FCqHEDkFvfaEc0t7sDHjaRA487YodNTlvmj8N3rdvj3a8XS66qAwCVUan95ucUZTvydnLKPeYO7F2qRrk4Nlinppz5X1iW9odZj2y4FN2kPwTX8/RUVpj+EGsB+jMdgCEcKVzCqzhkNV4tH0KojoupIfmUo5zyfjorOOkJdKCU6O4NtkRwDkLlRmuFV7ywRhZwTFBCMJHTskXdn qxdImb2W nA20fotmRSc9wUqGfGqMnFgHB31TIScdBZKiVj+vhN6CsNSKhg4lBrHUHBGPtQQLKEHne6xO16eXd80jcq0s8Wria4aoXv8uIxMQB85zBg8MFN9Ousq06Nz2bHyPt48wb7LhM5+2Tb3aFQAjiL1QjcPEwsNbQfUF5yNXkuWVsfxWV85Ih0flDX6qvBWRE8tVaTjmTXQaL9kBsGui2lrSb1IjYJUSaXq7iO3Lpdz71dZsouSPwZ1BSX/UZrv6IrM/kBm7rvbsFmTjSPswYxKUJNIZo76yUf2/Bq95gOiEX5jjPXy2wqoSX+AMC58b42cv3xDiXu1w4hxnjyUeOGQrIiC9FVnzLVC1/2EMuPDk1dOKfm5Q/aLSf2+/UclmmZs2qo/mw/1M15AN3cyMecunkvsgk7Z94UuC+qVU0YCnNTwqfjlHMlpytcScJJMS3RdYVl4Ih/qVD/fziXD4v9LPsY3LCuF2vFUxbWv4wk66xm5k/Ru9bEhXXpt2d+lY8j2h7NeTXxY7n76XaZ1dfrdRiUoqX8NRP7sILVbM+adjN+5hLvcz5yfCrR68raoyBpIGUpQ+oISKHFiTjxFtvDNap92KNLhUdRI+tsjYOpaAipPcDvvZhS2SCtTg6G8BLO0qETBJC 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: Hello, On Thu, Oct 05, 2023 at 10:42:17PM -0700, Hugh Dickins wrote: > On Thu, 5 Oct 2023, Chen, Tim C wrote: > > > >--- a/lib/percpu_counter.c > > >+++ b/lib/percpu_counter.c > > >@@ -278,6 +278,59 @@ int __percpu_counter_compare(struct > > >percpu_counter *fbc, s64 rhs, s32 batch) } > > >EXPORT_SYMBOL(__percpu_counter_compare); > > > > > >+/* > > >+ * Compare counter, and add amount if the total is within limit. > > >+ * Return true if amount was added, false if it would exceed limit. > > >+ */ > > >+bool __percpu_counter_limited_add(struct percpu_counter *fbc, > > >+ s64 limit, s64 amount, s32 batch) { > > >+ s64 count; > > >+ s64 unknown; > > >+ unsigned long flags; > > >+ bool good; > > >+ > > >+ if (amount > limit) > > >+ return false; > > >+ > > >+ local_irq_save(flags); > > >+ unknown = batch * num_online_cpus(); > > >+ count = __this_cpu_read(*fbc->counters); > > >+ > > >+ /* Skip taking the lock when safe */ > > >+ if (abs(count + amount) <= batch && > > >+ fbc->count + unknown <= limit) { > > >+ this_cpu_add(*fbc->counters, amount); > > >+ local_irq_restore(flags); > > >+ return true; > > >+ } > > >+ > > >+ raw_spin_lock(&fbc->lock); > > >+ count = fbc->count + amount; > > >+ > > > > Perhaps we can fast path the case where for sure > > we will exceed limit? > > > > if (fbc->count + amount - unknown > limit) > > return false; > > Thanks, that sounds reasonable: I'll try to add something like that - > but haven't thought about it carefully enough yet (too easy for me > to overlook some negative case which messes everything up). > > Hugh > Sorry for the late chime in. I'm traveling right now. I haven't been super happy lately with percpu_counter as it has had a few corner cases such as the cpu_dying_mask fiasco which I thought we fixed with a series from tglx [1]. If not I can resurrect it and pull it. I feel like percpu_counter is deviating from its original intended usecase which, from my perspective, was a thin wrapper around a percpu variable. At this point we seem to be bolting onto percpu_counter instead of giving it a clear focus for what it's supposed to do well. I think I understand the use case, and ultimately it's kind of the duality where I think it was xfs is using percpu_counters where it must be > 0 for the value to make sense and there was a race condition with cpu dying [2]. At this point, I think it's probably better to wholy think about the lower bound and upper bound problem of percpu_counter wrt the # of online cpus. Thanks, Dennis [1] https://lore.kernel.org/lkml/20230414162755.281993820@linutronix.de/ [2] https://lore.kernel.org/lkml/20230406015629.1804722-1-yebin@huaweicloud.com/