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 4384ED13595 for ; Mon, 28 Oct 2024 03:31:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 65BA16B0093; Sun, 27 Oct 2024 23:31:44 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 60A8F6B0096; Sun, 27 Oct 2024 23:31:44 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4D2276B0098; Sun, 27 Oct 2024 23:31:44 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 2FB806B0093 for ; Sun, 27 Oct 2024 23:31:44 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 86EFAC1C86 for ; Mon, 28 Oct 2024 03:31:19 +0000 (UTC) X-FDA: 82721585646.06.766E4DA Received: from out30-112.freemail.mail.aliyun.com (out30-112.freemail.mail.aliyun.com [115.124.30.112]) by imf19.hostedemail.com (Postfix) with ESMTP id A82D01A0012 for ; Mon, 28 Oct 2024 03:31:11 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=aXBFcDIT; spf=pass (imf19.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.112 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com; dmarc=pass (policy=none) header.from=linux.alibaba.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1730086222; 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=n0Bx+2LFE8K+t9JD5+qdAGeY9p/tHz0yLBLver5D33k=; b=g7jxB7MUsBCVCkRJ/sHRSa+S03MN5Os8WTmpgdwm0emtiUajaxJXhp2OmMuq01eVtEHoYi +Tl2WaGgszM92K9yE+rkGXV9gr5A5/mJjx/DhOj2noxmblyl55CNm8oqE6qAJz0tYwxVVq JagWumxK23yzMHBPWgBvkXpONQDKuMU= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=aXBFcDIT; spf=pass (imf19.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.112 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com; dmarc=pass (policy=none) header.from=linux.alibaba.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1730086222; a=rsa-sha256; cv=none; b=I0czVCbnytLxtvKdKqFztPQenTSy2dZdvh2br99IfAq7MsuYdBdPQMcuwY1/TKw9/aHD8I /Ia7ffW7YxkJoDHUj2U8GRcqQUbskI0lFM+GDcbDoyJz8oRRWOIIiYeIA3KzqkOb8wLGPD Dj/r9SbCg9m3waUF5XOD8BiWN02Bpqg= DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1730086297; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; bh=n0Bx+2LFE8K+t9JD5+qdAGeY9p/tHz0yLBLver5D33k=; b=aXBFcDITstC6TTNwzIAA4XOTQOKb5ASnFVph/R8YzTE5bZPliZN503L13DR7Vv6aeWp4GsgwMNrN6OCt9Stjrsbz/Z1qpQo5R9zBe3B3jyfaUSH52opdjKsMrDlTE7I05PdAbgW9UdyaEgvSUDBCx2J3+2waVAmZXtL2xrFdinI= Received: from 30.74.144.158(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0WHzFjvQ_1730086294 cluster:ay36) by smtp.aliyun-inc.com; Mon, 28 Oct 2024 11:31:35 +0800 Message-ID: <0d33f2c1-5433-486a-8faa-b85265ecc855@linux.alibaba.com> Date: Mon, 28 Oct 2024 11:31:33 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 2/3] mm: shmem: control THP support through the kernel command line To: =?UTF-8?Q?Ma=C3=ADra_Canal?= , Jonathan Corbet , Andrew Morton , Hugh Dickins , Barry Song , David Hildenbrand , Ryan Roberts , Lance Yang Cc: linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-dev@igalia.com References: <20241027175743.1056710-1-mcanal@igalia.com> <20241027175743.1056710-3-mcanal@igalia.com> From: Baolin Wang In-Reply-To: <20241027175743.1056710-3-mcanal@igalia.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam03 X-Rspam-User: X-Rspamd-Queue-Id: A82D01A0012 X-Stat-Signature: ijtpknkcfaawi86ez5phhs1ibyydc114 X-HE-Tag: 1730086271-844943 X-HE-Meta: U2FsdGVkX18IvsN6X6sh3cQBX9xKUYbakOSbi4QssZCMK88KcmIQjGd4MtQ0hGvlhJleUKxqO+eTq3CtZ7lhwQcqiZrXaOXixoV8JmFfeeqitCdRn0vVVMDRQBoWoEDQNH61QDVHqCNofyyPizGEZGmfFt1bCy8SViYEN3blUozGUua3w4PhmTYobypQua5gx+L2fjwjasquxGcXVya68hgtaDM488r8Vgkxf3CoovNXx4PXX1bG+Xf9tfmVJPfov/kQeERFCyKWAXILFXRg9zwQ5sQtVttpq6AxKBlk8OHw++qkaWIv/s2rKyYckB79hDMPp0gyYhOcfURSLJsFuGGiEr+nzWTlKRkgJDevUmal390I/6JTtXLNrWVqOweUF1rpOfA1CONWUJz4D42wjpC/yJWiZA3ibT7CBBjq1xAvOIeQlXY1fFAUXtObKrLIpdHWgCoU9Qr83t2zFp1X1GBtUBww2/0I2O2SqYaJ3boGLGBQdmY6BwJE7q0LkhL3AsYjwd6ihmqDSVIkwuCL2EzNllIXUCWVfFEI7BaZ+Z/y9o68llFrXNmfoEWWw2m1zQGCvPnghD17qENViaTL9XqN5L+dmIMVeZ0wZSVJLvC1PbgOGPbhLDdjRBuaLvUbIjgxKgrWhs3ppVxfJdN5/5wUZ4mUOj6HpFg8RaBl7vWjhdc3Uloo34fV2YRt+URu2Az1BnijvuAZs+AFcREYPX9bz7KOULro5uZglG5TipLoDoiJvXywUiuYCFPUwIlDzsDEnVyjfo2iTrp3zqhU1CnOl656yXysnFwVbwNc/yVIwTHIZ+og4BzJ1NJdu4z1nWiofUVEVl4mYxzJd1ofoH/KaWDd2WPeNi9CrwKTdrK0ALBvWJ24yyPCHPyph60gDO6Eh9VeRK5u7yyBjAn+QpWBS9kNpccxo2znTz509OktU4EldBcVrfSIf2BA4BO7982K/Ou7gNpsj46AZ1d MXgPefgh NhnhHbR02HvdaA1CphFYIOQHXn/PGrYmBhiqLfq1skd6pmukCTBwlEqZi+kJDymyL4eWmF9nmisLAu/vhP2B5UxHZGxNRsjMQLS9zkyPH0tlbbXZkc5NCgi8DH/qtzvnCYZu2bRUNeq9iAwsM5qYObiyvSiuBxCmfPMxwdZxgiHAb8DKJwLNRMPLpn9mctx4a1jKGl6aJDIVNHrxnzEISjR96QfXBD+SaNI9xgDOw2abigj4XjlUyx6SrnTHgJTgTeIacT8lN8PasKkI50qIH5PySWzRkrDsfXoPijekDMmaT48wHLWHB5Eawa0cZDH+r+mDIPBIvIpKksVRXX8kyEAUiVQ== 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 2024/10/28 01:36, Maíra Canal wrote: > Add a new kernel command line to control the hugepage allocation policy > for the internal shmem mount, ``transparent_hugepage_shmem``. The > parameter is similar to ``transparent_hugepage`` and has the following > format: > > transparent_hugepage_shmem= > > where ```` is one of the seven valid policies available for > shmem. > > By configuring the default hugepage allocation policy for the internal > shmem mount, applications that use shmem, such as the DRM GEM objects, > can take advantage of mTHP before it's been configured through sysfs. > > Signed-off-by: Maíra Canal > --- > .../admin-guide/kernel-parameters.txt | 7 ++++ > Documentation/admin-guide/mm/transhuge.rst | 6 +++ > mm/shmem.c | 38 ++++++++++++++++++- > 3 files changed, 49 insertions(+), 2 deletions(-) > > diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt > index 1666576acc0e..acabb04d0dd4 100644 > --- a/Documentation/admin-guide/kernel-parameters.txt > +++ b/Documentation/admin-guide/kernel-parameters.txt > @@ -6926,6 +6926,13 @@ > See Documentation/admin-guide/mm/transhuge.rst > for more details. > > + transparent_hugepage_shmem= [KNL] > + Format: [always|within_size|advise|never|deny|force] > + Can be used to control the hugepage allocation policy for > + the internal shmem mount. > + See Documentation/admin-guide/mm/transhuge.rst > + for more details. > + > trusted.source= [KEYS] > Format: > This parameter identifies the trust source as a backend > diff --git a/Documentation/admin-guide/mm/transhuge.rst b/Documentation/admin-guide/mm/transhuge.rst > index 745055c3dc09..9b5b02c4d1ab 100644 > --- a/Documentation/admin-guide/mm/transhuge.rst > +++ b/Documentation/admin-guide/mm/transhuge.rst > @@ -326,6 +326,12 @@ PMD_ORDER THP policy will be overridden. If the policy for PMD_ORDER > is not defined within a valid ``thp_anon``, its policy will default to > ``never``. > > +Similarly to ``transparent_hugepage``, you can control the hugepage > +allocation policy for the internal shmem mount by using the kernel parameter > +``transparent_hugepage_shmem=``, where ```` is one of the > +seven valid policies for shmem (``always``, ``within_size``, ``advise``, > +``never``, ``deny``, and ``force``). > + > Hugepages in tmpfs/shmem > ======================== > > diff --git a/mm/shmem.c b/mm/shmem.c > index 44282a296c33..24cdeafd8260 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -582,7 +582,6 @@ static bool shmem_huge_global_enabled(struct inode *inode, pgoff_t index, > } > } > > -#if defined(CONFIG_SYSFS) > static int shmem_parse_huge(const char *str) > { > if (!strcmp(str, "never")) > @@ -599,7 +598,6 @@ static int shmem_parse_huge(const char *str) > return SHMEM_HUGE_FORCE; > return -EINVAL; > } > -#endif > > #if defined(CONFIG_SYSFS) || defined(CONFIG_TMPFS) > static const char *shmem_format_huge(int huge) > @@ -5174,6 +5172,42 @@ struct kobj_attribute thpsize_shmem_enabled_attr = > __ATTR(shmem_enabled, 0644, thpsize_shmem_enabled_show, thpsize_shmem_enabled_store); > #endif /* CONFIG_TRANSPARENT_HUGEPAGE && CONFIG_SYSFS */ > > +#if defined(CONFIG_TRANSPARENT_HUGEPAGE) > + > +static int __init setup_transparent_hugepage_shmem(char *str) > +{ > + int huge, ret = 0; > + > + if (!str) > + goto out; > + > + huge = shmem_parse_huge(str); > + if (huge == -EINVAL) > + goto out; > + > + if (!has_transparent_hugepage() && > + huge != SHMEM_HUGE_NEVER && huge != SHMEM_HUGE_DENY) { > + ret = -EINVAL; > + goto out; > + } > + > + /* Do not override huge allocation policy with non-PMD sized mTHP */ > + if (huge == SHMEM_HUGE_FORCE && > + huge_shmem_orders_inherit != BIT(HPAGE_PMD_ORDER)) { > + ret = -EINVAL; > + goto out; > + } > + > + shmem_huge = huge; The code is similar to shmem_enabled_store(). Could you factor out the common parts into a helper function and reuse them? > + return 1; > +out: > + pr_warn("transparent_hugepage_shmem= cannot parse, ignored\n"); > + return ret; > +} > +__setup("transparent_hugepage_shmem=", setup_transparent_hugepage_shmem); > + > +#endif /* CONFIG_TRANSPARENT_HUGEPAGE */ > + > #else /* !CONFIG_SHMEM */ > > /*