Re: [PATCH v3] mm/readahead: fix large folio support in async readahead

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Dec 6, 2024 at 4:31 PM Yafang Shao <laoar.shao@xxxxxxxxx> wrote:
>
> When testing large folio support with XFS on our servers, we observed that
> only a few large folios are mapped when reading large files via mmap.
> After a thorough analysis, I identified it was caused by the
> `/sys/block/*/queue/read_ahead_kb` setting.  On our test servers, this
> parameter is set to 128KB.  After I tune it to 2MB, the large folio can
> work as expected.  However, I believe the large folio behavior should not
> be dependent on the value of read_ahead_kb.  It would be more robust if
> the kernel can automatically adopt to it.
>
> With /sys/block/*/queue/read_ahead_kb set to 128KB and performing a
> sequential read on a 1GB file using MADV_HUGEPAGE, the differences in
> /proc/meminfo are as follows:
>
> - before this patch
>   FileHugePages:     18432 kB
>   FilePmdMapped:      4096 kB
>
> - after this patch
>   FileHugePages:   1067008 kB
>   FilePmdMapped:   1048576 kB
>
> This shows that after applying the patch, the entire 1GB file is mapped to
> huge pages.  The stable list is CCed, as without this patch, large folios
> don't function optimally in the readahead path.
>
> It's worth noting that if read_ahead_kb is set to a larger value that
> isn't aligned with huge page sizes (e.g., 4MB + 128KB), it may still fail
> to map to hugepages.
>
> Link: https://lkml.kernel.org/r/20241108141710.9721-1-laoar.shao@xxxxxxxxx
> Fixes: 4687fdbb805a ("mm/filemap: Support VM_HUGEPAGE for file mappings")
> Signed-off-by: Yafang Shao <laoar.shao@xxxxxxxxx>
> Tested-by: kernel test robot <oliver.sang@xxxxxxxxx>
> Cc: Matthew Wilcox <willy@xxxxxxxxxxxxx>
> Cc: David Hildenbrand <david@xxxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx>
> ---
>  mm/readahead.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> Changes:
> v2->v3:
> - Fix the softlockup reported by kernel test robot
>   https://lore.kernel.org/linux-fsdevel/202411292300.61edbd37-lkp@xxxxxxxxx/
>
> v1->v2: https://lore.kernel.org/linux-mm/20241108141710.9721-1-laoar.shao@xxxxxxxxx/
> - Drop the alignment (Matthew)
> - Improve commit log (Andrew)
>
> RFC->v1: https://lore.kernel.org/linux-mm/20241106092114.8408-1-laoar.shao@xxxxxxxxx/
> - Simplify the code as suggested by Matthew
>
> RFC: https://lore.kernel.org/linux-mm/20241104143015.34684-1-laoar.shao@xxxxxxxxx/
>
> diff --git a/mm/readahead.c b/mm/readahead.c
> index 3dc6c7a128dd..1dc3cffd4843 100644
> --- a/mm/readahead.c
> +++ b/mm/readahead.c
> @@ -642,7 +642,11 @@ void page_cache_async_ra(struct readahead_control *ractl,
>                         1UL << order);
>         if (index == expected) {
>                 ra->start += ra->size;
> -               ra->size = get_next_ra_size(ra, max_pages);
> +               /*
> +                * In the case of MADV_HUGEPAGE, the actual size might exceed
> +                * the readahead window.
> +                */
> +               ra->size = max(ra->size, get_next_ra_size(ra, max_pages));
>                 ra->async_size = ra->size;
>                 goto readit;
>         }
> --
> 2.43.5
>

Andrew, could you please drop the previous version and apply this
updated one instead?

-- 
Regards
Yafang





[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux