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 4CB13E7716C for ; Thu, 5 Dec 2024 15:24:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 730206B0101; Thu, 5 Dec 2024 10:19:23 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id DB9296B012B; Thu, 5 Dec 2024 10:19:18 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8DA116B00EF; Thu, 5 Dec 2024 10:19:12 -0500 (EST) 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 BCE836B0083 for ; Thu, 31 Oct 2024 17:12:20 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 6786EA113D for ; Thu, 31 Oct 2024 21:12:20 +0000 (UTC) X-FDA: 82735145094.04.683FD38 Received: from mail-ua1-f41.google.com (mail-ua1-f41.google.com [209.85.222.41]) by imf11.hostedemail.com (Postfix) with ESMTP id D635840002 for ; Thu, 31 Oct 2024 21:11:44 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=none; spf=pass (imf11.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.222.41 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=kernel.org (policy=quarantine) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1730409056; 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; bh=f1Z1M9ebfF+XErr/w1JTQtKXBgDlrbNSW0zBIf4bs/8=; b=yZczxxSlCS3YB2FRP45MmLou80uHd2pFOIQSpEgrkAfNKrc7xlUg8PzxQuxelVig/XnF9D xtoVzOoprJOVfnpcAOjhMGxRJLCd9H2vW0rmEheosBwkd2hH5VYxsSx213DsAkGJLpiNEw SJcL797GOv/Q5+OWNZXnvAh4hiUG+IA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1730409056; a=rsa-sha256; cv=none; b=XwaQ6Hvcqvy/7Q8lmKGpm790hQrcs7/qbUFFpbVNMu6CUwBxXBF5lgBM1n6gcYqtcUAbsq wquJgHBjV1SpsemkWOvZbPvbdBwRV3WU8Hg/1GLzzHeNlzwPHsZDVXR2CKi5uRT0bZryBK ObmNUVdajTIQMIcA6GF6Yga55o/8zBM= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=none; spf=pass (imf11.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.222.41 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=kernel.org (policy=quarantine) Received: by mail-ua1-f41.google.com with SMTP id a1e0cc1a2514c-84fcd9f4e98so327648241.0 for ; Thu, 31 Oct 2024 14:12:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730409138; x=1731013938; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=f1Z1M9ebfF+XErr/w1JTQtKXBgDlrbNSW0zBIf4bs/8=; b=AQ6JruMqphoz3EQab/2oZuOvhRKMMuaZmqp0qLFhQaOBnLCmlu5S0sreXabiSHFCnb HTocs4PAtdOH8MEhDuvax8BTlunExwHU7b6ErWbQ6DWd//IvCSVknJwbNla6nbssPRNE LZ5LusRX9sBtzaNm8y3o4KcQvGaUdYX4+0PVBq9IOfCLQ5ojyMCIRd66OB2Sajz3tc4F Suj93FQ2midGDXxXpYe9LUuXUTR4ZR6XdyrcjHJcqc2oHllPEYrqvw/SKxXE5FrK2RXR VwmVL5bo3J3I3+KPzio/6WCz4M0lQDjfLXYworrs8F4DynmVwd66uz7LtuKV5fESf4R1 A8vw== X-Forwarded-Encrypted: i=1; AJvYcCXaDMLWgD0si1vuh4pXjSnFSx9TPNX5Ekd+heV/D6B0JEPL89ZLl2Qfp5gb8fTi8dVy0FVMPFh/6Q==@kvack.org X-Gm-Message-State: AOJu0YwbbcHndb1W0T4LwfaBZqG4TC2Kbw7MPzmexV9yEDyuhCJ87x8B PUKnkCqqmybW7bwOb3ngpYyLZcWfxT4OBDEhB0/H5CKZi+dyeMzNDvGeNQojHzz6K3drH8jiGNK IILx89Om9L2ia3TLv09oA+QcvE7I= X-Google-Smtp-Source: AGHT+IER5i1rvtj8TljmyV11M4PPglRC2MIe6CsIKyOdZ5JcFWOe7+jSeXLNTeEiHBtfLABtNCxYXVv1W2z0gw/NAGQ= X-Received: by 2002:a05:6102:290b:b0:4a3:cf4f:e19 with SMTP id ada2fe7eead31-4a962f34f2emr1287276137.24.1730409137629; Thu, 31 Oct 2024 14:12:17 -0700 (PDT) MIME-Version: 1.0 References: <20241030130308.1066299-1-mcanal@igalia.com> <20241030130308.1066299-4-mcanal@igalia.com> <2c507326-3267-431e-936a-23e2ab6a3baf@redhat.com> <899284fa-953f-48a1-af29-222d0d55881c@igalia.com> <95c48a30-0696-4110-950e-e81afb4ffc2a@igalia.com> <5745d2ca-4d87-4d1f-b38f-734c7086f462@redhat.com> In-Reply-To: From: Barry Song Date: Fri, 1 Nov 2024 10:12:06 +1300 Message-ID: Subject: Re: [PATCH v3 3/4] mm: shmem: override mTHP shmem default with a kernel parameter To: =?UTF-8?B?TWHDrXJhIENhbmFs?= Cc: David Hildenbrand , Jonathan Corbet , Andrew Morton , Hugh Dickins , Ryan Roberts , Baolin Wang , Lance Yang , linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-dev@igalia.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: D635840002 X-Stat-Signature: e7qnypgzte34nj3gzqtmechbupoedjga X-Rspamd-Pre-Result: action=add header; module=dmarc; Action set by DMARC X-Rspam-User: X-Rspam: Yes X-HE-Tag: 1730409104-41292 X-HE-Meta: U2FsdGVkX1+JIhkoYFUmukWk38totana6PoO5Z937GwQYSlP5yCusynTn6GcimBaCD5xPCrS9Ef5eNsi4F29wxaSbIj09tvJyx6QZAJp9i2mfgGGqGsr/Noagn832NENG94m9OtSHfO6THzSzY9dPz7XDshRp6BX+EhMOq4H7QRhzokhkqwGrd7HXrXcTo7W4kd59riXSOls83iy8TodcrUwIyLCrIBmAdlHfr9vp4+4RavtdijxtVNnT+E5LmTLpx3Mn5qZO/brny8mohcvGRinNTMr2O8YM0OkUuFeSVfheyWB3z6qe+WmrTGBEWRS+dj93uzM+VjRwww5x3uiuSu0WDF4jf7VYHf2jGm3qTkM7eTRv3ZPNkGSytWOHgMsxWS02UHummoAUP3n5uVnlSWEsRiMbSRFun/+kN5TsxQMcRaPd6oriWvgEX5JcONRTge8YOLLTslMvk7JXGjrs7hOY2U/GE3XcmL5YVQMpeVOHdITtBfy3KBZyAWW6IljBIKrDHYnx7c3IS/qqBNUtOi/S9eR3tvTkOQ/Oyjn17B8Pr1UhQllxjb6JW3thlVOck9nLoSwn4MxSEPmWG9dUMYtJRPbceE5q/ItysX1YLiAE0+JYV5X8KxUSjIMU1cTL2WYC/rAmazTWXsa8FLpZN/dLiLbZulMt7Pz1/lWxrsIlbfofA3n2sNvFcu+2jDqgM6Nf+MrfJSKYYM6W03K0T3SqVJ46p6nhIM0d1WT0wPhK3zPJDkea0BSnBG2MQcmCGheQgBZ6zS3Xk6iiJGcL7L1ZfXIEyIcxQa9EtLe4AWupmSKxFBAMkPq4tpgjYnlt4eXTBkk309k6825v/KX9bBez0PHPxuMXgCbCZ3VuH/88g+ViKVlAyg1jvrJGL9itiK5Q6qQVXVRFma9BKMhnvdpaNzdWn6203xKB0ctDDHZqziNWQGY/oPBkYsuR/FVQBIv43TFzI1fOCsU4dj FfWh0fDf CfMKlxZjEppJTZsy1ZwQx6GGbAG3x0IARzqOxUAYqvXmm8ldRn5BIRFmip/LRE8QuxERQrGq1yeFCnzFGxMN8wkdWeIaeWqL5cPx/1Of6R5QT4Nc10H9nRcAbDzvH7i1NmegDXAc706ICf6zAaTmpdgq0f6JHyiPFBqfb/4+WbQrK1z3EXKH0QZ6bKmqcpefpuGqqyKl3/gvBtgMArwo+GKcVjqlpAgsZL4TjhLyZVm6SkkOK9BYsqLOs7OQOiBvV0S/aosbVBpG1u48vc4z7OOFCaFjzJ0MeleMSjbRz9+kci221nyvYD6Q1OCXjW91DzUkY/fXaGyRmT6kXDgIjY2dBYk8wFNCZjzsc/i9EVec9Mb0jovDLbbTAfaK+Pr36LEcD 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: On Fri, Nov 1, 2024 at 3:20=E2=80=AFAM Ma=C3=ADra Canal = wrote: > > On 31/10/24 10:33, David Hildenbrand wrote: > > On 31.10.24 14:24, Ma=C3=ADra Canal wrote: > >> Hi David, > >> > >> On 31/10/24 09:57, David Hildenbrand wrote: > >>> On 31.10.24 13:51, Ma=C3=ADra Canal wrote: > >>>> Hi David, > >>>> > >>>> On 31/10/24 09:37, David Hildenbrand wrote: > >>>>> On 30.10.24 13:58, Ma=C3=ADra Canal wrote: > >>>>>> Add the ``thp_shmem=3D`` kernel command line to allow specifying t= he > >>>>>> default policy of each supported shmem hugepage size. The kernel > >>>>>> parameter > >>>>>> accepts the following format: > >>>>>> > >>>>>> thp_shmem=3D[KMG],[KMG]:;[KMG]- > >>>>>> [KMG]: > >>>>>> > >>>>>> For example, > >>>>>> > >>>>>> thp_shmem=3D16K-64K:always;128K,512K:inherit;256K:advise;1M-2M:nev= er;4M-8M:within_size > >>>>>> > >>>>>> By configuring the default policy of several shmem hugepages, the > >>>>>> user > >>>>>> can take advantage of mTHP before it's been configured through sys= fs. > >>>>>> > >>>>>> Signed-off-by: Ma=C3=ADra Canal > >>>>>> --- > >>>>>> .../admin-guide/kernel-parameters.txt | 10 ++ > >>>>>> Documentation/admin-guide/mm/transhuge.rst | 17 +++ > >>>>>> mm/shmem.c | 109 ++++++++++= +++ > >>>>>> ++++- > >>>>>> 3 files changed, 135 insertions(+), 1 deletion(-) > >>>>>> > >>>> > >>>> [...] > >>>> > >>>>>> diff --git a/mm/shmem.c b/mm/shmem.c > >>>>>> index dfcc88ec6e34..c2299fa0b345 100644 > >>>>>> --- a/mm/shmem.c > >>>>>> +++ b/mm/shmem.c > >>>>>> @@ -136,6 +136,7 @@ static unsigned long huge_shmem_orders_always > >>>>>> __read_mostly; > >>>>>> static unsigned long huge_shmem_orders_madvise __read_mostly; > >>>>>> static unsigned long huge_shmem_orders_inherit __read_mostly; > >>>>>> static unsigned long huge_shmem_orders_within_size __read_most= ly; > >>>>>> +static bool shmem_orders_configured __initdata; > >>>>>> #endif > >>>>>> #ifdef CONFIG_TMPFS > >>>>>> @@ -5027,7 +5028,8 @@ void __init shmem_init(void) > >>>>>> * Default to setting PMD-sized THP to inherit the global > >>>>>> setting and > >>>>>> * disable all other multi-size THPs. > >>>>>> */ > >>>>>> - huge_shmem_orders_inherit =3D BIT(HPAGE_PMD_ORDER); > >>>>>> + if (!shmem_orders_configured) > >>>>>> + huge_shmem_orders_inherit =3D BIT(HPAGE_PMD_ORDER); > >>>>>> #endif > >>>>>> return; > >>>>>> @@ -5180,6 +5182,26 @@ struct kobj_attribute > >>>>>> thpsize_shmem_enabled_attr =3D > >>>>>> #if defined(CONFIG_TRANSPARENT_HUGEPAGE) > >>>>>> +static inline int get_order_from_str(const char *size_str) > >>>>>> +{ > >>>>>> + unsigned long size; > >>>>>> + char *endptr; > >>>>>> + int order; > >>>>>> + > >>>>>> + size =3D memparse(size_str, &endptr); > >>>>>> + > >>>>>> + if (!is_power_of_2(size)) > >>>>>> + goto err; > >>>>>> + order =3D get_order(size); > >>>>>> + if (BIT(order) & ~THP_ORDERS_ALL_FILE_DEFAULT) > >>>>>> + goto err; > >>>>>> + > >>>>>> + return order; > >>>>>> +err: > >>>>>> + pr_err("invalid size %s in thp_shmem boot parameter\n", > >>>>>> size_str); > >>>>>> + return -EINVAL; > >>>>>> +} > >>>>> > >>>>> Hm, mostly copy and paste. You could reuse existing > >>>>> get_order_from_str() > >>>>> simply by passing in the supported orders and moving error > >>>>> reporting to > >>>>> the caller. > >>>>> > >>>> > >>>> Can I use functions from mm/huge_memory.c here? > >>> > >>> Yes, that's the idea. > >>> > >> > >> Unfortunately, it isn't possible without adding the function to a > >> header. > > > > Well ... sure, what's the problem with that? > > David & Barry, how do you feel about adding `get_order_from_str()` to > lib/cmdline.c? I'd vote to leave it as is. If, at some point, the controls for shared memo= ry and anonymous memory are moved to a file, that would be the right time to call the same get_order_from_str() for both. This is too trivial to warrant being an exposed API in huge_memory.h or cmdline. > > Best Regards, > - Ma=C3=ADra Thanks barry