From: Luiz Capitulino <luizcap@redhat.com>
To: Mike Rapoport <rppt@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
David Hildenbrand <david@kernel.org>
Cc: Baolin Wang <baolin.wang@linux.alibaba.com>,
Barry Song <baohua@kernel.org>, Dev Jain <dev.jain@arm.com>,
Donet Tom <donettom@linux.ibm.com>,
Jason Gunthorpe <jgg@ziepe.ca>,
John Hubbard <jhubbard@nvidia.com>,
"Liam R. Howlett" <Liam.Howlett@oracle.com>,
Lance Yang <lance.yang@linux.dev>,
Leon Romanovsky <leon@kernel.org>,
Lorenzo Stoakes <ljs@kernel.org>, Mark Brown <broonie@kernel.org>,
Michal Hocko <mhocko@suse.com>, Nico Pache <npache@redhat.com>,
Peter Xu <peterx@redhat.com>, Ryan Roberts <ryan.roberts@arm.com>,
Sarthak Sharma <sarthak.sharma@arm.com>,
Shuah Khan <shuah@kernel.org>,
Suren Baghdasaryan <surenb@google.com>,
Vlastimil Babka <vbabka@kernel.org>, Zi Yan <ziy@nvidia.com>,
linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org,
linux-mm@kvack.org
Subject: Re: [PATCH v2 46/53] selftests/mm: thuge-gen: add setup of HugeTLB pages
Date: Mon, 27 Apr 2026 16:12:09 -0400 [thread overview]
Message-ID: <6188aaac-0792-4ffb-a5a7-739adc9fd516@redhat.com> (raw)
In-Reply-To: <20260418105539.1261536-47-rppt@kernel.org>
On 2026-04-18 06:55, Mike Rapoport wrote:
> From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
>
> thuge-gen skips tests if there are no free huge pages prepared by a wrapper
> script and shm liimts in proc are too low.
>
> Replace custom detection of huge pages with the library functions and add
> setup of HugeTLB pages and shm limits to the test and make sure that the
> original settings are restored on the test exit.
>
> Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
> ---
> tools/testing/selftests/mm/thuge-gen.c | 79 ++++----------------------
> 1 file changed, 11 insertions(+), 68 deletions(-)
>
> diff --git a/tools/testing/selftests/mm/thuge-gen.c b/tools/testing/selftests/mm/thuge-gen.c
> index 1007bc8aa57c..b63d87d72a7d 100644
> --- a/tools/testing/selftests/mm/thuge-gen.c
> +++ b/tools/testing/selftests/mm/thuge-gen.c
> @@ -38,15 +38,6 @@
> #ifndef SHM_HUGE_SHIFT
> #define SHM_HUGE_SHIFT 26
> #endif
> -#ifndef SHM_HUGE_MASK
> -#define SHM_HUGE_MASK 0x3f
> -#endif
> -#ifndef SHM_HUGE_2MB
> -#define SHM_HUGE_2MB (21 << SHM_HUGE_SHIFT)
> -#endif
> -#ifndef SHM_HUGE_1GB
> -#define SHM_HUGE_1GB (30 << SHM_HUGE_SHIFT)
> -#endif
>
> #define NUM_PAGESIZES 5
> #define NUM_PAGES 4
> @@ -64,32 +55,10 @@ int ilog2(unsigned long v)
>
> void show(unsigned long ps)
> {
> - char buf[100];
> -
> if (ps == getpagesize())
> return;
>
> - ksft_print_msg("%luMB: ", ps >> 20);
> -
> - fflush(stdout);
> - snprintf(buf, sizeof buf,
> - "cat /sys/kernel/mm/hugepages/hugepages-%lukB/free_hugepages",
> - ps >> 10);
> - system(buf);
> -}
> -
> -unsigned long read_free(unsigned long ps)
> -{
> - unsigned long val = 0;
> - char buf[100];
> -
> - snprintf(buf, sizeof(buf),
> - "/sys/kernel/mm/hugepages/hugepages-%lukB/free_hugepages",
> - ps >> 10);
> - if (read_sysfs(buf, &val) && ps != getpagesize())
> - ksft_print_msg("missing %s\n", buf);
> -
> - return val;
> + ksft_print_msg("%luMB: %ld\n", ps >> 20, hugetlb_free_pages(ps));
> }
>
> void test_mmap(unsigned long size, unsigned flags)
> @@ -97,14 +66,14 @@ void test_mmap(unsigned long size, unsigned flags)
> char *map;
> unsigned long before, after;
>
> - before = read_free(size);
> + before = hugetlb_free_pages(size);
> map = mmap(NULL, size*NUM_PAGES, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANONYMOUS|MAP_HUGETLB|flags, -1, 0);
> if (map == MAP_FAILED)
> ksft_exit_fail_msg("mmap: %s\n", strerror(errno));
>
> memset(map, 0xff, size*NUM_PAGES);
> - after = read_free(size);
> + after = hugetlb_free_pages(size);
>
> show(size);
> ksft_test_result(size == getpagesize() || (before - after) == NUM_PAGES,
> @@ -121,7 +90,7 @@ void test_shmget(unsigned long size, unsigned flags)
> struct shm_info i;
> char *map;
>
> - before = read_free(size);
> + before = hugetlb_free_pages(size);
> id = shmget(IPC_PRIVATE, size * NUM_PAGES, IPC_CREAT|0600|flags);
> if (id < 0) {
> if (errno == EPERM) {
> @@ -142,7 +111,7 @@ void test_shmget(unsigned long size, unsigned flags)
> shmctl(id, IPC_RMID, NULL);
>
> memset(map, 0xff, size*NUM_PAGES);
> - after = read_free(size);
> + after = hugetlb_free_pages(size);
>
> show(size);
> ksft_test_result(size == getpagesize() || (before - after) == NUM_PAGES,
> @@ -154,43 +123,15 @@ void test_shmget(unsigned long size, unsigned flags)
> void find_pagesizes(void)
> {
> unsigned long largest = getpagesize();
> - unsigned long shmmax_val = 0;
> int i;
> - glob_t g;
>
> - glob("/sys/kernel/mm/hugepages/hugepages-*kB", 0, NULL, &g);
> - assert(g.gl_pathc <= NUM_PAGESIZES);
> - for (i = 0; (i < g.gl_pathc) && (num_page_sizes < NUM_PAGESIZES); i++) {
> - sscanf(g.gl_pathv[i], "/sys/kernel/mm/hugepages/hugepages-%lukB",
> - &page_sizes[num_page_sizes]);
> - page_sizes[num_page_sizes] <<= 10;
> - ksft_print_msg("Found %luMB\n", page_sizes[i] >> 20);
> + num_page_sizes = hugetlb_setup(NUM_PAGES, page_sizes, ARRAY_SIZE(page_sizes));
Are we missing a call to hugetlb_save_settings()?
>
> - if (page_sizes[num_page_sizes] > largest)
> + for (i = 0; i < num_page_sizes; i++)
> + if (page_sizes[i] > largest)
> largest = page_sizes[i];
>
> - if (read_free(page_sizes[num_page_sizes]) >= NUM_PAGES)
> - num_page_sizes++;
> - else
> - ksft_print_msg("SKIP for size %lu MB as not enough huge pages, need %u\n",
> - page_sizes[num_page_sizes] >> 20, NUM_PAGES);
> - }
> - globfree(&g);
> -
> - read_sysfs("/proc/sys/kernel/shmmax", &shmmax_val);
> - if (shmmax_val < NUM_PAGES * largest) {
> - ksft_print_msg("WARNING: shmmax is too small to run this test.\n");
> - ksft_print_msg("Please run the following command to increase shmmax:\n");
> - ksft_print_msg("echo %lu > /proc/sys/kernel/shmmax\n", largest * NUM_PAGES);
> - ksft_exit_skip("Test skipped due to insufficient shmmax value.\n");
> - }
> -
> -#if defined(__x86_64__)
> - if (largest != 1U<<30) {
> - ksft_exit_skip("No GB pages available on x86-64\n"
> - "Please boot with hugepagesz=1G hugepages=%d\n", NUM_PAGES);
> - }
> -#endif
> + shm_limits_prepare(NUM_PAGES * largest);
> }
>
> int main(void)
> @@ -233,3 +174,5 @@ int main(void)
>
> ksft_finished();
> }
> +
> +SHM_LIMITS_RESTORE()
next prev parent reply other threads:[~2026-04-27 20:12 UTC|newest]
Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-18 10:54 [PATCH v2 00/53] make MM selftests more CI friendly Mike Rapoport
2026-04-18 10:54 ` [PATCH v2 01/53] selftests/mm: hugetlb-read-hwpoison: add SIGBUS handler Mike Rapoport
2026-04-18 10:54 ` [PATCH v2 02/53] selftests/mm: khugepaged: enable collapse_single_pte_entry_compound for shmem Mike Rapoport
2026-04-18 10:54 ` [PATCH v2 03/53] selftests/mm: migration: don't assume hupe page is TWOMEG Mike Rapoport
2026-04-24 17:14 ` Luiz Capitulino
2026-04-25 9:19 ` Mike Rapoport
2026-04-18 10:54 ` [PATCH v2 04/53] selftests/mm: run_vmtests.sh: don't gate THP and KSM tests on HAVE_HUGEPAGES Mike Rapoport
2026-04-18 10:54 ` [PATCH v2 05/53] selftests/mm: merge map_hugetlb into hugepage-mmap Mike Rapoport
2026-04-20 9:20 ` Donet Tom
2026-04-21 7:25 ` Mike Rapoport
2026-04-24 17:16 ` Luiz Capitulino
2026-04-25 9:29 ` Mike Rapoport
2026-04-18 10:54 ` [PATCH v2 06/53] selftests/mm: rename hugepage-* tests to hugetlb-* Mike Rapoport
2026-04-22 9:38 ` Sarthak Sharma
2026-04-24 17:20 ` Luiz Capitulino
2026-04-24 17:36 ` Mark Brown
2026-04-24 17:41 ` Luiz Capitulino
2026-04-18 10:54 ` [PATCH v2 07/53] selftests/mm: hugetlb-shm: use kselftest framework Mike Rapoport
2026-04-22 11:20 ` Sarthak Sharma
2026-04-24 9:13 ` Mike Rapoport
2026-04-18 10:54 ` [PATCH v2 08/53] selftests/mm: hugetlb-vmemmap: " Mike Rapoport
2026-04-22 12:28 ` Sarthak Sharma
2026-04-18 10:54 ` [PATCH v2 09/53] selftests/mm: hugetlb-madvise: " Mike Rapoport
2026-04-23 8:25 ` Sarthak Sharma
2026-04-18 10:54 ` [PATCH v2 10/53] selftests/mm: hugetlb_madv_vs_map: " Mike Rapoport
2026-04-20 9:32 ` Donet Tom
2026-04-27 8:49 ` Sarthak Sharma
2026-04-27 9:45 ` Mark Brown
2026-04-27 10:12 ` Sarthak Sharma
2026-04-18 10:54 ` [PATCH v2 11/53] selftests/mm: hugetlb-read-hwpoison: " Mike Rapoport
2026-04-28 6:34 ` Sarthak Sharma
2026-04-18 10:54 ` [PATCH v2 12/53] selftests/mm: khugepaged: group tests in an array Mike Rapoport
2026-04-18 10:54 ` [PATCH v2 13/53] selftests/mm: khugepaged: use ksefltest framework Mike Rapoport
2026-04-28 13:05 ` Sarthak Sharma
2026-04-28 14:32 ` Mike Rapoport
2026-04-18 10:54 ` [PATCH v2 14/53] selftests/mm: ksm_tests: use kselftest framework Mike Rapoport
2026-04-20 17:51 ` Mark Brown
2026-04-18 10:55 ` [PATCH v2 15/53] selftests/mm: protection_keys: use descriptive test names in TAP output Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 16/53] selftests/mm: protection_keys: use kselftest framework Mike Rapoport
2026-04-20 17:54 ` Mark Brown
2026-04-21 8:19 ` Mike Rapoport
2026-04-21 12:59 ` Mark Brown
2026-04-24 9:11 ` Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 17/53] selftests/mm: uffd-stress: " Mike Rapoport
2026-04-20 17:57 ` Mark Brown
2026-04-18 10:55 ` [PATCH v2 18/53] selftests/mm: uffd-unit-tests: " Mike Rapoport
2026-04-20 18:09 ` Mark Brown
2026-04-18 10:55 ` [PATCH v2 19/53] selftests/mm: va_high_addr_switch: " Mike Rapoport
2026-04-20 18:11 ` Mark Brown
2026-04-21 8:33 ` Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 20/53] selftests/mm: add atexit() and signal handlers to thp_settings Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 21/53] selftests/mm: rename thp_settings.[ch] to hugepage_settings.[ch] Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 22/53] selftests/mm: move HugeTLB helpers to hugepage_settings Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 23/53] selftests/mm: hugepage_settings: use unsigned long in detect_hugetlb_page_size Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 24/53] selftests/mm: hugepage_settings: add APIs to get and set nr_hugepages Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 25/53] selftests/mm: hugepage_settings: rename get_free_hugepages() Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 26/53] selftests/mm: hugepage_settings: add APIs for HugeTLB setup and teardown Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 27/53] selftests/mm: move read_file(), read_num() and write_num() to vm_util Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 28/53] selftests/mm: vm_util: add helpers to set and restore shm limits Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 29/53] selftests/mm: compaction_test: use HugeTLB helpers Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 30/53] selftests/mm: cow: add setup of HugeTLB pages Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 31/53] selftests/mm: gup_longterm: " Mike Rapoport
2026-04-27 20:10 ` Luiz Capitulino
2026-04-28 5:32 ` Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 32/53] selftests/mm: gup_test: " Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 33/53] selftests/mm: hmm-tests: " Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 34/53] selftests/mm: hugepage_dio: " Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 35/53] selftests/mm: hugetlb_fault_after_madv: " Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 36/53] selftests/mm: hugetlb-madvise: " Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 37/53] selftests/mm: hugetlb_madv_vs_map: " Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 38/53] selftests/mm: hugetlb-mmap: " Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 39/53] selftests/mm: hugetlb-mremap: " Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 40/53] selftests/mm: hugetlb-shm: " Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 41/53] selftests/mm: hugetlb-soft-online: " Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 42/53] selftests/mm: hugetlb-vmemmap: " Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 43/53] selftests/mm: migration: " Mike Rapoport
2026-04-24 17:11 ` Luiz Capitulino
2026-04-26 10:58 ` Mike Rapoport
2026-04-27 12:56 ` Luiz Capitulino
2026-04-27 16:51 ` Mike Rapoport
2026-04-27 17:19 ` Luiz Capitulino
2026-04-28 5:48 ` Mike Rapoport
2026-04-28 11:57 ` Luiz Capitulino
2026-04-18 10:55 ` [PATCH v2 44/53] selftests/mm: pagemap_ioctl: " Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 45/53] selftests/mm: protection_keys: use library code for HugeTLB setup Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 46/53] selftests/mm: thuge-gen: add setup of HugeTLB pages Mike Rapoport
2026-04-27 20:12 ` Luiz Capitulino [this message]
2026-04-18 10:55 ` [PATCH v2 47/53] selftests/mm: uffd-stress: use hugetlb_save and alloc huge pages Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 48/53] selftests/mm: uffd-unit-tests: add setup of HugeTLB pages Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 49/53] selftests/mm: uffd-wp-mremap: " Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 50/53] selftests/mm: va_high_addr_switch: " Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 51/53] selftests/mm: va_high_addr_switch.sh: drop huge pages setup Mike Rapoport
2026-04-24 17:21 ` Luiz Capitulino
2026-04-18 10:55 ` [PATCH v2 52/53] selftests/mm: run_vmtests.sh: free memory if available memory is low Mike Rapoport
2026-04-18 10:55 ` [PATCH v2 53/53] selftests/mm: run_vmtests.sh: drop detection and setup of HugeTLB Mike Rapoport
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=6188aaac-0792-4ffb-a5a7-739adc9fd516@redhat.com \
--to=luizcap@redhat.com \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=baohua@kernel.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=broonie@kernel.org \
--cc=david@kernel.org \
--cc=dev.jain@arm.com \
--cc=donettom@linux.ibm.com \
--cc=jgg@ziepe.ca \
--cc=jhubbard@nvidia.com \
--cc=lance.yang@linux.dev \
--cc=leon@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=mhocko@suse.com \
--cc=npache@redhat.com \
--cc=peterx@redhat.com \
--cc=rppt@kernel.org \
--cc=ryan.roberts@arm.com \
--cc=sarthak.sharma@arm.com \
--cc=shuah@kernel.org \
--cc=surenb@google.com \
--cc=vbabka@kernel.org \
--cc=ziy@nvidia.com \
/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