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 1CC5DC4345F for ; Sat, 20 Apr 2024 00:18:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7A9BA6B007B; Fri, 19 Apr 2024 20:18:25 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 758EA6B0083; Fri, 19 Apr 2024 20:18:25 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 620A46B0085; Fri, 19 Apr 2024 20:18:25 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 443466B007B for ; Fri, 19 Apr 2024 20:18:25 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id BAEB11203AA for ; Sat, 20 Apr 2024 00:18:24 +0000 (UTC) X-FDA: 82027998528.11.777163E Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) by imf09.hostedemail.com (Postfix) with ESMTP id 07C84140014 for ; Sat, 20 Apr 2024 00:18:22 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="w6N/FBDU"; spf=pass (imf09.hostedemail.com: domain of rientjes@google.com designates 209.85.214.175 as permitted sender) smtp.mailfrom=rientjes@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1713572303; 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=5ikbl2Ly3fo9Zj3RwahsewHtxBq8zhBJhmAQdizY/PY=; b=XJr9kE/DZATw9CfdsPNHFriEDgkjlF6oYhP+Exuw4AP8qdagCYLKWnnTqsn1G8/lsM/psX slpX1hPWfBNoI+7gFslOFeA6eaw/P44JsP+rStUTJGDhvlgPnL3wlDUAsR5eTWl+M0NOY8 Cuh+jDPMgr38uHNQZxqzWrUyGeca6cs= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="w6N/FBDU"; spf=pass (imf09.hostedemail.com: domain of rientjes@google.com designates 209.85.214.175 as permitted sender) smtp.mailfrom=rientjes@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1713572303; a=rsa-sha256; cv=none; b=VZbnzr02+zlNWwVUcSpgahIoUBGzW1OGLCycbkso2WxlXnwVZyYXhcJefzUBUH5k03MPiA wXNxF85zXLKonBQd5OES8IDPRtHq/IF6LJSo1iW1zQcBB59QnmjAK6xJEcDCP66rzNk+Ch yvnMbN1/pGHxaXEYa1Vs/MnN08QtXYQ= Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-1e8414dc4e8so30685ad.1 for ; Fri, 19 Apr 2024 17:18:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1713572302; x=1714177102; darn=kvack.org; h=mime-version:references:message-id:in-reply-to:subject:cc:to:from :date:from:to:cc:subject:date:message-id:reply-to; bh=5ikbl2Ly3fo9Zj3RwahsewHtxBq8zhBJhmAQdizY/PY=; b=w6N/FBDUDBlK27T2dsYs9GaBrV/Rc/vJx20cLO5uDNM2kbzdHNQKT6CAPZbEWC8CUm rd74sx5JmCIpPopIttrFG+tEFdF5kC897KJ59qvKRsk5ZgftzZrSUsuOdZ4U/BLBMQf+ RdbeRm2oDoExtS+q9bHw7ECgpwEZgBpjHgnHBMbuHyLV+kcMgvkVccXvxRcE+oP5nq/z pZY/0k6a7U6ytMpNcJ1dHPHDua/Vwjq69xDT9vdcQxQ1lgTS0g1FIlmgqjb/uTSfE7BF oKv1pMPFjhD2mfvYjHyO9rEGPwDpdAOUBYhmhVtkeAz2a8EOv2wot795aCiqKLX0v7+0 ZOfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713572302; x=1714177102; h=mime-version:references:message-id:in-reply-to:subject:cc:to:from :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=5ikbl2Ly3fo9Zj3RwahsewHtxBq8zhBJhmAQdizY/PY=; b=ujfi37eZMhNLlc8mGlSclUJSXHI3Jh5MpBRFHrMzfoefxBm26xUIjdN4UQpQnf/VbN 30Sp/IT/P8LSaFZiNQ2zyNvzl7+g+Y9frQuNFxvyhFVkxLXUzYdItyFUakX/vAU8/62h O77XBE9kORFRHvMg4ktVmwxBAoAScbIh2r+ybonXINNBefA3oCxt0TM/0LgOBYVyFndT Z027wqOiRPlu/yH0S/Wpxbaw1b9sfJKLXcGHgyDUzxNwxjAOeqdDMqDMvumNiurrbjxw 9L33H1hXCf1rtoRh7Eq5oRXjR0uXqLtO0mmyYvw7lXYlPBvn9/lYtyc9gOohX9i+RJS8 QT8w== X-Gm-Message-State: AOJu0Yy9myzmJNG+xKtfIhUz3ASBqY9E1U50B8GLPiZmV3zTuH7U/Sak qbfbvDltofkxpcOgc30BkwzDUUJiqHtRHPfaFlLjA3/x9x/JVenir1HpTsCmKg== X-Google-Smtp-Source: AGHT+IHf5XjAvQoLHaG46v0y3LMf7DvcMz7JEFAGu+4N2BrQj4crccmIs4asCfg4ObgdDpQURWmzqw== X-Received: by 2002:a17:902:c405:b0:1e8:58ec:c139 with SMTP id k5-20020a170902c40500b001e858ecc139mr47591plk.3.1713572301417; Fri, 19 Apr 2024 17:18:21 -0700 (PDT) Received: from [2620:0:1008:15:1ed1:e8c8:9e4a:e624] ([2620:0:1008:15:1ed1:e8c8:9e4a:e624]) by smtp.gmail.com with ESMTPSA id b186-20020a62cfc3000000b006ecf56cb55fsm4071548pfg.96.2024.04.19.17.18.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Apr 2024 17:18:20 -0700 (PDT) Date: Fri, 19 Apr 2024 17:18:18 -0700 (PDT) From: David Rientjes To: Jianfeng Wang cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, vbabka@suse.cz, cl@linux.com, akpm@linux-foundation.org, penberg@kernel.org Subject: Re: [PATCH v3 1/2] slub: introduce count_partial_free_approx() In-Reply-To: <20240419175611.47413-2-jianfeng.w.wang@oracle.com> Message-ID: <3e5d2937-76ab-546b-9ce8-7e7140424278@google.com> References: <20240419175611.47413-1-jianfeng.w.wang@oracle.com> <20240419175611.47413-2-jianfeng.w.wang@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Stat-Signature: anj3kyqhtwuey3gcitx4d6o48pxdfok5 X-Rspamd-Queue-Id: 07C84140014 X-Rspamd-Server: rspam10 X-Rspam-User: X-HE-Tag: 1713572302-426505 X-HE-Meta: U2FsdGVkX18u+YcIa/kF75Kh66sUBZWvVBSC4IK4cjNUBJgVjTDEGNomgRAeQArF2AbqpM+hyAc82KmJmgRTglbxYhiaAEYG+3VLApF1m6ZbsoJOd8bHG+om9ID/EEF27KT5uFDKRpPvaaEK9T+Vnp+9VY296Dn+XvRMjxjWR/BcYOaXW6zwdzgBC1c5LgAr+Rh1OPkdUH9OSXVwtQTU+Gb9FLFvy8GsZK8oAPzUSYD9yI2aF8YfdRSpt76wu9pwyXw3grrwOvtDYC6ZK3gzESkYCVmAMJwSDC7mi9rkz/7HTXAC0+2jW4Hf4T+jde33Xu2b4sCs2nVDG94Dtw4NgBpsR1oM5sVKcI89GFoBEF++13dHvyPkE9LTTZx6zX1NrUwDDJh0k0Su6bFAyjkJfZnOlmGlGMV1bFbr5QKf0Lx2UZOO+n8fNFVtx8nLrXIPGowyKKSz0y4sNliTlgGfCdRycLQC4zbxwX9uUPqsz82v5NkotRgHZdN7CbY8+P3egE6Vo3bNKFkFU1DfOaJhBbs8hklJsfPN9L9/Sj/Pfovlwoz/JDZFmgeiKbBZUihftuaCtxPeIunKu0zZ0e0edp2ELZQsNRsp12HNEoDsEGGqdL53DU7vgpyP4o1620I9aIdwmjlSQYC85zZgY5JjUG0+oXoI0icshkbf7eMeVoazvkv/wP7nV8pShrXH8NfoVhlTzeF60nkXmMF0+sY5RQB6Oh6KZ9rc/Vsr1imyYnoUj6QJSUdZhBGYd1RuaIKCfvL/Duud0vhjOK3ZPDVSZcANhA2XR/oqg/UAUM1WemY4SzVahiPYDOq1VqgLfj+2wMPKcX9rjjMLZ+tO0U2xr71pdEGSER38MLPwIBaumxgHi0Ojdr5ab5uEZon/Mkl7bLcRuSzqCsvEXqqVsdPNLdcaswI5s0QhCaXml3ubh7qYlCpIxhQxm/qo9ycZS3wLyfMtluEmWc+zLzm56Bn f9/7To95 n5XJSkgOzKIuWECvvPSOkA8uN5+5N3R7byENaJyvL53fm7MY/Xv70Nfo+pHHZ9ul3XRrlHLhw8ANrnayZnUpCwtdOhAA4fBwDNjFl/Ftxk+LtdStQyC7k8HXc1N1IJcVEvlldQUeuUv0QazSzKfIjiu6bm0IoxEJvBb4G2anapFW0N6AFILEiXOdhqM00KKdmHI1cZioab4GB6jt7AnOcSG47sIyHXo71SFrGBJAOWpQpJQVn8z2I4ZsNCePnIxMO0riB4Sd4idXcFAHIa6aOxUNouUEUJxDzGwujNdbZ8xHzeEbmPXRjNo/9Iw/XGIu/cxUvvfRyDCKDVi9FtNwd7SEElcUO4wwmz20/ipzmufGvsOl/qXouHY9nynmiH4G9DrcF1a7gg0pt71y6kt9+egBGLryfr2V7zeFbv2bHclxtqhCsYo5rADPwOw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000509, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Fri, 19 Apr 2024, Jianfeng Wang wrote: > diff --git a/mm/slub.c b/mm/slub.c > index 1bb2a93cf7b6..993cbbdd2b6c 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -3213,6 +3213,43 @@ static inline bool free_debug_processing(struct kmem_cache *s, > #endif /* CONFIG_SLUB_DEBUG */ > > #if defined(CONFIG_SLUB_DEBUG) || defined(SLAB_SUPPORTS_SYSFS) > +#define MAX_PARTIAL_TO_SCAN 10000 > + > +static unsigned long count_partial_free_approx(struct kmem_cache_node *n) > +{ > + unsigned long flags; > + unsigned long x = 0; > + struct slab *slab; > + > + spin_lock_irqsave(&n->list_lock, flags); > + if (n->nr_partial <= MAX_PARTIAL_TO_SCAN) { > + list_for_each_entry(slab, &n->partial, slab_list) > + x += slab->objects - slab->inuse; > + } else { > + /* > + * For a long list, approximate the total count of objects in > + * it to meet the limit on the number of slabs to scan. > + * Scan from both the list's head and tail for better accuracy. > + */ > + unsigned long scanned = 0; > + > + list_for_each_entry(slab, &n->partial, slab_list) { > + x += slab->objects - slab->inuse; > + if (++scanned == MAX_PARTIAL_TO_SCAN / 2) > + break; > + } > + list_for_each_entry_reverse(slab, &n->partial, slab_list) { > + x += slab->objects - slab->inuse; > + if (++scanned == MAX_PARTIAL_TO_SCAN) > + break; > + } > + x = mult_frac(x, n->nr_partial, scanned); > + x = min(x, node_nr_objs(n)); > + } > + spin_unlock_irqrestore(&n->list_lock, flags); > + return x; > +} Creative :) The default value of MAX_PARTIAL_TO_SCAN seems to work well in practice while being large enough to bias for actual values? I can't think of a better way to avoid the disruption that very long partial lists cause. If the actual value is needed, it will need to be read from the sysfs file for that slab cache. It does beg the question of whether we want to extend slabinfo to indicate that some fields are approximations, however. Adding a suffix such as " : approx" to a slab cache line may be helpful if the disparity in the estimates would actually make a difference in practice. I have a hard time believing that this approximation will not be "close enough" for all practical purposes, given that the value could very well substantially change the instant after the iteration is done anyway. So for that reason, this sounds good to me! Acked-by: David Rientjes > + > static unsigned long count_partial(struct kmem_cache_node *n, > int (*get_count)(struct slab *)) > { > @@ -7089,7 +7126,7 @@ void get_slabinfo(struct kmem_cache *s, struct slabinfo *sinfo) > for_each_kmem_cache_node(s, node, n) { > nr_slabs += node_nr_slabs(n); > nr_objs += node_nr_objs(n); > - nr_free += count_partial(n, count_free); > + nr_free += count_partial_free_approx(n); > } > > sinfo->active_objs = nr_objs - nr_free;