The Linux Kernel Mailing List
 help / color / mirror / Atom feed
  • [parent not found: <7e42faea-9f55-4722-a426-94be7fc3a49b@redhat.com>]
  • * Re: [PATCH v5 11/14] selftests/mm: remove READ_ONLY_THP_FOR_FS in khugepaged
           [not found] ` <20260429153538.727855-7-ziy@nvidia.com>
           [not found]   ` <52285e2c-af42-4c0d-9926-017f80b6614c@redhat.com>
           [not found]   ` <7e42faea-9f55-4722-a426-94be7fc3a49b@redhat.com>
    @ 2026-05-07  7:24   ` Zi Yan
           [not found]   ` <B1D68BA2-11D2-4053-B715-F7704ED784DA@nvidia.com>
      2026-05-08 20:06   ` David Hildenbrand (Arm)
      4 siblings, 0 replies; 23+ messages in thread
    From: Zi Yan @ 2026-05-07  7:24 UTC (permalink / raw)
      To: Andrew Morton, Nico Pache
      Cc: David Hildenbrand, Matthew Wilcox (Oracle), Song Liu, Chris Mason,
    	David Sterba, Alexander Viro, Christian Brauner, Jan Kara,
    	Lorenzo Stoakes, Zi Yan, Baolin Wang, Liam R. Howlett,
    	Ryan Roberts, Dev Jain, Barry Song, Lance Yang, Vlastimil Babka,
    	Mike Rapoport, Suren Baghdasaryan, Michal Hocko, Shuah Khan,
    	linux-btrfs, linux-kernel, linux-fsdevel, linux-mm,
    	linux-kselftest
    
    On 29 Apr 2026, at 23:35, Zi Yan wrote:
    
    > Change the requirement to a file system with large folio support and the
    > supported order needs to include PMD_ORDER.
    >
    > Also add tests of opening a file with read write permission and populating
    > folios with writes. Reuse the XFS image from split_huge_page_test.
    >
    > Signed-off-by: Zi Yan <ziy@nvidia.com>
    > ---
    >  tools/testing/selftests/mm/khugepaged.c   | 131 +++++++++++++++-------
    >  tools/testing/selftests/mm/run_vmtests.sh |  12 +-
    >  2 files changed, 102 insertions(+), 41 deletions(-)
    >
    Hi Andrew,
    
    Here is the second fixup to this patch. It addresses an issue that
    [SKIP] is always printed, if XFS is not present, even if khugepaged
    never runs, discovered by Nico. Thanks.
    
    From eb9a5c25434e3882423f621dc46281156eac843a Mon Sep 17 00:00:00 2001
    From: Zi Yan <ziy@nvidia.com>
    Date: Thu, 7 May 2026 03:17:51 -0400
    Subject: [PATCH] fix run_vmtests.sh to only print SKIP when khugepaged is
     selected
    
    Signed-off-by: Zi Yan <ziy@nvidia.com>
    ---
     tools/testing/selftests/mm/run_vmtests.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/tools/testing/selftests/mm/run_vmtests.sh b/tools/testing/selftests/mm/run_vmtests.sh
    index 854c5c3e3a6ae..b73921b2cac02 100755
    --- a/tools/testing/selftests/mm/run_vmtests.sh
    +++ b/tools/testing/selftests/mm/run_vmtests.sh
    @@ -508,7 +508,7 @@ fi
    
     if [ -n "${SPLIT_HUGE_PAGE_TEST_XFS_PATH}" ]; then
     CATEGORY="thp" run_test ./khugepaged all:file ${SPLIT_HUGE_PAGE_TEST_XFS_PATH}
    -else
    +elif test_selected thp; then
     	count_total=$(( count_total + 1 ))
     	count_skip=$(( count_skip + 1 ))
     	echo "[SKIP] ./khugepaged all:file" | tap_prefix
    -- 
    2.53.0
    
    
    
    Best Regards,
    Yan, Zi
    
    ^ permalink raw reply related	[flat|nested] 23+ messages in thread
  • [parent not found: <B1D68BA2-11D2-4053-B715-F7704ED784DA@nvidia.com>]
  • * Re: [PATCH v5 11/14] selftests/mm: remove READ_ONLY_THP_FOR_FS in khugepaged
           [not found] ` <20260429153538.727855-7-ziy@nvidia.com>
                         ` (3 preceding siblings ...)
           [not found]   ` <B1D68BA2-11D2-4053-B715-F7704ED784DA@nvidia.com>
    @ 2026-05-08 20:06   ` David Hildenbrand (Arm)
      4 siblings, 0 replies; 23+ messages in thread
    From: David Hildenbrand (Arm) @ 2026-05-08 20:06 UTC (permalink / raw)
      To: Zi Yan, Andrew Morton, Matthew Wilcox (Oracle), Song Liu
      Cc: Chris Mason, David Sterba, Alexander Viro, Christian Brauner,
    	Jan Kara, Lorenzo Stoakes, Baolin Wang, Liam R. Howlett,
    	Nico Pache, Ryan Roberts, Dev Jain, Barry Song, Lance Yang,
    	Vlastimil Babka, Mike Rapoport, Suren Baghdasaryan, Michal Hocko,
    	Shuah Khan, linux-btrfs, linux-kernel, linux-fsdevel, linux-mm,
    	linux-kselftest
    
    On 4/29/26 17:35, Zi Yan wrote:
    > Change the requirement to a file system with large folio support and the
    > supported order needs to include PMD_ORDER.
    > 
    > Also add tests of opening a file with read write permission and populating
    > folios with writes. Reuse the XFS image from split_huge_page_test.
    > 
    > Signed-off-by: Zi Yan <ziy@nvidia.com>
    > ---
    >  tools/testing/selftests/mm/khugepaged.c   | 131 +++++++++++++++-------
    >  tools/testing/selftests/mm/run_vmtests.sh |  12 +-
    >  2 files changed, 102 insertions(+), 41 deletions(-)
    > 
    > diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/selftests/mm/khugepaged.c
    > index a6bb9d50363d2..80b913185c643 100644
    > --- a/tools/testing/selftests/mm/khugepaged.c
    > +++ b/tools/testing/selftests/mm/khugepaged.c
    > @@ -49,7 +49,8 @@ struct mem_ops {
    >  	const char *name;
    >  };
    >  
    > -static struct mem_ops *file_ops;
    > +static struct mem_ops *read_only_file_ops;
    > +static struct mem_ops *read_write_file_ops;
    >  static struct mem_ops *anon_ops;
    >  static struct mem_ops *shmem_ops;
    >  
    > @@ -112,7 +113,8 @@ static void restore_settings(int sig)
    >  static void save_settings(void)
    >  {
    >  	printf("Save THP and khugepaged settings...");
    > -	if (file_ops && finfo.type == VMA_FILE)
    > +	if ((read_only_file_ops || read_write_file_ops) &&
    > +	    finfo.type == VMA_FILE)
    >  		thp_set_read_ahead_path(finfo.dev_queue_read_ahead_path);
    >  	thp_save_settings();
    >  
    > @@ -364,11 +366,14 @@ static bool anon_check_huge(void *addr, int nr_hpages)
    >  	return check_huge_anon(addr, nr_hpages, hpage_pmd_size);
    >  }
    >  
    > -static void *file_setup_area(int nr_hpages)
    > +static void *file_setup_area_common(int nr_hpages, bool read_only)
    >  {
    >  	int fd;
    >  	void *p;
    >  	unsigned long size;
    > +	int open_opt = read_only ? O_RDONLY : O_RDWR;
    > +	int mmap_prot = read_only ? PROT_READ : (PROT_READ | PROT_WRITE);
    > +	int mmap_opt = read_only ? MAP_PRIVATE : MAP_SHARED;
    
    Can all be const and read better at the very top of the list.
    
    Why do we go from private->shared depending on "read_only" parameter? I'd assume
    we'd want to test MAP_SHARED for both (read-only + read-write)?
    
    
    >  
    >  	unlink(finfo.path);  /* Cleanup from previous failed tests */
    >  	printf("Creating %s for collapse%s...", finfo.path,
    > @@ -399,14 +404,15 @@ static void *file_setup_area(int nr_hpages)
    >  	munmap(p, size);
    >  	success("OK");
    >  
    > -	printf("Opening %s read only for collapse...", finfo.path);
    > -	finfo.fd = open(finfo.path, O_RDONLY, 777);
    > +	printf("Opening %s %s for collapse...", finfo.path,
    > +	       read_only ? "read only" : "read-write");
    
    "read-only" ?
    
    > +	finfo.fd = open(finfo.path, open_opt, 777);
    >  	if (finfo.fd < 0) {
    >  		perror("open()");
    >  		exit(EXIT_FAILURE);
    >  	}
    > -	p = mmap(BASE_ADDR, size, PROT_READ,
    > -		 MAP_PRIVATE, finfo.fd, 0);
    > +	p = mmap(BASE_ADDR, size, mmap_prot,
    > +		 mmap_opt, finfo.fd, 0);
    
    While at it, can fit that into a single line.
    
    >  	if (p == MAP_FAILED || p != BASE_ADDR) {
    >  		perror("mmap()");
    >  		exit(EXIT_FAILURE);
    > @@ -418,6 +424,16 @@ static void *file_setup_area(int nr_hpages)
    >  	return p;
    >  }
    >  
    > +static void *file_setup_read_only_area(int nr_hpages)
    > +{
    > +	return file_setup_area_common(nr_hpages, /* read_only= */ true);
    > +}
    > +
    > +static void *file_setup_read_write_area(int nr_hpages)
    > +{
    > +	return file_setup_area_common(nr_hpages, /* read_only= */ false);
    > +}
    > +
    >  static void file_cleanup_area(void *p, unsigned long size)
    >  {
    >  	munmap(p, size);
    > @@ -425,14 +441,25 @@ static void file_cleanup_area(void *p, unsigned long size)
    >  	unlink(finfo.path);
    >  }
    >  
    > -static void file_fault(void *p, unsigned long start, unsigned long end)
    > +static void file_fault_common(void *p, unsigned long start, unsigned long end,
    > +		int madv_ops)
    >  {
    > -	if (madvise(((char *)p) + start, end - start, MADV_POPULATE_READ)) {
    > +	if (madvise(((char *)p) + start, end - start, madv_ops)) {
    >  		perror("madvise(MADV_POPULATE_READ");
    >  		exit(EXIT_FAILURE);
    >  	}
    >  }
    >  
    > +static void file_fault_read(void *p, unsigned long start, unsigned long end)
    > +{
    > +	file_fault_common(p, start, end, MADV_POPULATE_READ);
    
    Do we really want file_fault_common()? I'd say, just inline it. In particular
    avoids checking the madv_ops to figure out the error message ...
    
    > +}
    > +
    > +static void file_fault_write(void *p, unsigned long start, unsigned long end)
    > +{
    > +	file_fault_common(p, start, end, MADV_POPULATE_WRITE);
    > +}
    > +
    >  static bool file_check_huge(void *addr, int nr_hpages)
    >  {
    >  	switch (finfo.type) {
    > @@ -488,10 +515,18 @@ static struct mem_ops __anon_ops = {
    >  	.name = "anon",
    >  };
    
    [...]
    
    >  };
    >  
    > +static bool is_tmpfs(struct mem_ops *ops)
    > +{
    > +	return (ops == &__read_only_file_ops ||
    > +		ops == &__read_write_file_ops) &&
    
    Can't this fit into two lines?
    
    > +	       finfo.type == VMA_SHMEM;
    > +}
    > +
    > +static bool is_anon(struct mem_ops *ops)
    > +{
    > +	return ops == &__anon_ops;
    > +}
    > +
    >  static void __madvise_collapse(const char *msg, char *p, int nr_hpages,
    >  			       struct mem_ops *ops, bool expect)
    >  {
    
    > -
    >  static void alloc_at_fault(void)
    >  {
    >  	struct thp_settings settings = *thp_current_settings();
    > @@ -1097,8 +1142,8 @@ static void usage(void)
    >  	fprintf(stderr, "\t<context>\t: [all|khugepaged|madvise]\n");
    >  	fprintf(stderr, "\t<mem_type>\t: [all|anon|file|shmem]\n");
    >  	fprintf(stderr, "\n\t\"file,all\" mem_type requires [dir] argument\n");
    > -	fprintf(stderr, "\n\t\"file,all\" mem_type requires kernel built with\n");
    > -	fprintf(stderr,	"\tCONFIG_READ_ONLY_THP_FOR_FS=y\n");
    > +	fprintf(stderr, "\n\t\"file,all\" mem_type requires a file system\n");
    > +	fprintf(stderr,	"\twith large folio support (order >= PMD order)\n");
    
    "with PMD-sized large folio support"?
    
    >  	fprintf(stderr, "\n\tif [dir] is a (sub)directory of a tmpfs mount, tmpfs must be\n");
    >  	fprintf(stderr,	"\tmounted with huge=advise option for khugepaged tests to work\n");
    >  	fprintf(stderr,	"\n\tSupported Options:\n");
    > @@ -1154,20 +1199,22 @@ static void parse_test_type(int argc, char **argv)
    >  		usage();
    -- 
    Cheers,
    
    David
    
    ^ permalink raw reply	[flat|nested] 23+ messages in thread
  • [parent not found: <20260429153538.727855-1-ziy@nvidia.com>]
  • [parent not found: <20260429153538.727855-5-ziy@nvidia.com>]
  • [parent not found: <20260429152924.727124-2-ziy@nvidia.com>]
  • [parent not found: <20260429152924.727124-4-ziy@nvidia.com>]
  • [parent not found: <20260429153538.727855-9-ziy@nvidia.com>]
  • [parent not found: <20260429091305.fd5a1c8c986c111527c2b024@linux-foundation.org>]

  • end of thread, other threads:[~2026-05-11  7:19 UTC | newest]
    
    Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
    -- links below jump to the message on this page --
         [not found] <20260429152924.727124-1-ziy@nvidia.com>
         [not found] ` <20260429153538.727855-7-ziy@nvidia.com>
         [not found]   ` <52285e2c-af42-4c0d-9926-017f80b6614c@redhat.com>
    2026-05-06 13:11     ` [PATCH v5 11/14] selftests/mm: remove READ_ONLY_THP_FOR_FS in khugepaged Zi Yan
    2026-05-08 19:51       ` David Hildenbrand (Arm)
         [not found]   ` <7e42faea-9f55-4722-a426-94be7fc3a49b@redhat.com>
    2026-05-06 13:15     ` Zi Yan
    2026-05-07  6:35       ` Nico Pache
    2026-05-07  7:21         ` Zi Yan
    2026-05-07  7:24   ` Zi Yan
         [not found]   ` <B1D68BA2-11D2-4053-B715-F7704ED784DA@nvidia.com>
         [not found]     ` <3BFC4C26-1C97-40AA-B4B7-7472B9768565@nvidia.com>
    2026-05-08 19:48       ` David Hildenbrand (Arm)
    2026-05-08 20:06   ` David Hildenbrand (Arm)
         [not found] ` <20260429153538.727855-1-ziy@nvidia.com>
    2026-05-07 12:48   ` [PATCH v5 05/14] mm: remove READ_ONLY_THP_FOR_FS Kconfig option Lance Yang
    2026-05-08  2:52   ` Wei Yang
    2026-05-08  3:22     ` Lance Yang
         [not found] ` <20260429153538.727855-5-ziy@nvidia.com>
    2026-05-08  7:01   ` [PATCH v5 09/14] mm/truncate: use folio_split() in truncate_inode_partial_folio() Lance Yang
    2026-05-08 19:46   ` David Hildenbrand (Arm)
         [not found] ` <20260429152924.727124-2-ziy@nvidia.com>
    2026-05-07  6:08   ` [PATCH v5 01/14] mm/khugepaged: remove READ_ONLY_THP_FOR_FS check Zi Yan
    2026-05-07  6:57     ` Zi Yan
    2026-05-08 19:39   ` David Hildenbrand (Arm)
         [not found] ` <20260429152924.727124-4-ziy@nvidia.com>
    2026-05-07  4:29   ` [PATCH v5 03/14] mm/huge_memory: remove READ_ONLY_THP_FOR_FS from file_thp_enabled() Lance Yang
    2026-05-08 19:43   ` David Hildenbrand (Arm)
         [not found] ` <20260429153538.727855-9-ziy@nvidia.com>
    2026-05-08  7:46   ` [PATCH v5 13/14] mm/khugepaged: enable clean pagecache folio collapse for writable files Lance Yang
         [not found]   ` <CFECCB44-EEEA-4D3F-A505-3BA2C564C107@nvidia.com>
    2026-05-08 20:09     ` David Hildenbrand (Arm)
    2026-05-08 20:13   ` David Hildenbrand (Arm)
         [not found] ` <20260429091305.fd5a1c8c986c111527c2b024@linux-foundation.org>
    2026-05-09 22:10   ` [PATCH v5 00/14] Remove CONFIG_READ_ONLY_THP_FOR_FS and enable file THP " Zi Yan
    2026-05-11  7:19     ` David Hildenbrand (Arm)
    

    This is a public inbox, see mirroring instructions
    for how to clone and mirror all data and code used for this inbox