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 EB2C8C52D7F for ; Thu, 15 Aug 2024 23:50:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7CCCC6B00D0; Thu, 15 Aug 2024 19:50:18 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 77CB86B00D4; Thu, 15 Aug 2024 19:50:18 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6441A6B00D6; Thu, 15 Aug 2024 19:50:18 -0400 (EDT) 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 452E26B00D0 for ; Thu, 15 Aug 2024 19:50:18 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id A2B9F12188B for ; Thu, 15 Aug 2024 23:50:17 +0000 (UTC) X-FDA: 82456126074.25.7B2331C Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) by imf26.hostedemail.com (Postfix) with ESMTP id AAA48140004 for ; Thu, 15 Aug 2024 23:50:15 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=iP+0Uh8C; spf=pass (imf26.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.210.178 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=1723765802; 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=zXW9s6Cf+sYC+rm2Tr0W88BqGARgUcJhbSNatwBSpV4=; b=ertB1aAMSHipbvXqw6Hvj5ycufsfEdRCmpRZCdosotzdo1uEGU9ubKdLEEReuS7lKXEVmf AOj5Gl6ZeRRigNnJQ4jbAWzBsHMvG2FoRditlRy0fYowrPs0NG0yOOObJ+ZIbe2aDaTHpj LLaOnYLwleal7x6THl/Z4wpVGqJjY/A= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=iP+0Uh8C; spf=pass (imf26.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.210.178 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1723765802; a=rsa-sha256; cv=none; b=Bw2m+gGsyOBgceHrPzmdhHq+Rz3m0FhsYrb1BPYC6EOC1P5NFCtKRrJAn5jREYy+SxADYk sij++6mLvqljMw2yuYWCE6PmYQIjRyxqhnKQBby4SHUyrUse9ApBs2vDncSktBlqBY4nWS Pf/OQEGe37ES2aUchr2Yoz0Fdau2lOI= Received: by mail-pf1-f178.google.com with SMTP id d2e1a72fcca58-70eaf5874ddso1242849b3a.3 for ; Thu, 15 Aug 2024 16:50:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723765814; x=1724370614; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zXW9s6Cf+sYC+rm2Tr0W88BqGARgUcJhbSNatwBSpV4=; b=iP+0Uh8C3i4H8KsRjH/ahSBU3RPQm22kOmDoj53u2GyjyvGQhxHug89f6/MrHPHg0a xuQ/alhHnUxiDj4k7ILqxjAA2rlWVTXWSYf3Qfdm7KBzOH/nqk+P7iK2dU9UhakFf8y8 9Jbsbf6OXXwo9Mqb8olPPIBZuJrlhGAJNMn+xhfo8n+DFuxdKvqXDR4WoB3pBrMxNTQG a7HpiqGLnilyvUpC7I1z8s7dKG9QDsb1MDzhfxMQkA5KtjjbHck6LHB3nq3RO2MueON2 XTL06maSDIShc/mhsNG4Q4eDp28TtE/03q5nEPpa3nANfMFVdZJAQnHYTfojMzszAstk HgOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723765814; x=1724370614; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zXW9s6Cf+sYC+rm2Tr0W88BqGARgUcJhbSNatwBSpV4=; b=DMjqxDosFrOl658Zng7/ikwSyRZqhnhhfhjOOgtOGvpQiwpu5cpjD7XgRMN+3O/Uu+ F5dcm1JVbVdR1iENGR4+oHuWI/FgVIHwfhiC06TSUZLD5MORrKcwiBo4vKSz1BbmG/t0 1lRLNtP2tGviCHn9x0dmG5ULRASWubkWCr9B3CFcPxO7wH58olVe4BhiiH3YOkg6XXZT 4mB1pknmygoTvNyMv9LvjDHEfYtPJ2+lrlGwdTgrkvihmzvLJq2yAwTXxhUVDFa9FQEn t3aNCHEuOzdweV5vj4pwO+wislWM3nk3UFCKPcaXdyCGX4rgHYh8mXXEaIL2liOdb6xC 1ljg== X-Forwarded-Encrypted: i=1; AJvYcCXvmvPUwuIxu0uylPeS0wKPHSagC9GLZz8PrJ1uD4HE++wKm4q7TwQQyX9qdDyn0g4iDtFvdOveJA==@kvack.org X-Gm-Message-State: AOJu0YzEfuRKD850P5ziS+n1a3iMeNPVO/rkGk+7Kgyhj+dFGe5BoWhl 4fOaeCQG+xvdJHHGo0ouKQ6Sd0C7vBjm3J2Ywv43SdasGm2rzdij X-Google-Smtp-Source: AGHT+IEYZSWvtE5ZNK1eCqLALbCYPnafx6mp4YMq/5DLNOtLNi+A0QIk7Jld2h+9aJJNVkLomKvT4Q== X-Received: by 2002:a05:6a00:9448:b0:710:5889:9c62 with SMTP id d2e1a72fcca58-713c4d89b16mr1565578b3a.6.1723765813942; Thu, 15 Aug 2024 16:50:13 -0700 (PDT) Received: from localhost.localdomain ([2407:7000:8942:5500:aaa1:59ff:fe57:eb97]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7127ae0e220sm1548204b3a.74.2024.08.15.16.50.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Aug 2024 16:50:13 -0700 (PDT) From: Barry Song <21cnbao@gmail.com> To: david@redhat.com Cc: akpm@linux-foundation.org, baohua@kernel.org, baolin.wang@linux.alibaba.com, corbet@lwn.net, ioworker0@gmail.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, ryan.roberts@arm.com, v-songbaohua@oppo.com Subject: Re: [PATCH v4] mm: Override mTHP "enabled" defaults at kernel cmdline Date: Fri, 16 Aug 2024 11:50:00 +1200 Message-Id: <20240815235001.96624-1-21cnbao@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <6e23c705-3d67-419b-b085-f19f5101124c@redhat.com> References: <6e23c705-3d67-419b-b085-f19f5101124c@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Stat-Signature: gi3fxup1izw6jxmbbpj1hzjdzphwq98q X-Rspamd-Queue-Id: AAA48140004 X-Rspamd-Server: rspam11 X-HE-Tag: 1723765815-490350 X-HE-Meta: U2FsdGVkX18D/U9NJjBYEyVMsKep7O6rUz4zsrh4cvIUR531oc/olm3KkylKtb6Dp6r8LPZ97pfl8Yv9ciYXZoHKbMuLrTFHac4fqhFUfgqnTwpN7JPqjZONpJe3nyQkuhX/loKJW8wCrO4jX7ElBQbAcFA+c9+9jjJMNrHGZBFtkQwgfUigRg8BJP1Umvnr3+BzuvMffVN1w3qIayNWHzxOZXUEb6jcOg4VQ+KVBj/zacvXCcoa7ocMUTYYFX+k5vwdL9Ej6eyIrMph56tN28qV6vyRwxelKPNQcoIN2Blt0YVYJQjx9ut2aLJX38UtjENqkuACIWa6XQafoIUkiB0pHDe8ACSGypyJcdBBYd8aK4Z5+Zi1mFswzaH1NnOQRBA5j70yWPKhlawhjBo7To2vn6x5Cxesm2/kpFYvXTY3deSXbKaV3mowq4H0P6KgLw9u4AHUc9RRC6+8H5V8vdDmfQQXDVayIbUk9hBwk9AgtxkuJcKCQHGg8pBsJoKXmXkdyFodmYCv3+N7KC1hq0mBq3TuK7owVr1NxGH1HddaHhO0+JD0g60CreCehF/v+FE4oNv9k+GX6dz9XXR+HuzkpmuLtiCzNMYNSpMUvhy4R2ugRk0sBh8xZA9h2PPrmShefAB4ZHUeujrbd6WwSGBzrt6Ibkx8kyxcNqLN2w1xxC7K5rBJ7qNHWL4221N7+RFc891/tuTMdECTCH9UteWr6jAkdKhkV+x48z/kVeyXhrtRjktS95BkR+UOvzyx8Hxmf0hAI6OmaUYBLuABE/rOxM5IpOazK1XpI4HoHxnzk8b8vbSzXEOH4zARYArIzDQBTbHDS6RDyLnKr2QCY/NCbosMEeZpfRQ7nahbJjIWJzLVuJ4xo+jYw1NS+Mq+4R7xaE46EzLIhBRwrxdQTMkgeNbi09i3T0agwlTT2zg4/X+wYh9KEgUQUQQvDkZeF8LTil2a8vC0IQF1TaK YYD82JSG NiiMLGPtUjrVTOnKPFodyDRDuTaZGfkfYkAJL1I/70+3b/2DYwOqgb/fbXqDREOZnPuVk6lufuVf5mSqOcmvLnQWtTYjpuX8TSfBWK8I8P1khPNtAYhfWXX6Hp6oEhA9xfNVsvejn3fBqzCRSXeMn7rK4/OeY7HMSexlta2nue7ERkAbQJjf9AB/ohDKNJB28qbu5JmkvTfSxTT6oygEMz2TrJ9RTbqJrgBJTc1Z8Ixjf+PopkuEJWQ4hRvxCbj0t0jkoJpkKNuW+/RYwLfG5+eNW4fa4fH13RzJZL/lVsxaxIKSFgWBMEneJNgywHjEXHhQgJbKLbSDTl611ipBxFVzpr7mMvu7fsMqwxprJW1bCwSNoB68IdrhjZECEUrkLFexBhNZUsZ+zj3rsSDFzBG2kX39tgFfCP+WdvLXCTXRUckU= 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 Thu, Aug 15, 2024 at 10:26 PM David Hildenbrand wrote: > > >>> +static inline int get_order_from_str(const char *size_str) > >>> +{ > >>> +     unsigned long size; > >>> +     char *endptr; > >>> +     int order; > >>> + > >>> +     size = memparse(size_str, &endptr); > >> > >> Do we have to also test if is_power_of_2(), and refuse if not? For > >> example, what if someone would pass 3K, would the existing check catch it? > > > > no, the existing check can't catch it. > > > > I passed thp_anon=15K-64K:always, then I got 16K enabled: > > > > / # cat /sys/kernel/mm/transparent_hugepage/hugepages-16kB/enabled > > [always] inherit madvise never > > > > Okay, so we should document then that start/end of the range must be > valid THP sizes. Ack > > > I can actually check that by: > > > > 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 >> PAGE_SHIFT)) > > No need for the shift. > > if (!is_power_of_2(size)) > > Is likely even more correct if someone would manage to pass something > stupid like > > 16385 (16K + 1) Ack > > >               goto err; > >       order = get_order(size); > >       if ((1 << order) & ~THP_ORDERS_ALL_ANON) > >               goto err; > > > >       return order; > > err: > >       pr_err("invalid size %s in thp_anon boot parameter\n", size_str); > >       return -EINVAL; > > } > > > >> > >>> +     order = fls(size >> PAGE_SHIFT) - 1; > >> > >> Is this a fancy way of writing > >> > >> order = log2(size >> PAGE_SHIFT); > >> > >> ? :) > > > > I think ilog2 is implemented by fls ? > > Yes, so we should have used that instead. But get_order() > is even better. > > > > >> > >> Anyhow, if get_order() wraps that, all good. > > > > I guess it doesn't check power of 2? > > > >> > >>> +     if ((1 << order) & ~THP_ORDERS_ALL_ANON) { > >>> +             pr_err("invalid size %s(order %d) in thp_anon boot parameter\n", > >>> +                     size_str, order); > >>> +             return -EINVAL; > >>> +     } > >>> + > >>> +     return order; > >>> +} > >> > >> Apart from that, nothing jumped at me. > > > > Please take a look at the new get_order_from_str() before I > > send v5 :-) > > Besides the shift for is_power_of_2(), LGTM, thanks! Thanks, David! Hi Andrew, Apologies for sending another squash request. If you'd prefer me to send a new v5 that includes all the changes, please let me know. Don't shift the size, as it can still detect invalid sizes like 16K+1. Also, document that the size must be a valid THP size. diff --git a/Documentation/admin-guide/mm/transhuge.rst b/Documentation/admin-guide/mm/transhuge.rst index 15404f06eefd..4468851b6ecb 100644 --- a/Documentation/admin-guide/mm/transhuge.rst +++ b/Documentation/admin-guide/mm/transhuge.rst @@ -294,8 +294,9 @@ kernel command line. Alternatively, each supported anonymous THP size can be controlled by passing ``thp_anon=,[KMG]:;-[KMG]:``, -where ```` is the THP size and ```` is one of ``always``, -``madvise``, ``never`` or ``inherit``. +where ```` is the THP size (must be a power of 2 of PAGE_SIZE and +supported anonymous THP) and ```` is one of ``always``, ``madvise``, +``never`` or ``inherit``. For example, the following will set 16K, 32K, 64K THP to ``always``, set 128K, 512K to ``inherit``, set 256K to ``madvise`` and 1M, 2M diff --git a/mm/huge_memory.c b/mm/huge_memory.c index d6dade8ac5f6..903b47f2b2db 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -953,7 +953,7 @@ static inline int get_order_from_str(const char *size_str) size = memparse(size_str, &endptr); - if (!is_power_of_2(size >> PAGE_SHIFT)) + if (!is_power_of_2(size)) goto err; order = get_order(size); if ((1 << order) & ~THP_ORDERS_ALL_ANON) > > -- > Cheers, > > David / dhildenb > Thanks Barry