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 EA129C77B73 for ; Wed, 24 May 2023 10:24:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 43BF46B0074; Wed, 24 May 2023 06:24:02 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3EBBF6B0075; Wed, 24 May 2023 06:24:02 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2DA37900002; Wed, 24 May 2023 06:24:02 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 1A4F86B0074 for ; Wed, 24 May 2023 06:24:02 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id C6D57C0905 for ; Wed, 24 May 2023 10:24:01 +0000 (UTC) X-FDA: 80824763082.24.2F78304 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by imf26.hostedemail.com (Postfix) with ESMTP id 4301514001D for ; Wed, 24 May 2023 10:23:58 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=suse.com header.s=susede1 header.b=OnzsDya3; dmarc=pass (policy=quarantine) header.from=suse.com; spf=pass (imf26.hostedemail.com: domain of dsterba@suse.cz designates 195.135.220.28 as permitted sender) smtp.mailfrom=dsterba@suse.cz ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1684923839; 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-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=hliaaV35ugS9mBcv4FyggOLg0wQ/iiY9Q3rhXXLm7AY=; b=34iGXICRimwqN4skWdlJQHjKCouoSkzWtKpTkPWtgX54L66VdAyTVoqwRo08E9RmtqaUxi kalKKZVFCUv6EB0CrCRF5vzWLIDy+t0UPrd1LRYkmi/BOne3rS06uTSSsm6puiMFHKeZhj e6l8tPK+mkUY1CfGrHMnWw5YWZd4VlA= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=suse.com header.s=susede1 header.b=OnzsDya3; dmarc=pass (policy=quarantine) header.from=suse.com; spf=pass (imf26.hostedemail.com: domain of dsterba@suse.cz designates 195.135.220.28 as permitted sender) smtp.mailfrom=dsterba@suse.cz ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1684923839; a=rsa-sha256; cv=none; b=0rTrjxWR9BMqrlsK97NMbbWPY6VE+jcpOjnhJSbT9OAxA2pAKZz7ihiOro84ZdKT3csfy5 VGrE4Axk8HSmKQlMWwxLCAi5Q5ssvpnLg8BDF5Y39ONoNBec0jXjSrQXRClSm45lSWmBPb VO9yxRt2GFWTQ+NJTyMtuWENSONIc7k= Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out1.suse.de (Postfix) with ESMTP id C39E2223D9; Wed, 24 May 2023 10:23:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1684923837; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=hliaaV35ugS9mBcv4FyggOLg0wQ/iiY9Q3rhXXLm7AY=; b=OnzsDya3ECMF2LW6Tu/DQER+kYAv7897Jlj7xXn2quQ6zFhHc52EY2t73zWroFdhxnRlS8 T0FQQgynmCyjp6WmPTUgows5xs+X177KlarU2SuH+TM+byVtXWtgxvH8lpKr9tMnUs4Efg /phot2QbYeGI56UFHOBRcLzZLJxv7Zs= Received: from ds.suse.cz (ds.suse.cz [10.100.12.205]) by relay2.suse.de (Postfix) with ESMTP id 1B9BA2C141; Wed, 24 May 2023 10:23:57 +0000 (UTC) Received: by ds.suse.cz (Postfix, from userid 10065) id DE97ADA7D7; Wed, 24 May 2023 12:17:50 +0200 (CEST) From: David Sterba To: Christoph Lameter , David Rientjes , Pekka Enberg , Vlastimil Babka Cc: Andrew Morton , Hyeonggon Yoo <42.hyeyoo@gmail.com>, Joonsoo Kim , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Roman Gushchin , David Sterba Subject: [PATCH] mm/slab: add new flag SLAB_NO_MERGE to avoid merging per slab Date: Wed, 24 May 2023 12:17:48 +0200 Message-Id: <20230524101748.30714-1-dsterba@suse.com> X-Mailer: git-send-email 2.40.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 4301514001D X-Stat-Signature: i67waqb6oxee4suqge5tgad4zeynq3rb X-Rspam-User: X-HE-Tag: 1684923838-798311 X-HE-Meta: U2FsdGVkX18KPrB7iQ4C4aBHg8hKS3QMqgtyAmD+EhpaGhz9gcovrocz4XNdG23flhR7ImsbnxAs3+oIVJtreBlfsuV38ZcyNlrhpZmODGyvi6Ze0GdDBG9ym/T6o8ln2IfXgy42hVwBxu/WftIPrkBLBkuGZnJn0TWm0nsJHRMmj+EqujVbmjQpEjiFS0TuiLINdOPzGpLp95i0icecdhsDUzGOSUlxqA87E8k//7lJ6lCdgyXT+T39H9o60qfGNPKBCQ8bqFQ7WPW6B9KRvcm4Gegs73wJTZevWqHLuYWU10xZKSihWWNC91ZkD8Nr6PbNugRlaJ1JEKFQV6QkBP84FLZziVPfXXGkqxxftcK2j01x0z0B6Zvr3f/686eEdSu/6BcTLIBL2z9uS3/I9zQ+lk47o8jqU0yIEIID0WDB55k12lC9DAHJ3wI8cIaY3Y4lYccRsUHxI4yRqIrsQ/aRNhF9WEjAd8YBXQD8s4tB1uWD7bL8ipwJmq7EhbmUPdkOgMNpyqWh4xN2t9johjoOWtrtwAm//s6PPVWzvYrFX17e694YYTp4hYdqHNQrtSqRa1if3rcVwe4XlAZyPla1K2+cBXLUo7AQe1elEojlG+tZWGPn95Gn98FVFV6pHep4QtumLHfTGDf7R0S818BHTgMalHXLkI5H+rfZ6BtaRo+TRUkaW7143VvXW8PqvWAbxFwUCTOuJ1umtigp4a99/loytwQsNiaH4RLEPqsSS/JnuLIjmuR8j0v5VO+YF6aDlBGvLeUaXWeTDx7hx7wCLHxhr3n/3bWUwqI7iSVZ/9najFc1lsJrDSCHdIkcff292KL5RoiDvgIlbEtq1XzEnFl2uG6MHSp2M5LRGkF92ZKSOEVG2HcnPADXAI3l0ai6oylzAkiqkojK+oNM+HUySZPTbqGSX6yRnenri4YR/1LPXC9+8+2RCAFL5jFJVX7eLW29bQ3EY5jikMb 7+n5BaE3 KB2H4sYmXcW6afgpChDCWrPpU3B2CcPXLqMmJvm/mhsGELZjJAJKsi7vQON4K0m4V9dPGMlANuwf4L2rNf2F0PvURt7RDd1uiV0RpAlQCZe0TGo4izR05Qxgj1IGXK2lOVllPnSJ61Qnn1FOqwMpkxlMawAXO7w7bohheXzTB/JUiRxUqvFoWYXMRQbPNZAnFAysCZpZyhvhkmUwkXSHd2RwAbpjz+QAzkTKvxyrGMxMgmf98lXH4BIhgBRNOXwjR2taZegQLi3Tm5DoHdbgCp5P4P4l3O8DywUfDPmwGqXoE1vCa/pF9v2Rdqt2U5+SR+hpw+Erq01VSrX9Xl20CgUC0u8C0vTBe1D7zq2mzQpo684y/BVsnh23MipXh3g1D6VbypthrGTLlSXVeaMZG10h8X3YatUZM2fOwVzSel2OANdDPbG/tqd1gAg== 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: Add a flag that allows to disable merging per slab. This can be used for more fine grained control over the caches or for debugging builds where separate slabs can verify that no objects leak. The slab_nomerge boot option is too coarse and would need to be enabled on all testing hosts. There are some other ways how to disable merging, e.g. a slab constructor but this disables poisoning besides that it adds additional overhead. Other flags are internal and may have other semantics. A concrete example what motivates the flag. During 'btrfs balance' slab top reported huge increase in caches like 1330095 1330095 100% 0.10K 34105 39 136420K Acpi-ParseExt 1734684 1734684 100% 0.14K 61953 28 247812K pid_namespace 8244036 6873075 83% 0.11K 229001 36 916004K khugepaged_mm_slot which was confusing and that it's because of slab merging was not the first idea. After rebooting with slab_nomerge all the caches were from btrfs_ namespace as expected. Signed-off-by: David Sterba --- include/linux/slab.h | 3 +++ mm/slab_common.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/linux/slab.h b/include/linux/slab.h index 6b3e155b70bf..06b94dfbce65 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h @@ -106,6 +106,9 @@ /* Avoid kmemleak tracing */ #define SLAB_NOLEAKTRACE ((slab_flags_t __force)0x00800000U) +/* Don't merge slab */ +#define SLAB_NO_MERGE ((slab_flags_t __force)0x01000000U) + /* Fault injection mark */ #ifdef CONFIG_FAILSLAB # define SLAB_FAILSLAB ((slab_flags_t __force)0x02000000U) diff --git a/mm/slab_common.c b/mm/slab_common.c index 607249785c07..0e0a617eae7d 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c @@ -47,7 +47,7 @@ static DECLARE_WORK(slab_caches_to_rcu_destroy_work, */ #define SLAB_NEVER_MERGE (SLAB_RED_ZONE | SLAB_POISON | SLAB_STORE_USER | \ SLAB_TRACE | SLAB_TYPESAFE_BY_RCU | SLAB_NOLEAKTRACE | \ - SLAB_FAILSLAB | kasan_never_merge()) + SLAB_FAILSLAB | SLAB_NO_MERGE | kasan_never_merge()) #define SLAB_MERGE_SAME (SLAB_RECLAIM_ACCOUNT | SLAB_CACHE_DMA | \ SLAB_CACHE_DMA32 | SLAB_ACCOUNT) -- 2.40.0