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 C61E5EB64D9 for ; Thu, 29 Jun 2023 11:31:59 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6A15D8D0005; Thu, 29 Jun 2023 07:31:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 652238D0001; Thu, 29 Jun 2023 07:31:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 51A1D8D0005; Thu, 29 Jun 2023 07:31:59 -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 445B28D0001 for ; Thu, 29 Jun 2023 07:31:59 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 169B71A0DBD for ; Thu, 29 Jun 2023 11:31:59 +0000 (UTC) X-FDA: 80955571158.30.DB3DE79 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf17.hostedemail.com (Postfix) with ESMTP id 4BE4340019 for ; Thu, 29 Jun 2023 11:31:57 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=none; spf=pass (imf17.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com; dmarc=pass (policy=none) header.from=arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1688038317; 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=HOnuhf4cKJBrQ4Bwosnn377ebU3k0MybqRZUR00ycSI=; b=3S4aMXajGvWOb3MVvlsS8KD1uTC6+EIi5U7VkrHwxO7akDYDpQ0S0GVnVwmEdhP/8r6pYx mFt0b9yfB2vnQOk8GDN5w619yM9kFwU7PtZmc2/qW9YamRz7mOoEEz+uPSkBFGFZqWNrBh 3769/KMa2ARRMJUKtTxP/p/vyd4lD/c= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1688038317; a=rsa-sha256; cv=none; b=rx4CJ+OLTOd0R9aMj5OuOvJzmzmFJGwRxn8Rt45fAvC75zPZimmsfQC7xegnFzPX04Vfy9 xJRHjxuuXh1bZt3XI4BVlmSx0IYvFl+7yM4TWBlnN16CTZciVKAzhRhNM6wdkp9TJ0W8Jg cWmtmmJJGexRwXxNP194EsrwMa7IjoE= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=none; spf=pass (imf17.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com; dmarc=pass (policy=none) header.from=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id C511DC14; Thu, 29 Jun 2023 04:32:39 -0700 (PDT) Received: from [10.1.27.40] (C02Z41KALVDN.cambridge.arm.com [10.1.27.40]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 45CFC3F64C; Thu, 29 Jun 2023 04:31:53 -0700 (PDT) Message-ID: <09ef8f66-6697-d803-89ac-228a6fe2e604@arm.com> Date: Thu, 29 Jun 2023 12:31:52 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: Re: [PATCH v1 08/10] mm: Kconfig hooks to determine max anon folio allocation order To: Yang Shi Cc: Andrew Morton , "Matthew Wilcox (Oracle)" , "Kirill A. Shutemov" , Yin Fengwei , David Hildenbrand , Yu Zhao , Catalin Marinas , Will Deacon , Geert Uytterhoeven , Christian Borntraeger , Sven Schnelle , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , "H. Peter Anvin" , linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-alpha@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-s390@vger.kernel.org References: <20230626171430.3167004-1-ryan.roberts@arm.com> <20230626171430.3167004-9-ryan.roberts@arm.com> From: Ryan Roberts In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 4BE4340019 X-Rspam-User: X-Stat-Signature: 6j4uj5hj3u7kjx6prus17yi51sto1kx4 X-Rspamd-Server: rspam03 X-HE-Tag: 1688038317-248634 X-HE-Meta: U2FsdGVkX19aG9PIM9OJG6IIRaBUlwFu7iX5sd5JSTA67ZWLl2mmKC/AtUBniijUbO6cnJbm1SuMd3QNHe8/lyj1AgrEaZTUQCcMJwORomGmGN+S6nXPvPhW4QYnr9pTzccibhiFH2wMiORVESWNDnqsRc/BU6pbd0qPksWraWL/rr+GFokzVzhltWW5VUjC+pSJpkD/i0QgqFviFl4jVpQy49GqD4WnHf5z79otxaNqlcvo4LExehzxYTN0FSZnKm8podJ1Jh4W5wga9ULdrIjTGdW2rkfMDP9V3c2tj7XGILkG41mhA1aDBXaWWzlf3xVG0K8vOQoCddySp1fsz+R0fstucpGmuXWVZRqMfQ9oA031TK9XpiaRQhF98islbRHvejh0m3QRMybJ0gJdXlHhzgrorPTJL2Rjpo4QHBJBGwo28DNmUDE9XJ/44qhJJnuyapzcWsYyIgOMSxX4cXlHPBg52+vkShZze8Zf4HiUm85Wqx+oeZNYikkqlGDGCnKbnJUnocdHdv1XW5iQSdKfN2d5epdeVrP5Y4QZV4TwMOa9EkWxJlehntBRJYiBDU3q8LyXY445wW9d4k/pU4BxMDDv4R6XKoJM2AvlN7lycE8UyVgX8iaq1p/4KBcF82MvDAtY9ZB/6nbTU65lVuNyv9tLm5YsP8EVfxSyp8wFpmU6mWC4JJy+pRTPyJsaJuCf9lx8pjhw8oanx4iBuH4msNpCijZp87o4patOIDNDRUh1WexgpS/Wxoqa//FP85ADYcmdm3+R2wKmkCLXsqfziWQWInL4uEr8ijnvc8KdQ5hzj2toUuK/wAMVa4j9DmOEU8CmZg8Yft9naoS43KHsjvQuPDJP8AsC+QXMkdbudsUgU3IfYf4r+A19mveI7ANjxsLdWw3P7OQ3h1C8YvxFr0Lv5kNLqpXAA6LVzITjTF4xUVm9YPpL5ow6UvlF4rIuQw8GsaBg04zAyh9 JPVw6Pxl 4qf/9wLxtOc4R/ep2WdZ6V4NbGGEiWEO9WTz+tnfo63LpjPy/eHTCFFH1I3++Oicqd68+1h4hlcYDJ9tlc1OSjM2d0WCoDEo42iXlOu/KgEuuZP5pMAno1RTkXkrpBnhvZtw5AxYeHAHSbsPEGopl8YGJx7nJHMb0NtiX2++M5aYGOCk= 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: On 29/06/2023 02:38, Yang Shi wrote: > On Mon, Jun 26, 2023 at 10:15 AM Ryan Roberts wrote: >> >> For variable-order anonymous folios, we need to determine the order that >> we will allocate. From a SW perspective, the higher the order we >> allocate, the less overhead we will have; fewer faults, fewer folios in >> lists, etc. But of course there will also be more memory wastage as the >> order increases. >> >> From a HW perspective, there are memory block sizes that can be >> beneficial to reducing TLB pressure. arm64, for example, has the ability >> to map "contpte" sized chunks (64K for a 4K base page, 2M for 16K and >> 64K base pages) such that one of these chunks only uses a single TLB >> entry. >> >> So we let the architecture specify the order of the maximally beneficial >> mapping unit when PTE-mapped. Furthermore, because in some cases, this >> order may be quite big (and therefore potentially wasteful of memory), >> allow the arch to specify 2 values; One is the max order for a mapping >> that _would not_ use THP if all size and alignment constraints were met, >> and the other is the max order for a mapping that _would_ use THP if all >> those constraints were met. >> >> Implement this with Kconfig by introducing some new options to allow the >> architecture to declare that it supports large anonymous folios along >> with these 2 preferred max order values. Then introduce a user-facing >> option, LARGE_ANON_FOLIO, which defaults to disabled and can only be >> enabled if the architecture has declared its support. When disabled, it >> forces the max order values, LARGE_ANON_FOLIO_NOTHP_ORDER_MAX and >> LARGE_ANON_FOLIO_THP_ORDER_MAX to 0, meaning only a single page is ever >> allocated. >> >> Signed-off-by: Ryan Roberts >> --- >> mm/Kconfig | 39 +++++++++++++++++++++++++++++++++++++++ >> mm/memory.c | 8 ++++++++ >> 2 files changed, 47 insertions(+) >> >> diff --git a/mm/Kconfig b/mm/Kconfig >> index 7672a22647b4..f4ba48c37b75 100644 >> --- a/mm/Kconfig >> +++ b/mm/Kconfig >> @@ -1208,4 +1208,43 @@ config PER_VMA_LOCK >> >> source "mm/damon/Kconfig" >> >> +config ARCH_SUPPORTS_LARGE_ANON_FOLIO >> + def_bool n >> + help >> + An arch should select this symbol if wants to allow LARGE_ANON_FOLIO >> + to be enabled. It must also set the following integer values: >> + - ARCH_LARGE_ANON_FOLIO_NOTHP_ORDER_MAX >> + - ARCH_LARGE_ANON_FOLIO_THP_ORDER_MAX >> + >> +config ARCH_LARGE_ANON_FOLIO_NOTHP_ORDER_MAX >> + int >> + help >> + The maximum size of folio to allocate for an anonymous VMA PTE-mapping >> + that does not have the MADV_HUGEPAGE hint set. >> + >> +config ARCH_LARGE_ANON_FOLIO_THP_ORDER_MAX >> + int >> + help >> + The maximum size of folio to allocate for an anonymous VMA PTE-mapping >> + that has the MADV_HUGEPAGE hint set. >> + >> +config LARGE_ANON_FOLIO >> + bool "Allocate large folios for anonymous memory" >> + depends on ARCH_SUPPORTS_LARGE_ANON_FOLIO >> + default n >> + help >> + Use large (bigger than order-0) folios to back anonymous memory where >> + possible. This reduces the number of page faults, as well as other >> + per-page overheads to improve performance for many workloads. >> + >> +config LARGE_ANON_FOLIO_NOTHP_ORDER_MAX >> + int >> + default 0 if !LARGE_ANON_FOLIO >> + default ARCH_LARGE_ANON_FOLIO_NOTHP_ORDER_MAX >> + >> +config LARGE_ANON_FOLIO_THP_ORDER_MAX >> + int >> + default 0 if !LARGE_ANON_FOLIO >> + default ARCH_LARGE_ANON_FOLIO_THP_ORDER_MAX >> + > > IMHO I don't think we need all of the new kconfigs. Ideally the large > anon folios could be supported by all arches, although some of them > may not benefit from larger TLB entries due to lack of hardware > support.t > > For now with a minimum implementation, I think you could define a > macro or a function that returns the hardware preferred order. Thanks for the feedback - that aligns with what Yu Zhao suggested. I'm implementing it for v2. Thanks, Ryan > >> endmenu >> diff --git a/mm/memory.c b/mm/memory.c >> index 9165ed1b9fc2..a8f7e2b28d7a 100644 >> --- a/mm/memory.c >> +++ b/mm/memory.c >> @@ -3153,6 +3153,14 @@ static struct folio *try_vma_alloc_movable_folio(struct vm_area_struct *vma, >> return vma_alloc_movable_folio(vma, vaddr, 0, zeroed); >> } >> >> +static inline int max_anon_folio_order(struct vm_area_struct *vma) >> +{ >> + if (hugepage_vma_check(vma, vma->vm_flags, false, true, true)) >> + return CONFIG_LARGE_ANON_FOLIO_THP_ORDER_MAX; >> + else >> + return CONFIG_LARGE_ANON_FOLIO_NOTHP_ORDER_MAX; >> +} >> + >> /* >> * Handle write page faults for pages that can be reused in the current vma >> * >> -- >> 2.25.1 >> >>