public inbox for linux-man@vger.kernel.org
 help / color / mirror / Atom feed
From: Andrea Arcangeli <aarcange-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: Michael Kerrisk <mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: Doug Goldstein <cardoe-VPKZcK2rSRzQT0dZR+AlfA@public.gmane.org>,
	linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH] madvise.2: add MADV_HUGEPAGE and MADV_NOHUGEPAGE
Date: Wed, 28 Sep 2011 03:59:25 +0200	[thread overview]
Message-ID: <20110928015925.GB7768@redhat.com> (raw)
In-Reply-To: <CAKgNAkh55ZFMEU5nH0vS=jgW91GjDWx1Tf=gyRDUqNm4yqS1oA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

Hello,

On Mon, Sep 19, 2011 at 07:26:49AM +0200, Michael Kerrisk wrote:
> Hello Doug,
> 
> On Wed, Jul 27, 2011 at 10:14 PM, Doug Goldstein <cardoe-VPKZcK2rSRzQT0dZR+AlfA@public.gmane.org> wrote:
> > Document the MADV_HUGEPAGE and MADV_NOHUGEPAGE flags added to the
> > madvise() syscall in Linux kernels 2.6.38 and newer.
> 
> Thanks. I've applied this for man-pages-3.34.
> 
> Andrea, is there anything you think necessary to add/change?

Looking good!

> > Signed-off-by: Doug Goldstein <cardoe-VPKZcK2rSRzQT0dZR+AlfA@public.gmane.org>
> > ---
> >  man2/madvise.2 |   34 ++++++++++++++++++++++++++++++++++
> >  1 files changed, 34 insertions(+), 0 deletions(-)
> >
> > diff --git a/man2/madvise.2 b/man2/madvise.2
> > index 6a449c5..e099e94 100644
> > --- a/man2/madvise.2
> > +++ b/man2/madvise.2
> > @@ -209,6 +209,40 @@ KSM unmerges whatever pages it had merged in the
> > address range specified by
> >  .IR addr
> >  and
> >  .IR length .
> > +.TP
> > +.BR MADV_HUGEPAGE " (since Linux 2.6.38)"
> > +Enables Transparent Huge Pages (THP) for pages in the range specified by
> > +.I addr
> > +and
> > +.IR length .

Maybe it should also be specified that most common kernels
configurations by default will behave like MADV_HUGEPAGE already, and
thus MADV_HUGEPAGE is normally not necessary and it's mostly meant for
embedded systems that may not enable by default in the kernel the
MADV_HUGEPAGE behavior. It can be used in order to selectively enable
THP through MADV_HUGEPAGE (only in some region). Whenever
MADV_HUGEPAGE is used, it should be always in regions of memory with
an access pattern that the developer knows in advance that won't risk
to increase the memory footprint of the application when transparent
hugepages are enabled.

> > +.BR MADV_NOHUGEPAGE " (since Linux 2.6.38)"
> > +Ensures that memory in the address range specified by
> > +.IR addr
> > +and
> > +.IR length
> > +will not be collapsed into huge pages.

Maybe it's more clear as "will not be backed by transparent
hugepages". The collapse is done by khugepaged only but the
transparent hugepages may be natively allocated during the page fault
without waiting them to be collapse later, if MADV_NOHUGEPAGE isn't
used.

This can be used to selectively disable THP for any app that is doing
some scattered memory access that may increase the memory footprint
of the application too much with THP enabled.

Generally those two MADV_*HUGEPAGE madvise are useful to deal with any
memory footprint issue that may arise depending on the kernel default.

For example that the NPTL thread stacks virtual area could be a good
candidate for MADV_NOHUGEPAGE usage, but that's not implemented yet I
think. As opposed qemu-kvm should do MADV_HUGEPAGE by default because
if somebody runs KVM on embedded there will be no memory waste in KVM
because of THP enabled for the guest physical memory (when the guest
reach peak load and touched all ram which happens eventually), so then
KVM will just run faster with no risk of increased memory footprint.

Not so easy to explain clearly though :) but if we manage express
these concepts too, it'll avoid the risk of people polluting apps with
these madvises when they're not needed 99% of the time (with a few
exceptions like qemu-kvm and maybe NPTL for the user thread stacks,
the latter has yet to be checked, KVM I'm positive it'll be fine).

But hey your previous patch already is looking good already.

Thanks a lot for helping document this!
Andrea
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

      parent reply	other threads:[~2011-09-28  1:59 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-27 20:14 [PATCH] madvise.2: add MADV_HUGEPAGE and MADV_NOHUGEPAGE Doug Goldstein
     [not found] ` <CAFWqQMRFHJ2kWkJWB2dAg-Od9MzqL7LeC=CQvzy6t5aNqVY_zQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-09-19  5:26   ` Michael Kerrisk
     [not found]     ` <CAKgNAkh55ZFMEU5nH0vS=jgW91GjDWx1Tf=gyRDUqNm4yqS1oA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-09-28  1:59       ` Andrea Arcangeli [this message]

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=20110928015925.GB7768@redhat.com \
    --to=aarcange-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
    --cc=cardoe-VPKZcK2rSRzQT0dZR+AlfA@public.gmane.org \
    --cc=linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    /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