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 AAFA7C71135 for ; Fri, 13 Jun 2025 06:34:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 378276B007B; Fri, 13 Jun 2025 02:34:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 322326B0089; Fri, 13 Jun 2025 02:34:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 19C556B008A; Fri, 13 Jun 2025 02:34:14 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id E5D646B007B for ; Fri, 13 Jun 2025 02:34:13 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 3DE01C1223 for ; Fri, 13 Jun 2025 06:34:13 +0000 (UTC) X-FDA: 83549412786.11.2A32FAF Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by imf14.hostedemail.com (Postfix) with ESMTP id E5651100004 for ; Fri, 13 Jun 2025 06:34:09 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2025-04-25 header.b=YTa0GRX9; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=Riwcnct5; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf14.hostedemail.com: domain of harry.yoo@oracle.com designates 205.220.177.32 as permitted sender) smtp.mailfrom=harry.yoo@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1749796450; 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: references:dkim-signature; bh=m9cE6u7IluHUus5n62ljfu1sdbgwOUPmNs1ZP1C5WW0=; b=qi9DWzqbZRGp3xXeGREBmdv5YtjGegp7TaIaur6vmCFFltlDQLDpsv2auVqqVqq/p0odek Sl/cGZUM/ewO0H2b2Aw09fkIBf+xnGGdv9Cy3XEISP874NMtHXHWiMinjIYq3IfLe9Zu/r ScCi112i2oaMrqQOpH9xv0gIIiNcvNY= ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1749796450; a=rsa-sha256; cv=pass; b=DMpFo+AgxvYUAaDgDkNxWHjlKpxX8oLAqpyqy+8HGT0uoNwdDpbbjtx8xvMQI3ay3IvaxF AMSWJR79JUZoFHvfHuluug5CLF1Lw4WizkXqlvoTo90B6wBrhKsIDUdeODn+829bGHtZVB 8XyERMr99UUZLedTb35VP4vyMUs1xsM= ARC-Authentication-Results: i=2; imf14.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2025-04-25 header.b=YTa0GRX9; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=Riwcnct5; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf14.hostedemail.com: domain of harry.yoo@oracle.com designates 205.220.177.32 as permitted sender) smtp.mailfrom=harry.yoo@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55CMBjR9020482; Fri, 13 Jun 2025 06:34:02 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to; s=corp-2025-04-25; bh=m9cE6u7IluHUus5n 62ljfu1sdbgwOUPmNs1ZP1C5WW0=; b=YTa0GRX9Rii3ODO3Qya6JLdUM7G15A/e 88jKGgLpAO0xqclUwXQNr1mJCtcoZsRx07/kt7QRWIDflpj+EyzjwCmm1fm302n1 6whNwgXAtcynQdhaHbPMjkMlZn3hPXyfQD7/cK+YvyaQT8tA64Hs7mZ1MaMf7i+L UOH3TmBZrCxllJoquVMETC6ARim3Y0pHqYiPjSHjAk6aKeX+ZoQ9lsGR+0+qzIDx UHYGgl/TTOFNQkMNe1b8w91OAcxP6/FsqW3Nf7aUALgyE8waGdfi+57He0KrmVTT rM7KWfEwRpnSgCNQ83ONu+/MaOuIliJNRuKa/JO5jGHwdjEyLzDDxw== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 474bufaxyp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 13 Jun 2025 06:34:02 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 55D5R34I013181; Fri, 13 Jun 2025 06:34:01 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11on2064.outbound.protection.outlook.com [40.107.220.64]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 474bvc9skq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 13 Jun 2025 06:34:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vWy8sHaU42UKs6j0n4e/DbiWixrR2Y8K1ytE7D/S69xZ9wh2QMfqFcD4shV2krffVNXZn83k1w5WpywPpnVZZo9xqpS+1qxRWG+8bT5WVgPRSvAnrjiq6SJm1XbWaQYqv0C0W7pENXfyNWRvKxEHpPm7EzR/FZTRKDXeisRHkLgG7GI8d9cUFB6t2KOQvy5FkfBNP5RFD0/w7SuEqldBVWhuITUtzu9SXnEeM126zMpaVYqgHSovIYoSjs/vbNAxnhRGDlFyk/sa42rl7ExeWzuhEfl6eGnLuCXFjc/9mVZXqkiHBnuaj0lgATWLJoK5RQ7amoxluFKxZRLWZt2Wcw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=m9cE6u7IluHUus5n62ljfu1sdbgwOUPmNs1ZP1C5WW0=; b=NF7yeS/bMbQ1x/9nPlblWskoC1pdl+VDa/XWEVsYCsJB8fC5PH+HsMOTNLDkFvYQz5xr1MwoJ0CfQejafH042qSB8DTjKI4sHQyMgj+UC6Fqblya8luNLGmGvTzO85us0mUuuLOBR4z6xuhuUv+BSw0ecD6vH+seFXZRgcE8asfH+ZYE5mL2FY+rFvOdVlI/wITGgtmj37GhD62qUD83GfoUF1d+OZlQ8vVzPEYk7QtVOM4nbzvroCYfwlMTBd4VuR4tNC6kY8linm4/lO0wKp1to8CX5NOAcj4rBqKL+31Ze3r8URxPyPqFLRR/Rf9yrqI+54VD273Dgo49xiNbtg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=m9cE6u7IluHUus5n62ljfu1sdbgwOUPmNs1ZP1C5WW0=; b=Riwcnct5oIXr0HW5n+dy4YUuTZhhrkm310g3aeqLPgTHH+LEOoOOjzqao0etxo89Yhvy/NiCa/5fSBoxEubuKml9pvhUAFq9ix5vp5bbnvS2/50lw4aPWDs3IxhbT+WtSlO0qMVmnbV3Gg9dPy9G35vtgi41uuTs2BQU1aeMyMQ= Received: from CH3PR10MB7329.namprd10.prod.outlook.com (2603:10b6:610:12c::16) by CY8PR10MB6708.namprd10.prod.outlook.com (2603:10b6:930:94::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.19; Fri, 13 Jun 2025 06:33:53 +0000 Received: from CH3PR10MB7329.namprd10.prod.outlook.com ([fe80::f238:6143:104c:da23]) by CH3PR10MB7329.namprd10.prod.outlook.com ([fe80::f238:6143:104c:da23%4]) with mapi id 15.20.8813.022; Fri, 13 Jun 2025 06:33:53 +0000 From: Harry Yoo To: Vlastimil Babka , David Rientjes , Christoph Lameter , Andrew Morton Cc: Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Suren Baghdasaryan , Kent Overstreet , Andrey Ryabinin , Alexander Potapenko , Andrey Konovalov , Dmitry Vyukov , Vincenzo Frascino , linux-mm@kvack.org, Harry Yoo Subject: [RFC PATCH] mm/slab: save memory by allocating slabobj_ext array from leftover Date: Fri, 13 Jun 2025 15:33:36 +0900 Message-ID: <20250613063336.5833-1-harry.yoo@oracle.com> X-Mailer: git-send-email 2.43.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: SEWP216CA0103.KORP216.PROD.OUTLOOK.COM (2603:1096:101:2bb::15) To CH3PR10MB7329.namprd10.prod.outlook.com (2603:10b6:610:12c::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PR10MB7329:EE_|CY8PR10MB6708:EE_ X-MS-Office365-Filtering-Correlation-Id: 5014db02-db23-4f2e-7fb5-08ddaa444398 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?+M2Ytt6oULNLbPNnIEDw38PcUG2KTJSboG3NFT1HwVUUj7gtBLopTo911do4?= =?us-ascii?Q?WbTdw4VF+er3o/dYOT4zpE6pa6ARUgzm3M/RPkrowqZ8PIoC8nInfaWbMN+3?= =?us-ascii?Q?3jTjgp/0bCvm4f6+B2TXBsavnJgWdMwVn8XjNff8segtaucqjxOOGoZW1z5n?= =?us-ascii?Q?KLgPC4yg6mx6fcwJaxPr03S5mjoqLnzyo6ejUdgM7hx59HyEqHe4dvouXcCk?= =?us-ascii?Q?4n2BYw67PL7X8RXLX8IyIm9JII9mWhZjI3f4Maknio7fOjO+AJkvFsq8yYfC?= =?us-ascii?Q?z/ROD8r3UimxsZH0Wa33i/PIcsYcPUtlQWK5YtFbncL89WXLa/kSZCbJ9cBW?= =?us-ascii?Q?g8kqYZFSKXMSGj4PWHtfEJiXaMc5hK1z4KIbGzqV8LTw+mgcMZ5FZHdItl6Z?= =?us-ascii?Q?Ai5EI3APjASXIGTT0y6g50izdCONnC/nifMcyoZ8U+v5/BX09+X4dq3ablRe?= =?us-ascii?Q?1U8Ht2Kp/VfiYPdQDK5D5l1yCNqxJqA3TIiuxhDS6jo4ELPHIR2683/rtUFb?= =?us-ascii?Q?yy3cZJqGwy+lgWcXt7LgFMs+QI58U9UkF9Ot0NQtMei/+B3fZkJP9bxGFQik?= =?us-ascii?Q?/FbAqawr+r6scak6l+c7cMjSRoaWHUaLZXjWF/V96tBRFNtrwWVGuXv4IrBU?= =?us-ascii?Q?3vfHbMdgXVMJhPNuqlgrTlqhLt5rtW8bbYmh5ezewg4UdiA/sLf2XbWeNunr?= =?us-ascii?Q?y99x6FlHrCyOTq2PQLl1Uo3WFNJn/7kfm1DuQpjP77sps2e7yqeBixH1zVyf?= =?us-ascii?Q?z2KRqw003pdBZ+FauGdj8duSM1RkI9WRPK4Rd2/vu8odF4YqdG1J5FB8gOIq?= =?us-ascii?Q?UbjOcrd8KRodIpAc4/xnXtcr7PjfcouGgaejYrm6U3LQVq9cIxWbDpkwLxGa?= =?us-ascii?Q?kg5hkAb+D4ixE3lksSS3dMHknvpbyiOQAWvwUue8jU5CCIYMcT6mVjbjguat?= =?us-ascii?Q?JUc6+n+6fqPHHVJMYHveAD0gBPlTWXKwKcsQ4xInCYplMBHUF7MM4F/A0B1k?= =?us-ascii?Q?KHY/5tEXtPNZBaimgWUtDA0qhTIeELjmi/MscKT/cD7KIxp5w8bzNkruzDqC?= =?us-ascii?Q?4+ucPC5ytvVkfq9aICVZBnlnxCEmRWouPSF8eMdnw6hG6VnsiYK1Se/NdheL?= =?us-ascii?Q?IuYGZGFs05rHZ32McexgHvCyP8N1aThkcdMvw3wwlY6F0BJ8JGFHYWxaFF72?= =?us-ascii?Q?jNiMgq775nUEIimj+YHNVFiSbAOsZdWdkzK6AXWlsvL27Cx9tLUBh7FL2JX3?= =?us-ascii?Q?bofsJtXgxNouXQSCWYeiFIafVpH0qMYRbLQ0MEG1UpzVAkI6Mo5WflNxBC/f?= =?us-ascii?Q?iyRGESOQ/Ycp08k44oiX4OiuiNzQohIGLQt6rwQvC02jtMcKvQXToUumrGiO?= =?us-ascii?Q?DdpyyO6qvtCcZhyM0RBwsuo8JeuP4jfwJVBNaX/Lcg3xOEi7pm/ypS6efzYJ?= =?us-ascii?Q?WyfQcqdS4Wg=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH3PR10MB7329.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(7416014)(376014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?mLyVgQmj26A1sNsbFIYO3XKL366pnB3wx+pv7uv8/t3BJlDxUYoITB8WYmuo?= =?us-ascii?Q?bojQcZzyKIECb0Uo8wP8+U8FuUwDd6bq4JI+KyFtmmkazWjMKdc6yUhfmLog?= =?us-ascii?Q?GZz+88kFZoJ5CCUTy89Kk1nt7vEhGUtmJZ+hiX75eDsDNG78P13zgOrW4j4p?= =?us-ascii?Q?rgZFsV9NGfT+Xl+OrdQ3uXfHVzd53lcwGprXU45auFvf54e709aaqhuGDzsh?= =?us-ascii?Q?HiubMOkq4cMc1h+DenPIuJ6MnHnicj7T8Tfzap4Y+cJoJ1Sq66q9UcULBnBq?= =?us-ascii?Q?Kg77CVfmal88QVrdYtCN6a5OymyR5WeomjSFnIfoRwVBoo7hF5WtTr5QTuRH?= =?us-ascii?Q?wIzjAibmYUcSkU/q3o788E0E3Weyvn5sUHWG5x7YGPBI1tXZeSvE8Gd1BaSl?= =?us-ascii?Q?eVMXXoXJzD0WXfLkikZYyCkGwFW83Nfis0370FJcSYMVPBHKpK65+eOPDkqr?= =?us-ascii?Q?tLzha9lM+uQeTHUraMz3P1476wZz9qOn/Ua7iO0Fs33d/KG8zYvNUuvhUCsc?= =?us-ascii?Q?xdfu+WY5FdUP2w/FHjmDo9ib6+c13JKSXvZXuBGTo1GapQ/U40MUBrwsTdd1?= =?us-ascii?Q?1gDfOd9w31uk0b7V5pCRt5Oh8rjOccz5ccsN1HUcJKKk/z/4Pp0s5SqhhbUE?= =?us-ascii?Q?EMa4uMDzKuvShldake66ncm1nMTekITPVneyYIBaI8PZfbX/9ky3xJcqsE3J?= =?us-ascii?Q?85+AEQnYXrnjxeneti5zVKl0yMsXR7PDsdAoLSAafW567JDTLbetEBL2uSCC?= =?us-ascii?Q?E9xSDCY8fezuOrZ+dKs5iuHPBDt4ofgWT5XdwLCiD5fU44WoKQSJuDjL8JUb?= =?us-ascii?Q?uFtR+x/6G6Ic+mLwpxXPiCzAF1i5gSSQMmqCW+ySc/xBbHBgEWbOh9jRosI4?= =?us-ascii?Q?/D0SoD7kQURuNinM2sKjie0Blc2v8jB+pycz+5OF+59y6eirER6L6lVIBlw+?= =?us-ascii?Q?P5+lpNAJvI0aORBFjQMZ78U7sj8S1GDC4DILWBdA/nehVOGFgYC8+9YWchcS?= =?us-ascii?Q?1z4jDJsuE4Gl1CccxyaGLlNsh1a6iqkE48vgHWa/F2HquV4yOlznj+LemGHf?= =?us-ascii?Q?XJty0oOTTyGPnx3IfIB/eRg8UODYAj0e30/A+SiYL/6394eNStr8CiwFKzL/?= =?us-ascii?Q?SdtFpm0fV7OZAdcJ867B5Bdm8uRgvUsYVPOMN3bCBdrafCFNGI+xebemASvt?= =?us-ascii?Q?EdsaZncj485lRvRqegq9s0PYKkNfNvIdMukWy+49uag7f0RmVxb7pHOBJe5H?= =?us-ascii?Q?LMvRa0seogGmeCTb9YAKPGWlL6ad76g7PgBEtJYqS3opay3FAawmJM51e+dk?= =?us-ascii?Q?eKKszyhzlGmwbuF6fhVSrFH4HbM3RDoJErKPedew2A3gozmgdBD/44+7/iYd?= =?us-ascii?Q?L6LPHnRisVeHsfnYAxQS8k+DS0L4B1pLk64essTgc3vXSM6rud+LTmTDGqcj?= =?us-ascii?Q?gmssDdCQmp1iCbPTnyH/m6szba5b4qeZ8m0px+hzJ1R8P2bsDPQzQsEx31hW?= =?us-ascii?Q?MaIC5up/FfceZG+OGSUJSI/xfmMyQ1WSL44SL6FY69ojoRQtIYi5ymHGrvgm?= =?us-ascii?Q?4XkXUbOpIBaFh40fFc9Ma3r6FX+d1AxCyvfxqz1T?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: CSrcP7jNz1ZHKkeFW5jY1TYkLlvgsJvtMlUtVYS2a6yCwkM+72WMkuD1w0wT29uwM+vvqeTXgL2kym6zfxQvUUYg9/G+sLwR7AS7M2S45nDp5xd6//bxNsBmikRc4SCFZ6ZhUxCkGZuBL1eKBbufpdA+FeOC6SGe/OD7UCogp9Mcl2GMODtXuACqL8r2YyiaGrGaoXyDh/wCA983rfQcG5LIiAYmhxQnrT5J4Gzl6hvJXGgd+/4+U5Cm/pRUcNLe4Zxl/MRbNpN9qbtEOtEU1s90+EbUIfaQNCYMc8udlRjA9x17URuZWdC4SFT9aEalRsosDfdouHkhKW4whCrI3j9D3VlIwxuAZl5d7OubY98QXQZYBh32WM1x9Xasts5TNN9GdRK2+s/pX5UzWaWDpQGqqgxXN1AvY7kmF7xiSqgz7D08b7KIcuih9E9iU7ovMIjJbKX8g2riXGy9+p/gGSbn8yT1Lg5FikB0AKGAXpM92BzA9McDt/S6p829zQQjeSIR2tPu8AB9o/UIEGUMEiySltbvlAczqzjItriIKH+worSEOXHEKODzIS3LzffOh7OP6jML+GcyPgqBTEjUSc3SW9Ivd8J2/RX2sqq9xfg= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5014db02-db23-4f2e-7fb5-08ddaa444398 X-MS-Exchange-CrossTenant-AuthSource: CH3PR10MB7329.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2025 06:33:52.7876 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5wzKtLczdJMQDa7KrJy3OIVvpEkFyx7R7zU+NyEZ5xq4e+cL6OkcKMe+NZxryspBp4zKaow61Aid7m5ovlnsDw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR10MB6708 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-06-12_10,2025-06-12_02,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 phishscore=0 malwarescore=0 suspectscore=0 spamscore=0 mlxscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2506130047 X-Authority-Analysis: v=2.4 cv=RZGQC0tv c=1 sm=1 tr=0 ts=684bc65a cx=c_pps a=XiAAW1AwiKB2Y8Wsi+sD2Q==:117 a=XiAAW1AwiKB2Y8Wsi+sD2Q==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=6IFa9wvqVegA:10 a=GoEa3M9JfhUA:10 a=yPCof4ZbAAAA:8 a=SK6pnYB80MAnBxLOfSkA:9 X-Proofpoint-GUID: 80PavCrWyX1yLNzaLJSGQIn5wa6yHT0z X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjEzMDA0NyBTYWx0ZWRfX49KZ2qJ2nQt+ jkSqIPJJhhE9Dtxu/DKVb5HJP9Erjbsli29UCY4CFPf4byCCmPztF22kIZb2xt+C87pwAwN3BCu CkoO+lOCfrpurkeeNRxxSneRL6qurVM2W9tjHAgY7HmUUIEsoCEe+oC7Ass3GSIFAAVjfzwxwec lTvHetd72oeYU8C955nSrTRwrVL8VNZJRZ6JPY2cM1D/QwsOZWw5tUp9wug30H3lMqfKi7RNImS lYSkoE9ymkd17ebi9LRcrbIn6Pw78YmtW60H0zXwsLSBM2ZfSoCrZbCdhFg/Q7aJbkH9q0ZdvoB UOzMqNP5G/iotY9yWbUGmEU3INwdTzK/cm+tCtaocvKmM3zEAtpVn84wP3yrP1youX79zf5YNnv ehGf6hUD3SuHEEU2XY2U/2pmyPNXmY2i6oRcG6xbo9UP3MGjnbo29jYZS8vpfBO2L01tdZ4z X-Proofpoint-ORIG-GUID: 80PavCrWyX1yLNzaLJSGQIn5wa6yHT0z X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: E5651100004 X-Stat-Signature: heshznggetoyae3rwpkorx3opcnyj5oz X-HE-Tag: 1749796449-950231 X-HE-Meta: U2FsdGVkX1+2p0US+a2TwJVHs9BLYfv1hKeGY7JgY1BFa3ErHth6EvzGmZOdCV6Dd1Sg0oZZvudqk5vAi4VHbbMoig30v2RQN2z8dLRL+E85IubHyANnQew+RnfcGNtorajSbsQA5b1fsI6EDYRQm18wqCMqqL5BzJyRuO+G/IgT7DlSsgk+xW30s/pJNQi6O7HvZYc9LYGaUE+Zd1kS2J91yIC7J0qh/GwsvF2BH/7bAs17IY35FT0JVw+mUpa0R6H+DwqAioIYifotWtbL0PVjySkf/gMdrg2Gn57hGJUpD9M6rcK1bALIAiDQsrv8a56Q4WC71/6kdUrdH6bqPv49eRh4F2gqZbw8EqHSQcWFebqaszsisY+NPSbwcc/iL4saqIsrSUZAbvWvgFpRNZidM6999xeagP5Ltu8gG8oL0h3W+HR7tT7NvIRj+TV2aWZ6Y/maLi8a56jsawmvPAJumzc0B4UCb3zd4qyn9m95U/ACioY1/tBIg6y1+YThh970dXKvrRq2Ioom7Ve/8LIeRQA6CT4HGCD+z9bRCLgimkGNLLLr1M93axpR3PHcIhyBLmtNJlue7GgVbZeo/rItrMTqBCI/CjxtN9CYBSVi2cr9f5Byy9aasnsq1mcyyUB+43UFNfot6RW+gkY95c+PeBDVkisTcjGyI2fjCsqG84VlgK8zcXkRxPrgzS19wW0hHwsgjoZMFxkARL+KEawDRBlKeZc4tpLJQzjri1DEyNpn+U40QHq+HidNKFLrUIWeZ5FR1KfYBH1Jo+Izzhow4/NhLD/DRBiWzVyD7rLkr+Xn+CPEOrerXvPyEprvyGWZjiKB0Q2qX4ecQ9ILzkPjumda2/0lnuB6LZpEXj5TDu8H/3o9kG9vYceuHiZPUPhDeQFFzb479i9hhHoDGe5XBIP/dvcDrlfGLT6ohwtFCVro2rZyXLcUZOBPqpQzA1zs+MnKwaJ2yNkd+HV TTcxL8ze TXXYw4fgibbsk2NPoNCha/gAdg8qo9TiMXavXhibp4923QEzKbGVB1+N27e8V2avSLHydjp3QS4blcpw+RujzBEi1WmYN2FgtEkbAdOWXVejAPpesQS5naEfSpAkd7B2uGAGRzoM2qCQkWIifsRCaIAGRgqTC5xFeO6/PnflW2Aj2Qt15UeLfpQhJ6KI159ywfqLd+eeblqTzsPyKni1zOQh0kJDz456Y6Q2K626Mq0JSsgvWBtAo5pVwbIF0+C5id6efNp5wAF4CPxbssGC0hIJxjZ0dB/X1NZhUEfe52MXxB0TEyMRK3yjjPEzgZ5spILCShQbzlHW4yXh0cIShSVxTK5fWa5rMKKgzU0ieOgl3iBJr5JFcLRBtrXXcjTASeE1gHFwsFJJylglSVjrA1TfL9/OakMKjh+ZEky7wvRuWa0vUGGhVZmRgjpnX89QUhrT0Q4W1G/UkC+m5aDK2U8d5YHAzO7DyCeghevSzjvkpHP4KRfm9xqDHx9cEBCksGiKkXNVWITM1O4a8PabDo0Lj9D2Z/Gs2Yu+J5usoY/GNTxDpMG8FKvRZOmpOSafoucVo2qnh6zifXRfE6P85qiCI/ort+SP9RvpgzD3ydzOdwJOdrfvYY+vHkzuD3zgGlVQjqE0u1lUorkdJ+sLPTAePkTB5EzfWdjLDfdmlvyGQNGHZ8WjUPpms2No9KFLP9VO4q60I1OrpsKZPA8N7fRPriBWbAW0xWJy1YkI2ML1ePLnn8mlOfCIGyuXIn7qqlzazr30BZWD1J+8= 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: List-Subscribe: List-Unsubscribe: The leftover space in a slab is always smaller than s->size, and kmem caches for large objects that are not power-of-two sizes tend to have a greater amount of leftover space per slab. In some cases, the leftover space is larger than the size of the slabobj_ext array for the slab. An excellent example of such a cache is ext4_inode_cache. On my system, the object size is 1144, with a preferred order of 3, 28 objects per slab, and 736 bytes of leftover space per slab. Since the size of the slabobj_ext array is only 224 bytes (w/o mem profiling) or 448 bytes (w/ mem profiling) per slab, the entire array fits within the leftover space. Allocate slabobj_exts array from this unused space instead of using kcalloc(), when it is large enough. Enjoy the memory savings! [ MEMCG=y, MEM_ALLOC_PROFILING=y ] Before patch (run updatedb): Slab: 5815196 kB SReclaimable: 5042824 kB SUnreclaim: 772372 kB After patch (run updatedb): Slab: 5748664 kB SReclaimable: 5041608 kB SUnreclaim: 707084 kB (-63.75 MiB) [ MEMCG=y, MEM_ALLOC_PROFILING=n ] Before patch (run updatedb): Slab: 5637764 kB SReclaimable: 5042428 kB SUnreclaim: 595284 kB After patch (run updatedb): Slab: 5598992 kB SReclaimable: 5042248 kB SUnreclaim: 560396 kB (-34.07 MiB) This saves from hundreds of KiBs up to several tens of MiBs of memory on my machine, depending on the config and slab memory usage. Enjoy the memory savings! Signed-off-by: Harry Yoo --- KASAN folks: Should we also poison the array before freeing the slab? If so, which API would be appropriate to use? mm/slub.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 87 insertions(+), 8 deletions(-) diff --git a/mm/slub.c b/mm/slub.c index cf3637324243..20f0f76f0c65 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -785,6 +785,49 @@ static inline unsigned int get_orig_size(struct kmem_cache *s, void *object) return *(unsigned int *)p; } +#ifdef CONFIG_SLAB_OBJ_EXT +static inline unsigned int obj_exts_size(struct slab *slab) +{ + return sizeof(struct slabobj_ext) * slab->objects; +} + +static unsigned long obj_exts_offset(struct kmem_cache *s, + struct slab *slab) +{ + unsigned long objext_offset; + + objext_offset = s->red_left_pad + s->size * slab->objects; + objext_offset = ALIGN(objext_offset, sizeof(struct slabobj_ext)); + return objext_offset; +} + +static bool can_alloc_obj_exts_from_leftover(struct kmem_cache *s, + struct slab *slab) +{ + unsigned long objext_offset = obj_exts_offset(s, slab); + unsigned long objext_size = obj_exts_size(slab); + + return objext_offset + objext_size <= slab_size(slab); +} +#else +static inline unsigned int obj_exts_size(struct slab *slab) +{ + return 0; +} + +static unsigned long obj_exts_offset(struct kmem_cache *s, + struct slab *slab) +{ + return 0; +} + +static inline bool can_alloc_obj_exts_from_leftover(struct kmem_cache *s, + struct slab *slab) +{ + return false; +} +#endif + #ifdef CONFIG_SLUB_DEBUG static unsigned long object_map[BITS_TO_LONGS(MAX_OBJS_PER_PAGE)]; static DEFINE_SPINLOCK(object_map_lock); @@ -1307,7 +1350,15 @@ slab_pad_check(struct kmem_cache *s, struct slab *slab) start = slab_address(slab); length = slab_size(slab); end = start + length; - remainder = length % s->size; + + if (can_alloc_obj_exts_from_leftover(s, slab)) { + remainder = length; + remainder -= obj_exts_offset(s, slab); + remainder -= obj_exts_size(slab); + } else { + remainder = length % s->size; + } + if (!remainder) return; @@ -2049,6 +2100,21 @@ static noinline void free_slab_obj_exts(struct slab *slab) slab->obj_exts = 0; } +static void try_to_alloc_obj_exts_from_leftover(struct kmem_cache *s, + struct slab *slab) +{ + if (can_alloc_obj_exts_from_leftover(s, slab)) { + void *addr = slab_address(slab) + obj_exts_offset(s, slab); + + slab->obj_exts = (unsigned long)addr; + kasan_unpoison_range(addr, obj_exts_size(slab)); + memset(addr, 0, obj_exts_size(slab)); +#ifdef CONFIG_MEMCG + slab->obj_exts |= MEMCG_DATA_OBJEXTS; +#endif + } +} + static inline bool need_slab_obj_ext(void) { if (mem_alloc_profiling_enabled()) @@ -2077,6 +2143,11 @@ static inline void free_slab_obj_exts(struct slab *slab) { } +static inline void try_to_alloc_obj_exts_from_leftover(struct kmem_cache *s, + struct slab *slab) +{ +} + static inline bool need_slab_obj_ext(void) { return false; @@ -2592,7 +2663,9 @@ static inline bool shuffle_freelist(struct kmem_cache *s, struct slab *slab) static __always_inline void account_slab(struct slab *slab, int order, struct kmem_cache *s, gfp_t gfp) { - if (memcg_kmem_online() && (s->flags & SLAB_ACCOUNT)) + if (memcg_kmem_online() && + (s->flags & SLAB_ACCOUNT) && + !slab_obj_exts(slab)) alloc_slab_obj_exts(slab, s, gfp, true); mod_node_page_state(slab_pgdat(slab), cache_vmstat_idx(s), @@ -2602,11 +2675,16 @@ static __always_inline void account_slab(struct slab *slab, int order, static __always_inline void unaccount_slab(struct slab *slab, int order, struct kmem_cache *s) { - if (memcg_kmem_online() || need_slab_obj_ext()) - free_slab_obj_exts(slab); - mod_node_page_state(slab_pgdat(slab), cache_vmstat_idx(s), -(PAGE_SIZE << order)); + + if (can_alloc_obj_exts_from_leftover(s, slab)) { + slab->obj_exts = 0; + return; + } + + if (memcg_kmem_online() || need_slab_obj_ext()) + free_slab_obj_exts(slab); } static struct slab *allocate_slab(struct kmem_cache *s, gfp_t flags, int node) @@ -2647,9 +2725,6 @@ static struct slab *allocate_slab(struct kmem_cache *s, gfp_t flags, int node) slab->objects = oo_objects(oo); slab->inuse = 0; slab->frozen = 0; - init_slab_obj_exts(slab); - - account_slab(slab, oo_order(oo), s, flags); slab->slab_cache = s; @@ -2658,6 +2733,10 @@ static struct slab *allocate_slab(struct kmem_cache *s, gfp_t flags, int node) start = slab_address(slab); setup_slab_debug(s, slab, start); + init_slab_obj_exts(slab); + /* Initialize the slabobj_ext array after poisoning the slab */ + try_to_alloc_obj_exts_from_leftover(s, slab); + account_slab(slab, oo_order(oo), s, flags); shuffle = shuffle_freelist(s, slab); -- 2.43.0