[PATCH v2 4/8] linux: Add MAP_DROPPABLE from Linux 6.11
H.J. Lu
hjl.tools@gmail.com
Wed Oct 9 21:12:00 GMT 2024
On Wed, Oct 9, 2024 at 9:37 PM Adhemerval Zanella Netto
<adhemerval.zanella@linaro.org> wrote:
>
>
>
> On 09/10/24 08:48, H.J. Lu wrote:
> >
> > On Wed, Oct 9, 2024, 7:45 PM Adhemerval Zanella Netto <adhemerval.zanella@linaro.org <mailto:adhemerval.zanella@linaro.org>> wrote:
> >
> >
> >
> > On 08/10/24 17:28, H.J. Lu wrote:
> > > On Wed, Oct 9, 2024 at 2:47 AM Adhemerval Zanella
> > > <adhemerval.zanella@linaro.org <mailto:adhemerval.zanella@linaro.org>> wrote:
> > >>
> > >> This request the page to be never written out to swap, it will be zeroed
> > >> under memory pressure (so kernel can just drop the page), it is inherited
> > >> by fork, it is not counted against @code{mlock} budget, and if there is
> > >> no enough memory to service a page faults there is no fatal error (so not
> > >> signal is sent).
> > >>
> > >> Tested with build-many-glibcs.py.
> > >> ---
> > >> manual/llio.texi | 9 +++++++++
> > >> sysdeps/unix/sysv/linux/bits/mman-linux.h | 1 +
> > >> sysdeps/unix/sysv/linux/tst-mman-consts.py | 2 +-
> > >> 3 files changed, 11 insertions(+), 1 deletion(-)
> > >>
> > >> diff --git a/manual/llio.texi b/manual/llio.texi
> > >> index a035c3e20f..05ab44c6e7 100644
> > >> --- a/manual/llio.texi
> > >> +++ b/manual/llio.texi
> > >> @@ -1762,6 +1762,15 @@ write dirty metadata out whenever dirty data is written out. Unlike
> > >> most other flags, this one will fail unless @code{MAP_SHARED_VALIDATE}
> > >> is also given.
> > >>
> > >> +@item MAP_DROPPABLE
> > >> +Request the page to be never written out to swap, it will be zeroed
> > >> +under memory pressure (so kernel can just drop the page), it is inherited
> > >> +by fork, it is not counted against @code{mlock} budget, and if there is
> > >> +not enough memory to service a page fault there is no fatal error (so no
> > >> +signal is sent).
> > >> +
> > >> +The @code{MAP_DROPPABLE} flag is specific to Linux.
> > >> +
> > >> @end vtable
> > >>
> > >> @code{mmap} returns the address of the new mapping, or
> > >> diff --git a/sysdeps/unix/sysv/linux/bits/mman-linux.h b/sysdeps/unix/sysv/linux/bits/mman-linux.h
> > >> index 522333c50a..161a885096 100644
> > >> --- a/sysdeps/unix/sysv/linux/bits/mman-linux.h
> > >> +++ b/sysdeps/unix/sysv/linux/bits/mman-linux.h
> > >> @@ -43,6 +43,7 @@
> > >> #define MAP_PRIVATE 0x02 /* Changes are private. */
> > >> #define MAP_SHARED_VALIDATE 0x03 /* Share changes and validate
> > >> extension flags. */
> > >> +#define MAP_DROPPABLE 0x08 /* Zero memory under memory pressure. */
> > >> #define MAP_TYPE 0x0f /* Mask for type of mapping. */
> > >>
> > >> /* Other flags. */
> > >> diff --git a/sysdeps/unix/sysv/linux/tst-mman-consts.py b/sysdeps/unix/sysv/linux/tst-mman-consts.py
> > >> index a1137eb1d5..2191bea36f 100644
> > >> --- a/sysdeps/unix/sysv/linux/tst-mman-consts.py
> > >> +++ b/sysdeps/unix/sysv/linux/tst-mman-consts.py
> > >> @@ -33,7 +33,7 @@ def main():
> > >> help='C compiler (including options) to use')
> > >> args = parser.parse_args()
> > >> linux_version_headers = glibcsyscalls.linux_kernel_version(args.cc)
> > >> - linux_version_glibc = (6, 10)
> > >> + linux_version_glibc = (6, 11)
> > >> sys.exit(glibcextract.compare_macro_consts(
> > >> '#define _GNU_SOURCE 1\n'
> > >> '#include <sys/mman.h>\n',
> > >> --
> > >> 2.43.0
> > >>
> > >
> > > We should add a test for it.
> > >
> >
> > I think it would make sense when glibc itself would use this new flag, this patch
> > is just the usual sync one that just update glibc when a kernel release.
> >
> >
> > mmap is a special case. A test is desirable.
>
> I am not sure if we should do functional kernel testing in this case, and the VM_DROPPABLE
> test in also tricky because to fully tests requires to apply some system memory pressure
> (so the page is dropped).
>
We have run into the MAP_XXX problem before. We should add a test
for each new MAP_XXX. Ther kernel test, tools/testing/selftests/mm/droppable.c,
looks reasonable for glibc.
--
H.J.
More information about the Libc-alpha
mailing list