Message ID | 20221017175523.2048887-2-zokeefe@google.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Add MADV_COLLAPSE documentation | expand |
Hi Zach, On 10/17/22 19:55, Zach OKeefe wrote: > From: Zach O'Keefe <zokeefe@google.com> > > Since Linux 5.4, Transparent Huge Pages now support both file-backed > memory and shmem memory. Update MADV_HUGEPAGE advice description to > reflect this. > > Additionally, expand the description of requirements for memory to be > considered eligible for THP: alignment / mapping requirements, VMA > flags, prctl(2) settings, inode status, etc. > > Signed-off-by: Zach O'Keefe <zokeefe@google.com> > --- > man2/madvise.2 | 37 ++++++++++++++++++++++++++++++++++--- > 1 file changed, 34 insertions(+), 3 deletions(-) > > diff --git a/man2/madvise.2 b/man2/madvise.2 > index 81cce56af..e14e0f7fb 100644 > --- a/man2/madvise.2 > +++ b/man2/madvise.2 > @@ -320,8 +320,6 @@ Enable Transparent Huge Pages (THP) for pages in the range specified by > .I addr > and > .IR length . > -Currently, Transparent Huge Pages work only with private anonymous pages (see > -.BR mmap (2)). > The kernel will regularly scan the areas marked as huge page candidates > to replace them with huge pages. > The kernel will also allocate huge pages directly when the region is > @@ -354,12 +352,45 @@ an access pattern that the developer knows in advance won't risk > to increase the memory footprint of the application when transparent > hugepages are enabled. > .IP > +.\" commit 99cb0dbd47a15d395bf3faa78dc122bc5efe3fc0 > +Since Linux 5.4, > +automatic scan of eligible areas and replacement by huge pages works with > +private anonymous pages (see > +.BR mmap (2)), > +shmem-backed pages (including tmpfs (see > +.BR tmpfs (5)), I think here's missing a closing parenthesis. Please check. Maybe you prefer combining em dashes or commas with parentheses to improve visually discerning subclauses. Cheers, Alex > +and file-backed pages. > +For all memory types, > +memory may only be replaced by huge pages on hugepage-aligned boundaries. > +For file-mapped memory (including tmpfs) the mapping must also be naturally > +hugepage-aligned within the file. > +Additionally, > +for file-backed (not tmpfs) memory, > +the file must not be open for write and the mapping must be executable. > +.IP [...]
Hey Alex, thanks for taking a look! > > diff --git a/man2/madvise.2 b/man2/madvise.2 > > index 81cce56af..e14e0f7fb 100644 > > --- a/man2/madvise.2 > > +++ b/man2/madvise.2 > > @@ -320,8 +320,6 @@ Enable Transparent Huge Pages (THP) for pages in the range specified by > > .I addr > > and > > .IR length . > > -Currently, Transparent Huge Pages work only with private anonymous pages (see > > -.BR mmap (2)). > > The kernel will regularly scan the areas marked as huge page candidates > > to replace them with huge pages. > > The kernel will also allocate huge pages directly when the region is > > @@ -354,12 +352,45 @@ an access pattern that the developer knows in advance won't risk > > to increase the memory footprint of the application when transparent > > hugepages are enabled. > > .IP > > +.\" commit 99cb0dbd47a15d395bf3faa78dc122bc5efe3fc0 > > +Since Linux 5.4, > > +automatic scan of eligible areas and replacement by huge pages works with > > +private anonymous pages (see > > +.BR mmap (2)), > > +shmem-backed pages (including tmpfs (see > > +.BR tmpfs (5)), > > I think here's missing a closing parenthesis. Please check. Maybe you > prefer combining em dashes or commas with parentheses to improve > visually discerning subclauses. Not only a good catch on the parenthesis, but I didn't actually know about the "em dash" previously (though I'm a frequent user of it in spirit). Thank you! With that in-hand, there are few places that could be cleaned up to avoid nested paracentesis. Best, Zach
diff --git a/man2/madvise.2 b/man2/madvise.2 index 81cce56af..e14e0f7fb 100644 --- a/man2/madvise.2 +++ b/man2/madvise.2 @@ -320,8 +320,6 @@ Enable Transparent Huge Pages (THP) for pages in the range specified by .I addr and .IR length . -Currently, Transparent Huge Pages work only with private anonymous pages (see -.BR mmap (2)). The kernel will regularly scan the areas marked as huge page candidates to replace them with huge pages. The kernel will also allocate huge pages directly when the region is @@ -354,12 +352,45 @@ an access pattern that the developer knows in advance won't risk to increase the memory footprint of the application when transparent hugepages are enabled. .IP +.\" commit 99cb0dbd47a15d395bf3faa78dc122bc5efe3fc0 +Since Linux 5.4, +automatic scan of eligible areas and replacement by huge pages works with +private anonymous pages (see +.BR mmap (2)), +shmem-backed pages (including tmpfs (see +.BR tmpfs (5)), +and file-backed pages. +For all memory types, +memory may only be replaced by huge pages on hugepage-aligned boundaries. +For file-mapped memory (including tmpfs) the mapping must also be naturally +hugepage-aligned within the file. +Additionally, +for file-backed (not tmpfs) memory, +the file must not be open for write and the mapping must be executable. +.IP +The VMA must not be marked +.BR VM_NOHUGEPAGE , +.BR VM_HUGETLB , +.BR VM_IO , +.BR VM_DONTEXPAND , +.BR VM_MIXEDMAP , +or +.BR VM_PFNMAP , +nor can it be stack memory or backed by a DAX-enabled device +(unless the DAX device is hot-plugged as System RAM). +The process must also not have +.B PR_SET_THP_DISABLE +set (see +.BR prctl (2) ). +.IP The .B MADV_HUGEPAGE and .B MADV_NOHUGEPAGE operations are available only if the kernel was configured with -.BR CONFIG_TRANSPARENT_HUGEPAGE . +.B CONFIG_TRANSPARENT_HUGEPAGE +and file/shmem memory is only supported if the kernel was configured with +.BR CONFIG_READ_ONLY_THP_FOR_FS . .TP .BR MADV_NOHUGEPAGE " (since Linux 2.6.38)" Ensures that memory in the address range specified by