public inbox for linux-mm@kvack.org
 help / color / mirror / Atom feed
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()



  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