On 15 Apr 2026, at 5:21, Baolin Wang wrote: > On 4/15/26 4:00 PM, David Hildenbrand (Arm) wrote: >> On 4/15/26 08:36, Baolin Wang wrote: >>> >>> >>> On 4/15/26 2:25 AM, Zi Yan wrote: >>>> On 14 Apr 2026, at 14:14, David Hildenbrand (Arm) wrote: >>>> >>>>> >>>>> Yeah, it would be better if we could avoid it. But the dependency on the >>>>> global toggle as it is today is a bit weird. >>>>> >>>>> >>>>> I don't think there is other interaction with FS and the global toggle >>>>> besides this and the one you are adjusting, right? >>>>> >>> >>> I'm afraid not. Please also consider the per-size mTHP interfaces. It's >>> possible that hugepage_global_enabled() returns false, but >>> hugepages-2048kB/enabled is set to "always", which would still allow >>> khugepaged to collapse folios. > > My comments are in reply to Zi’s comment: > > "I think hugepage_global_enabled() should be enough to decide whether > khugepaged should run or not. " > > I’m concerned that only relying on hugepage_global_enabled() to decide > whether khugepaged should run would cause a regression for anonymous and > shmem memory collapse, as it ignores per-size mTHP configuration. > >> The question is really which semantics we want. >> >> Right now, there is no way to disable khugepaged for anon pages, to just >> get them during page faults. > > Right. > >> And we are now talking about the same problem for FS: to only get them >> during page faults (like we did so far without CONFIG_READ_ONLY_THP_FOR_FS). > > OK. I’m fine with using hugepage_global_enabled() to determine whether > khugepaged scans file folios. > > My concern is that for anonymous memory and shmem, the per-size mTHP settings > should be considered.
OK, I misunderstood the meaning of hugepage_global_enabled(), since per-size mTHP settings could also enable khugepaged if PMD_SIZE is set. I will take willy’s original suggestion and make khugepaged on if the global setting is enabled. The below is the new version of this patch. I moved anon pmd huge page code to a separate anon_hpage_pmd_enabled() like shmem_hpage_pmd_enabled() and cleaned up the comment. Let me know your thoughts. Thanks. >From 92b92f2b2ab41c70b41dd304ce648786ee6a1603 Mon Sep 17 00:00:00 2001 From: Zi Yan <[email protected]> Date: Wed, 15 Apr 2026 13:52:50 -0400 Subject: [PATCH] mm/khugepaged: remove READ_ONLY_THP_FOR_FS check in hugepage_pmd_enabled() Remove READ_ONLY_THP_FOR_FS and khugepaged for file-backed pmd-sized hugepages are enabled by the global transparent hugepage control. khugepaged can still be enabled by per-size control for anon and shmem when the global control is off. Signed-off-by: Zi Yan <[email protected]> --- mm/khugepaged.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index b8452dbdb043..586d27ce896e 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -406,18 +406,8 @@ static inline int collapse_test_exit_or_disable(struct mm_struct *mm) mm_flags_test(MMF_DISABLE_THP_COMPLETELY, mm); } -static bool hugepage_pmd_enabled(void) +static inline bool anon_hpage_pmd_enabled() { - /* - * We cover the anon, shmem and the file-backed case here; file-backed - * hugepages, when configured in, are determined by the global control. - * Anon pmd-sized hugepages are determined by the pmd-size control. - * Shmem pmd-sized hugepages are also determined by its pmd-size control, - * except when the global shmem_huge is set to SHMEM_HUGE_DENY. - */ - if (IS_ENABLED(CONFIG_READ_ONLY_THP_FOR_FS) && - hugepage_global_enabled()) - return true; if (test_bit(PMD_ORDER, &huge_anon_orders_always)) return true; if (test_bit(PMD_ORDER, &huge_anon_orders_madvise)) @@ -425,6 +415,20 @@ static bool hugepage_pmd_enabled(void) if (test_bit(PMD_ORDER, &huge_anon_orders_inherit) && hugepage_global_enabled()) return true; + return false; +} + +static bool hugepage_pmd_enabled(void) +{ + /* + * Anon, shmem and file-backed pmd-sized hugepages are all determined by + * the global control. If the global control is off, anon and shmem + * pmd-sized hugepages are also determined by its per-size control. + */ + if (hugepage_global_enabled()) + return true; + if (anon_hpage_pmd_enabled()) + return true; if (IS_ENABLED(CONFIG_SHMEM) && shmem_hpage_pmd_enabled()) return true; return false; -- 2.43.0 Best Regards, Yan, Zi

