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 A005BD74959 for ; Thu, 31 Oct 2024 13:24:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DB8E06B0083; Thu, 31 Oct 2024 09:24:30 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D43206B0085; Thu, 31 Oct 2024 09:24:30 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BE3396B0088; Thu, 31 Oct 2024 09:24:30 -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 9C2C96B0083 for ; Thu, 31 Oct 2024 09:24:30 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 520D31613EA for ; Thu, 31 Oct 2024 13:24:30 +0000 (UTC) X-FDA: 82733964852.20.09B6D54 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) by imf01.hostedemail.com (Postfix) with ESMTP id E99114000F for ; Thu, 31 Oct 2024 13:24:05 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b="eAzh/A3V"; dmarc=pass (policy=none) header.from=igalia.com; spf=pass (imf01.hostedemail.com: domain of mcanal@igalia.com designates 178.60.130.6 as permitted sender) smtp.mailfrom=mcanal@igalia.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1730380987; 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=VFUExYJbzjpGCUKWqplKyt76LINRzQm1m5oqqk1sjF0=; b=cDur8WtumOaTi1xvu0TCYxWamf7pPkk+i2jp/ddWyKge0Iq/J1RJe6SUQdvWx1XZN6/AUH oHwRGTHeUQ0e++JwNfrsEg5pJ7zu17gDSR3WZnxeFSjejcJs9NzDsLeuhDaAhkff+zvgJs 3+Utbj3xdxagWzxl5gTWHZyr2yJb9ck= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b="eAzh/A3V"; dmarc=pass (policy=none) header.from=igalia.com; spf=pass (imf01.hostedemail.com: domain of mcanal@igalia.com designates 178.60.130.6 as permitted sender) smtp.mailfrom=mcanal@igalia.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1730380987; a=rsa-sha256; cv=none; b=Hrkseg0rC26y+mknIR7xL0We7S9mMQjXdYeDDnGW6iGtveniRyp/u8My0opDVIYVXSZlpc thd+rwCW5/E5xkS3m9EeKqfjwDTFcyFW5rRPElEWF41qJakqAxQKYMKfKZ+KKDZapWGqeE 4Ni+zevvjiIozKUVIe1fdkWs/1IrbAY= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:From: References:Cc:To:Subject:MIME-Version:Date:Message-ID:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=VFUExYJbzjpGCUKWqplKyt76LINRzQm1m5oqqk1sjF0=; b=eAzh/A3Vmx4XuSKHwLyp1tpaY4 Bhp+Jo1SBhYCBaGWw09jgqvIVVWJlr7j/+PCtFTsZ//FMhrll/hsDxw0Y5hVTK/B2gytrc+MLLqpU zxH69w8JX65wLbUhLbnHNcqpZtnp5iZAEDSu1EugXWQimLLKglWc658u4CQW9w+5HInmrul5tV3Zr WLGGI6LkChI/gdmlgppepW8pERpyuxkLRGG36R63sS91YYPr1HbkWVR1ccSrbJhvrWv/FGYiIyWpf BE7WJo1sqiWS/D/cQI0wkb9CPr7WuG4fR0/IwXXW2nJfYwq/8L+d20yCsqqvXqVHVNBOJP/h6ex8C mGwP0Jhw==; Received: from [187.36.213.55] (helo=[192.168.1.103]) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_128_GCM:128) (Exim) id 1t6V9k-0001ol-5O; Thu, 31 Oct 2024 14:24:08 +0100 Message-ID: <95c48a30-0696-4110-950e-e81afb4ffc2a@igalia.com> Date: Thu, 31 Oct 2024 10:24:01 -0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 3/4] mm: shmem: override mTHP shmem default with a kernel parameter To: David Hildenbrand , Jonathan Corbet , Andrew Morton , Hugh Dickins , Barry Song , Ryan Roberts , Baolin Wang , Lance Yang Cc: linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-dev@igalia.com 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> Content-Language: en-US From: =?UTF-8?Q?Ma=C3=ADra_Canal?= In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: E99114000F X-Stat-Signature: huc6gtbh4hm8r9nqr38pq6m7s6zmc31x X-HE-Tag: 1730381045-901659 X-HE-Meta: U2FsdGVkX181EpxCGarKQPpgyduewPj0UMOmmRYA4m0IeIQlXm0dLBcm+iJdcchjzPK429gy9tm4mwLVHy9/0yrhzFHdECP70x4vvpi+31b89AOdGIJA98eWO9z+4S9R+RRVWlgTxRMZB3PwBdUepqYhk1HlKmzNhSkMa+OnP033+1VPcRXz/Y9DNUOWqLn46cEHWJtsaGdEBymxiW0P+EKFf7ZRWjyU6P3POv12MCyBHHq2/1YpIprDp/VuDjZGa+YdD5boibbX1S+W9xK9+nlKyQN/wzrA3/tXZP7LPuDYal5Giv6YnHVM1uk90s/kBqWp0pc6NkDe82ZkkaZLA+aOFDeH0O/lgvIOfM+4H7iwitdXoqqI/BIYqvhg4lczeSsplGZHVypa/ZrqRBd1nVotjixkNFiWzK0GNqkeY4qlpM6RqR+aKvh9yflE7IdWBwuUHbprFa+fgwed8fbpCla5lmTx6ZzQUQ2gFFB8NLQzbRoJ+9QDfxKOfq+Vqt05zN1DUynZe6x/bWrjcQMF0Or38JsPP/uNUsxlpKuS+2avB5qGtBKGftVmYEaZkONpQkEe0lSB+tClj9D23wrZUz9v/LQWEq9V16o7V5gUl2xlfVpzTjbnhFbVSHgOsf6SJeJ2KAu0aCuYwHH/u8uA0Ee9vsImIE5QE4+SUmfql4+v6aXNbx2+PV/suH7vVq6XudrcJ4amVhEIzNVMV3+AVFXifIQpSq+ch+sBOs7FMjYqUQEFBkm0hMfv6gD/pTN5eR8wcRkkIQrDDcJkjnoUD1ahE7kivUL1W6DauL9lgBWqMcgR5ickp9aN4pj6uLcUT5pB0LwCfYp9rjnYA6uTz8gvbszwwXmWaPILFaY9COfcJbaIUb3f2ijGqvLKQKimW3nPVapvxx5tIKfkTVIEQUA0Jff3TARoobmr0MBIpS0paP2Alvf98n0D7R/AeIlALww4+5RHGjMjMo7EVva UI+Evh4L F4UEFREJETmwzHNM0cTHx08apRbDDkuDIG+K/OOJxpfHkpZ9LkEplZgPkgyBZCzLxwoktXlxIMKTxkOx2xMKHxIZlOcdem20fCNFTF0i2qoObZw41n9YASLXkqXUPaOVazSIvrAUg6c5wpZ2OEfKmhxLSSJt0sMOHza9D7GlM1asHFepEpPj9nGxKYj8v4o1yx5FyMLv0MoNNpRb6kqn5lrpHY5VM4OhXUFVmc5rqm+qhF6hSntlPn2vIfdTR3iSpL+mo4Mu8vgh0D1PmDeGC6wD5PYpegybA4XmE2MiazWplwkCwtCX2xawbQ/qQNJoURDTYrHIYtbq1ytiFlTzfK/sLaBItTq5MDsVv2M3jxhfewM392APEFbnKNI9wDkDqxP+x8QZTPUB6TyrCeYAjXOwt/0flVowfMQbQ 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: Hi David, On 31/10/24 09:57, David Hildenbrand wrote: > On 31.10.24 13:51, Maíra Canal wrote: >> Hi David, >> >> On 31/10/24 09:37, David Hildenbrand wrote: >>> On 30.10.24 13:58, Maíra Canal wrote: >>>> Add the ``thp_shmem=`` kernel command line to allow specifying the >>>> default policy of each supported shmem hugepage size. The kernel >>>> parameter >>>> accepts the following format: >>>> >>>> thp_shmem=[KMG],[KMG]:;[KMG]- >>>> [KMG]: >>>> >>>> For example, >>>> >>>> thp_shmem=16K-64K:always;128K,512K:inherit;256K:advise;1M-2M:never;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 sysfs. >>>> >>>> Signed-off-by: Maíra 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_mostly; >>>> +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 = BIT(HPAGE_PMD_ORDER); >>>> +    if (!shmem_orders_configured) >>>> +        huge_shmem_orders_inherit = BIT(HPAGE_PMD_ORDER); >>>>    #endif >>>>        return; >>>> @@ -5180,6 +5182,26 @@ struct kobj_attribute >>>> thpsize_shmem_enabled_attr = >>>>    #if defined(CONFIG_TRANSPARENT_HUGEPAGE) >>>> +static inline int get_order_from_str(const char *size_str) >>>> +{ >>>> +    unsigned long size; >>>> +    char *endptr; >>>> +    int order; >>>> + >>>> +    size = memparse(size_str, &endptr); >>>> + >>>> +    if (!is_power_of_2(size)) >>>> +        goto err; >>>> +    order = 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. I deleted `get_order_from_str()` from mm/shmem.c just to test it: mm/shmem.c:5230:13: error: call to undeclared function 'get_order_from_str'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 5230 | start = get_order_from_str(start_size); | ^ mm/shmem.c:5233:19: error: call to undeclared function 'get_order_from_str'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 5233 | start = end = get_order_from_str(subtoken); | ^ 2 errors generated. make[3]: *** [scripts/Makefile.build:229: mm/shmem.o] Error 1 make[2]: *** [scripts/Makefile.build:478: mm] Error 2 make[2]: *** Waiting for unfinished jobs.... Please, check the discussion I had with Barry about the pros and cons of copy and paste and code refactor [1][2]. We ended up deciding to duplicate the code. [1] https://lore.kernel.org/linux-mm/CAGsJ_4wJ2xoNRLMNkmLL3x1t2YiqQJ1=saXa+HNxRUbSNivRCw@mail.gmail.com/ [2] https://lore.kernel.org/linux-mm/CAGsJ_4yp89one_hoB_87poU2wrpJh_0NVicRKW538eE6yo1kZw@mail.gmail.com/ Best Regards, - Maíra