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 77CC8E6748A for ; Thu, 31 Oct 2024 22:16:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B7EC16B008A; Thu, 31 Oct 2024 18:16:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B2D2B6B008C; Thu, 31 Oct 2024 18:16:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9F5A06B0092; Thu, 31 Oct 2024 18:16:19 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 828F56B008A for ; Thu, 31 Oct 2024 18:16:19 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 2BDA5419D0 for ; Thu, 31 Oct 2024 22:16:19 +0000 (UTC) X-FDA: 82735306080.24.422AA7C Received: from mail-vs1-f42.google.com (mail-vs1-f42.google.com [209.85.217.42]) by imf26.hostedemail.com (Postfix) with ESMTP id 9ABD614000F for ; Thu, 31 Oct 2024 22:15:56 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=Z9tJrKT7; spf=pass (imf26.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.217.42 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1730412845; 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:dkim-signature; bh=At8ovDf+5lHEpcARWPf57j7UUROFTNc1zmMWeWGQGKU=; b=LGUud7SGH6fXJlC9tisTbvzpVNRePjkiioRuPD3ExllZj7V4hxoJQU2u0QEVV5hFUjcffD zdFEXSgjLPHUWQxFyHvGEBRI1M+i8Kuyxh1oETmOpRjc5sClrsKNre3smZuexOoGx2YBoL 9/jCf+0Otmgbfd/BFCTzJs9E13APh44= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1730412845; a=rsa-sha256; cv=none; b=2jH7FFXdZvkmQV91M3Awo68W9qS5yEzWfU+XW0JInpCO6u6quimRrFPVMMIpUSd0SVAkK6 ijOLcdQ/cyNiCjHj7pprH4Fv95DPpLYp/SG2dN3CcSduULJrcnXINL4j80TCBO76HvyeDS 1KLPDzRfpiu0PbUeY4D7umsXjcPybPk= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=Z9tJrKT7; spf=pass (imf26.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.217.42 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-vs1-f42.google.com with SMTP id ada2fe7eead31-4a471fd7ef6so1209722137.1 for ; Thu, 31 Oct 2024 15:16:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730412976; x=1731017776; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=At8ovDf+5lHEpcARWPf57j7UUROFTNc1zmMWeWGQGKU=; b=Z9tJrKT7jOOZeIWF4/1X7jRCH2m5CwnTe69N+ga57emXd0BeQIbgQJMfLkiyK3SGi/ XTsxbWVNUigKp0tjloYLmo9quuutrtrTnwr+6CD0TYsODdMGjeD5rDe4mB6dbuV290/h 0a46rT8JfnIt3RrjgSgWSJK/f4nuyhCqVptC/aDksVou/na1ZMlKjnd7ISD6bVVdqcet 16HN5Rlglvq4teOUKbYTxIEtIOOAlQ9tW8OJp8LwBz1osTY/kWaTNTCzs3Qqe2o7RN3H 8IErSP0MKaFz5sGMqO/Y/7KrTLd9q4SduGQJ0p89POVHi3KrEC03ffF1esREVHQTy83M dYuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730412976; x=1731017776; 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=At8ovDf+5lHEpcARWPf57j7UUROFTNc1zmMWeWGQGKU=; b=ZIJK5Lgi3WMvvXFZUzc61sknRh4l+xR8rYHPm7nxLaXRYNx1VWRMnIR/JB6CkEEAGZ 7ocKOAOeA9pHhktsYgVWc191XZeRELOhPvNVvrebousSf/92nErI3wXfo5QYKlC0d0OD cw14UeVNPKzJ1VIrORN7a+RZlC3qMIQvLLOy08VEe0NCjYgZbOP41Bb+xg5TNua5/HOK Ny25tJHbg3+aZwcC8zwy6TVs+/vw5k/jI/M37eOhA8ZC/W0TbIwCVAO/UXoV7DVO9Tbh hsMIOlTYwP2YUSDVS4BsB3wo85MjBGr43piZHRrqihFYMlzSduDYt6LdjvutWnTIwOX+ VusQ== X-Forwarded-Encrypted: i=1; AJvYcCUpBOgdG0D/d281knn3dIWBoN/+hHmuWZ17nALmjaMA1m3Jz3kjt0jyDSzPGIiSpISRtMJbh1fNxg==@kvack.org X-Gm-Message-State: AOJu0YwbQdvbQ3gSZ/aop5C4xGYQR2iby3ycDHJD3lRfluggJHv6T40F B48ckAL6p3SQbffl1Hge20/Z1XEVCBdry9MfmoY8OhD8giRu+4QeFkdTpToRUziJN14g8e2n7s6 72GwddKDDaPldQLmk1qoB5Fqq0M8= X-Google-Smtp-Source: AGHT+IF5s362VZFuoEzcTPgJzHq2ZjpzoixUU5YIbWzRRZOjmbUvgPZkiYW1zW66g2j1XaM34aY6EiLzimNFpcj7x/8= X-Received: by 2002:a05:6102:14a1:b0:4a4:77c7:9471 with SMTP id ada2fe7eead31-4a961b0577amr2292088137.5.1730412976254; Thu, 31 Oct 2024 15:16:16 -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 <21cnbao@gmail.com> Date: Fri, 1 Nov 2024 11:16:05 +1300 Message-ID: Subject: Re: [PATCH v3 3/4] mm: shmem: override mTHP shmem default with a kernel parameter To: David Hildenbrand Cc: =?UTF-8?B?TWHDrXJhIENhbmFs?= , 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-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 9ABD614000F X-Stat-Signature: 73xchtj4yghq9fagzb4t367g3tnu91c4 X-HE-Tag: 1730412956-145756 X-HE-Meta: U2FsdGVkX1/LJPYNBM8VZSZwxKBNtOEv48z+w9vGgUY6MEws4AslG3Jkf8teIxV+MUPBqS4t+zHek91/bL6B3OzzpsuKu/joYZmyfcrBLgBPPjl4MLfeG8emU2VkHKW4hTgE1KtGXjLTwlPoex1bfpJIxApi8BeAPYznHv61mtKN5cnaA6urj7kJ5sVZLGRJwm5n+/5OZTScI6zdwA/09vShXAo/dRs9ZpBJD1ne56EGNuWa+ko+o7jlRFVmXtTKa7T1tguHWmMGQbRo3Vau5XBsLb3ZCtTomfyxkCplKfYfK51+T9bASH1TgINHfzoHYbD3RhCSUEpkjncvMCDE2hs37O3lsvQZ9XfOWCMD20EsSzrtkbdqUO70WXO8q2mo/Suv3U9COYZvXejwhepg1z6LWGxShFvSzYRj/zRKv4l7pNfMx0PahlEsNcFDgDqMXGevJQitUKBDQas0MCQw/rldJkiMpHHwmghuxWJoEVjZHcBlRJDddM/g6u0BFkCqINsRwnYyA51s/cMs8har9YqwU6dsGzf5i0eb2s86tVPBPLAkhE8x0Xq1TnX4x0sm3ywlZiDn/TUYVtLSOtPnE0MDwMQ5Nnj5X8b9OENx/PBXmiPg2Dxis56tV9dk5os/Vzs3GqfSAYfHiRkaXuz6Fl9fJha9JTPuypLZ3CrvFsLqcRaYfGWPs1VoZ8d8kc5oGFsOusIW3/wGJRCCiJ++3skhF0yKkm5S04rNW2qF6dzCBCMK/cTU971ULX6TVh8tBQk5CKMABB95M/gztPsJSrpUk7PM+VvGBHo4NOr3RPbID7kewnVdDmrrFNV2fc7qTIoF02RzINTu6pcpaAqE8ijGhCGb7x6yiSUn1cIONIUT1oxwgTsP7Ml4DCjSwt1cpsfE0471xUUzTh+1csvJzjVQgxHxbSXy7xZyJMwC0yS6pSAHPQw1dU0I6Dha81gMIvvnAj753zyyprYY7Mg gP5OIdob 86O9oVbLCcTP4CoXGtvnIXaFMoHnNES71/FXbMIgv2u896vEICHi06HdghzeYzADFqZ/SsBiNQZARhso6/JL5WSKo0DkbIIJgKMGmJBxKt7g1+K3uVOkyIbcDtoAbqW1HybOgotc/dajMCLCcmB0SbU7u6uWGSeej1JHUiSJV4OdhYkziQqHrXlwL1Ddsgg0m4FgWcE5AHNrY3Vht4ylQib+qMjFGJGt+/UimViGBrlMYh4Px8eE8n6jea+heQiAoh57ksxI7i+vvt12QFURgxIOeo5v0exKW2J6Y66o7Nt84ER5fIP+vO19VBmHV0hotklopzyRBJfiVfKa0ZJlyjZbESjwji/dhNpRJMHp0vmjaMYwAtyN3g07frOS8tiYQuYQZTc2MwDwlAQ6bJaj6+dT65g== 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 10:39=E2=80=AFAM David Hildenbrand wrote: > > On 31.10.24 22:12, Barry Song wrote: > > 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= the > >>>>>>>> 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:n= ever;4M-8M:within_size > >>>>>>>> > >>>>>>>> By configuring the default policy of several shmem hugepages, th= e > >>>>>>>> user > >>>>>>>> can take advantage of mTHP before it's been configured through s= ysfs. > >>>>>>>> > >>>>>>>> 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_alway= s > >>>>>>>> __read_mostly; > >>>>>>>> static unsigned long huge_shmem_orders_madvise __read_mostl= y; > >>>>>>>> static unsigned long huge_shmem_orders_inherit __read_mostl= y; > >>>>>>>> static unsigned long huge_shmem_orders_within_size __read_m= ostly; > >>>>>>>> +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 glob= al > >>>>>>>> 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 = memory > > 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. > > I ... don't quite agree. cmdline.c is probably a bit excessive and I > wouldn't suggest that at this point. > > This seems like a reasonable helper function to have as inline in > mm/internal.h. For get_order_from_str() specifically, I agree that it's fine to keep it in internal.h, as it could be considered a general need. However, anything larger than tha= t in parse bootcmd seems too trivial and not general enough to qualify as an = API. > > ... unless I am missing something important and the obvious code > duplication is warranted. > > -- > Cheers, > > David / dhildenb > Thanks barry