From: Yu Zhao <yuzhao@google.com>
To: Ryan Roberts <ryan.roberts@arm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Matthew Wilcox <willy@infradead.org>,
"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
Yin Fengwei <fengwei.yin@intel.com>,
David Hildenbrand <david@redhat.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>,
Anshuman Khandual <anshuman.khandual@arm.com>,
Yang Shi <shy828301@gmail.com>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH v2 5/5] arm64: mm: Override arch_wants_pte_order()
Date: Mon, 3 Jul 2023 14:02:13 -0600 [thread overview]
Message-ID: <CAOUHufa_FkK0BNhpfMhexFetwhbugjVcKOBKpu4aT-0n8NeAxg@mail.gmail.com> (raw)
In-Reply-To: <20230703135330.1865927-6-ryan.roberts@arm.com>
On Mon, Jul 3, 2023 at 7:53 AM Ryan Roberts <ryan.roberts@arm.com> wrote:
>
> Define an arch-specific override of arch_wants_pte_order() so that when
> FLEXIBLE_THP is enabled, large folios will be allocated for anonymous
> memory with an order that is compatible with arm64's contpte mappings.
>
> arch_wants_pte_order() returns an order according to the following
> policy: For the unhinted case, when THP is not requested for the vma,
> don't allow anything bigger than 64K. This means we don't waste too much
> memory. Additionally, for 4K pages this is the contpte size, and for
> 16K, this is (usually) the HPA size when the uarch feature is
> implemented. For the hinted case, when THP is requested for the vma,
> allow the contpte size for all page size configurations; 64K for 4K, 2M
> for 16K and 2M for 64K.
>
> Additionally, the THP and NOTHP order constants are defined using
> Kconfig so it is possible to override them at build time.
>
> Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
> ---
> arch/arm64/Kconfig | 12 ++++++++++++
> arch/arm64/include/asm/pgtable.h | 4 ++++
> arch/arm64/mm/mmu.c | 8 ++++++++
> 3 files changed, 24 insertions(+)
>
> diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
> index 343e1e1cae10..689c5bf13dc1 100644
> --- a/arch/arm64/Kconfig
> +++ b/arch/arm64/Kconfig
> @@ -281,6 +281,18 @@ config ARM64_CONT_PMD_SHIFT
> default 5 if ARM64_16K_PAGES
> default 4
>
> +config ARM64_PTE_ORDER_NOTHP
> + int
> + default 0 if ARM64_64K_PAGES # 64K (1 page)
> + default 2 if ARM64_16K_PAGES # 64K (4 pages; benefits from HPA where HW supports it)
> + default 4 if ARM64_4K_PAGES # 64K (16 pages; eligible for contpte-mapping)
> +
> +config ARM64_PTE_ORDER_THP
> + int
> + default 5 if ARM64_64K_PAGES # 2M (32 pages; eligible for contpte-mapping)
> + default 7 if ARM64_16K_PAGES # 2M (128 pages; eligible for contpte-mapping)
> + default 4 if ARM64_4K_PAGES # 64K (16 pages; eligible for contpte-mapping)
> +
> config ARCH_MMAP_RND_BITS_MIN
> default 14 if ARM64_64K_PAGES
> default 16 if ARM64_16K_PAGES
> diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
> index 6fd012663a01..8463d5f9f307 100644
> --- a/arch/arm64/include/asm/pgtable.h
> +++ b/arch/arm64/include/asm/pgtable.h
> @@ -1117,6 +1117,10 @@ extern pte_t ptep_modify_prot_start(struct vm_area_struct *vma,
> extern void ptep_modify_prot_commit(struct vm_area_struct *vma,
> unsigned long addr, pte_t *ptep,
> pte_t old_pte, pte_t new_pte);
> +
> +#define arch_wants_pte_order arch_wants_pte_order
> +extern int arch_wants_pte_order(struct vm_area_struct *vma);
> +
> #endif /* !__ASSEMBLY__ */
>
> #endif /* __ASM_PGTABLE_H */
> diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> index af6bc8403ee4..8556c4a9b507 100644
> --- a/arch/arm64/mm/mmu.c
> +++ b/arch/arm64/mm/mmu.c
> @@ -1481,3 +1481,11 @@ void ptep_modify_prot_commit(struct vm_area_struct *vma, unsigned long addr, pte
> {
> set_pte_at(vma->vm_mm, addr, ptep, pte);
> }
> +
> +int arch_wants_pte_order(struct vm_area_struct *vma)
> +{
> + if (hugepage_vma_check(vma, vma->vm_flags, false, true, true))
> + return CONFIG_ARM64_PTE_ORDER_THP;
> + else
> + return CONFIG_ARM64_PTE_ORDER_NOTHP;
> +}
I don't really like this because it's a mix of h/w preference and s/w
policy -- from my POV, it's supposed to be the former only. The policy
part should be left to core MM (arch-independent).
That being said, no objection if ARM MM people think this is really
what they want.
next prev parent reply other threads:[~2023-07-03 20:02 UTC|newest]
Thread overview: 84+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-03 13:53 [PATCH v2 0/5] variable-order, large folios for anonymous memory Ryan Roberts
2023-07-03 13:53 ` [PATCH v2 1/5] mm: Non-pmd-mappable, large folios for folio_add_new_anon_rmap() Ryan Roberts
2023-07-03 19:05 ` Yu Zhao
2023-07-04 2:13 ` Yin, Fengwei
2023-07-04 11:19 ` Ryan Roberts
2023-07-04 2:14 ` Yin, Fengwei
2023-07-03 13:53 ` [PATCH v2 2/5] mm: Allow deferred splitting of arbitrary large anon folios Ryan Roberts
2023-07-07 8:21 ` Huang, Ying
2023-07-07 9:42 ` Ryan Roberts
2023-07-10 5:37 ` Huang, Ying
2023-07-10 8:29 ` Ryan Roberts
2023-07-10 9:01 ` Huang, Ying
2023-07-10 9:39 ` Ryan Roberts
2023-07-11 1:56 ` Huang, Ying
2023-07-03 13:53 ` [PATCH v2 3/5] mm: Default implementation of arch_wants_pte_order() Ryan Roberts
2023-07-03 19:50 ` Yu Zhao
2023-07-04 13:20 ` Ryan Roberts
2023-07-05 2:07 ` Yu Zhao
2023-07-05 9:11 ` Ryan Roberts
2023-07-05 17:24 ` Yu Zhao
2023-07-05 18:01 ` Ryan Roberts
2023-07-06 19:33 ` Matthew Wilcox
2023-07-07 10:00 ` Ryan Roberts
2023-07-04 2:22 ` Yin, Fengwei
2023-07-04 3:02 ` Yu Zhao
2023-07-04 3:59 ` Yu Zhao
2023-07-04 5:22 ` Yin, Fengwei
2023-07-04 5:42 ` Yu Zhao
2023-07-04 12:36 ` Ryan Roberts
2023-07-04 13:23 ` Ryan Roberts
2023-07-05 1:40 ` Yu Zhao
2023-07-05 1:23 ` Yu Zhao
2023-07-05 2:18 ` Yin Fengwei
2023-07-03 13:53 ` [PATCH v2 4/5] mm: FLEXIBLE_THP for improved performance Ryan Roberts
2023-07-03 15:51 ` kernel test robot
2023-07-03 16:01 ` kernel test robot
2023-07-04 1:35 ` Yu Zhao
2023-07-04 14:08 ` Ryan Roberts
2023-07-04 23:47 ` Yu Zhao
2023-07-04 3:45 ` Yin, Fengwei
2023-07-04 14:20 ` Ryan Roberts
2023-07-04 23:35 ` Yin Fengwei
2023-07-04 23:57 ` Matthew Wilcox
2023-07-05 9:54 ` Ryan Roberts
2023-07-05 12:08 ` Matthew Wilcox
2023-07-07 8:01 ` Huang, Ying
2023-07-07 9:52 ` Ryan Roberts
2023-07-07 11:29 ` David Hildenbrand
2023-07-07 13:57 ` Matthew Wilcox
2023-07-07 14:07 ` David Hildenbrand
2023-07-07 15:13 ` Ryan Roberts
2023-07-07 16:06 ` David Hildenbrand
2023-07-07 16:22 ` Ryan Roberts
2023-07-07 19:06 ` David Hildenbrand
2023-07-10 8:41 ` Ryan Roberts
2023-07-10 3:03 ` Huang, Ying
2023-07-10 8:55 ` Ryan Roberts
2023-07-10 9:18 ` Huang, Ying
2023-07-10 9:25 ` Ryan Roberts
2023-07-11 0:48 ` Huang, Ying
2023-07-10 2:49 ` Huang, Ying
2023-07-03 13:53 ` [PATCH v2 5/5] arm64: mm: Override arch_wants_pte_order() Ryan Roberts
2023-07-03 20:02 ` Yu Zhao [this message]
2023-07-04 2:18 ` [PATCH v2 0/5] variable-order, large folios for anonymous memory Yu Zhao
2023-07-04 6:22 ` Yin, Fengwei
2023-07-04 7:11 ` Yu Zhao
2023-07-04 15:36 ` Ryan Roberts
2023-07-04 23:52 ` Yin Fengwei
2023-07-05 0:21 ` Yu Zhao
2023-07-05 10:16 ` Ryan Roberts
2023-07-05 19:00 ` Yu Zhao
2023-07-05 19:38 ` David Hildenbrand
2023-07-06 8:02 ` Ryan Roberts
2023-07-07 11:40 ` David Hildenbrand
2023-07-07 13:12 ` Matthew Wilcox
2023-07-07 13:24 ` David Hildenbrand
2023-07-10 10:07 ` Ryan Roberts
2023-07-10 16:57 ` Matthew Wilcox
2023-07-10 16:53 ` Zi Yan
2023-07-19 15:49 ` Ryan Roberts
2023-07-19 16:05 ` Zi Yan
2023-07-19 18:37 ` Ryan Roberts
2023-07-11 21:11 ` Luis Chamberlain
2023-07-11 21:59 ` Matthew Wilcox
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAOUHufa_FkK0BNhpfMhexFetwhbugjVcKOBKpu4aT-0n8NeAxg@mail.gmail.com \
--to=yuzhao@google.com \
--cc=akpm@linux-foundation.org \
--cc=anshuman.khandual@arm.com \
--cc=catalin.marinas@arm.com \
--cc=david@redhat.com \
--cc=fengwei.yin@intel.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ryan.roberts@arm.com \
--cc=shy828301@gmail.com \
--cc=will@kernel.org \
--cc=willy@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox