On 05/08/2025 13:55, David Hildenbrand wrote: > On 05.08.25 14:46, Usama Arif wrote: >> >> >> On 05/08/2025 13:39, David Hildenbrand wrote: >>>> +FIXTURE_SETUP(prctl_thp_disable_completely) >>>> +{ >>>> + if (!thp_available()) >>>> + SKIP(return, "Transparent Hugepages not available\n"); >>>> + >>>> + self->pmdsize = read_pmd_pagesize(); >>>> + if (!self->pmdsize) >>>> + SKIP(return, "Unable to read PMD size\n"); >>>> + >>>> + thp_save_settings(); >>>> + thp_read_settings(&self->settings); >>>> + self->settings.thp_enabled = variant->thp_policy; >>>> + self->settings.hugepages[sz2ord(self->pmdsize, getpagesize())].enabled = THP_INHERIT; >>> >>> Oh, one more thing: should we set all other sizes also to THP_INHERIT or (for simplicity) THP_NEVER? >>> >> >> hmm do we need to? I am hoping that we should always get the PMD size THP no matter what the policy >> for others is in the scenario we have? > > Assuming 64K is set to "always", couldn't it mislead us in the "madvise"/"never" test cases in some scenarios? > I tried it with 64K to always and seems to be ok. check_huge_anon checks AnonHugepages from smaps which only indicates the pmd mapped THPs only. So I think should be ok? Happy to set them to never and the change is probably something simple like below (untested), but just trying to understand better the need for it. diff --git a/tools/testing/selftests/mm/prctl_thp_disable.c b/tools/testing/selftests/mm/prctl_thp_disable.c index 4b072d4ecc30..ee692c397835 100644 --- a/tools/testing/selftests/mm/prctl_thp_disable.c +++ b/tools/testing/selftests/mm/prctl_thp_disable.c @@ -142,6 +142,8 @@ FIXTURE_SETUP(prctl_thp_disable_completely) thp_save_settings(); thp_read_settings(&self->settings); self->settings.thp_enabled = variant->thp_policy; + for (int i = 1; i < sz2ord(self->pmdsize, getpagesize()); i++) + self->settings.hugepages[i].enabled = THP_INHERIT; self->settings.hugepages[sz2ord(self->pmdsize, getpagesize())].enabled = THP_INHERIT; thp_write_settings(&self->settings); } @@ -244,6 +246,8 @@ FIXTURE_SETUP(prctl_thp_disable_except_madvise) thp_save_settings(); thp_read_settings(&self->settings); self->settings.thp_enabled = variant->thp_policy; + for (int i = 1; i < sz2ord(self->pmdsize, getpagesize()); i++) + self->settings.hugepages[i].enabled = THP_INHERIT; self->settings.hugepages[sz2ord(self->pmdsize, getpagesize())].enabled = THP_INHERIT; thp_write_settings(&self->settings); } [root@vm7 vmuser]# echo always > /sys/kernel/mm/transparent_hugepage/hugepages-64kB/enabled [root@vm7 vmuser]# ./prctl_thp_disable TAP version 13 1..12 # Starting 12 tests from 6 test cases. # RUN prctl_thp_disable_completely.never.nofork ... # OK prctl_thp_disable_completely.never.nofork ok 1 prctl_thp_disable_completely.never.nofork # RUN prctl_thp_disable_completely.never.fork ... # OK prctl_thp_disable_completely.never.fork ok 2 prctl_thp_disable_completely.never.fork # RUN prctl_thp_disable_completely.madvise.nofork ... # OK prctl_thp_disable_completely.madvise.nofork ok 3 prctl_thp_disable_completely.madvise.nofork # RUN prctl_thp_disable_completely.madvise.fork ... # OK prctl_thp_disable_completely.madvise.fork ok 4 prctl_thp_disable_completely.madvise.fork # RUN prctl_thp_disable_completely.always.nofork ... # OK prctl_thp_disable_completely.always.nofork ok 5 prctl_thp_disable_completely.always.nofork # RUN prctl_thp_disable_completely.always.fork ... # OK prctl_thp_disable_completely.always.fork ok 6 prctl_thp_disable_completely.always.fork # RUN prctl_thp_disable_except_madvise.never.nofork ... # OK prctl_thp_disable_except_madvise.never.nofork ok 7 prctl_thp_disable_except_madvise.never.nofork # RUN prctl_thp_disable_except_madvise.never.fork ... # OK prctl_thp_disable_except_madvise.never.fork ok 8 prctl_thp_disable_except_madvise.never.fork # RUN prctl_thp_disable_except_madvise.madvise.nofork ... # OK prctl_thp_disable_except_madvise.madvise.nofork ok 9 prctl_thp_disable_except_madvise.madvise.nofork # RUN prctl_thp_disable_except_madvise.madvise.fork ... # OK prctl_thp_disable_except_madvise.madvise.fork ok 10 prctl_thp_disable_except_madvise.madvise.fork # RUN prctl_thp_disable_except_madvise.always.nofork ... # OK prctl_thp_disable_except_madvise.always.nofork ok 11 prctl_thp_disable_except_madvise.always.nofork # RUN prctl_thp_disable_except_madvise.always.fork ... # OK prctl_thp_disable_except_madvise.always.fork ok 12 prctl_thp_disable_except_madvise.always.fork # PASSED: 12 / 12 tests passed. # Totals: pass:12 fail:0 xfail:0 xpass:0 skip:0 error:0