From: Eric B Munson <emunson-JqFfY2XvxFXQT0dZR+AlfA@public.gmane.org>
To: Michal Hocko <mhocko-AlSwsSmVLrQ@public.gmane.org>
Cc: Andrew Morton
<akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>,
Shuah Khan <shuahkh-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org>,
linux-alpha-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-mips-6z/3iImG2C8G8FEW9MqTrA@public.gmane.org,
linux-parisc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
sparclinux-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-xtensa-PjhNF2WwrV/0Sa2dR60CXw@public.gmane.org,
linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org,
linux-arch-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 0/3] Allow user to request memory to be locked on page fault
Date: Thu, 14 May 2015 09:58:35 -0400 [thread overview]
Message-ID: <20150514135835.GH1227@akamai.com> (raw)
In-Reply-To: <20150514080812.GC6433-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 3544 bytes --]
On Thu, 14 May 2015, Michal Hocko wrote:
> On Wed 13-05-15 11:00:36, Eric B Munson wrote:
> > On Mon, 11 May 2015, Eric B Munson wrote:
> >
> > > On Fri, 08 May 2015, Andrew Morton wrote:
> > >
> > > > On Fri, 8 May 2015 15:33:43 -0400 Eric B Munson <emunson-JqFfY2XvxFVhl2p70BpVqQ@public.gmane.orgm> wrote:
> > > >
> > > > > mlock() allows a user to control page out of program memory, but this
> > > > > comes at the cost of faulting in the entire mapping when it is
> > > > > allocated. For large mappings where the entire area is not necessary
> > > > > this is not ideal.
> > > > >
> > > > > This series introduces new flags for mmap() and mlockall() that allow a
> > > > > user to specify that the covered are should not be paged out, but only
> > > > > after the memory has been used the first time.
> > > >
> > > > Please tell us much much more about the value of these changes: the use
> > > > cases, the behavioural improvements and performance results which the
> > > > patchset brings to those use cases, etc.
> > > >
> > >
> > > To illustrate the proposed use case I wrote a quick program that mmaps
> > > a 5GB file which is filled with random data and accesses 150,000 pages
> > > from that mapping. Setup and processing were timed separately to
> > > illustrate the differences between the three tested approaches. the
> > > setup portion is simply the call to mmap, the processing is the
> > > accessing of the various locations in that mapping. The following
> > > values are in milliseconds and are the averages of 20 runs each with a
> > > call to echo 3 > /proc/sys/vm/drop_caches between each run.
> > >
> > > The first mapping was made with MAP_PRIVATE | MAP_LOCKED as a baseline:
> > > Startup average: 9476.506
> > > Processing average: 3.573
> > >
> > > The second mapping was simply MAP_PRIVATE but each page was passed to
> > > mlock() before being read:
> > > Startup average: 0.051
> > > Processing average: 721.859
> > >
> > > The final mapping was MAP_PRIVATE | MAP_LOCKONFAULT:
> > > Startup average: 0.084
> > > Processing average: 42.125
> > >
> >
> > Michal's suggestion of changing protections and locking in a signal
> > handler was better than the locking as needed, but still significantly
> > more work required than the LOCKONFAULT case.
> >
> > Startup average: 0.047
> > Processing average: 86.431
>
> Have you played with batching? Has it helped? Anyway it is to be
> expected that the overhead will be higher than a single mmap call. The
> question is whether you can live with it because adding a new semantic
> to mlock sounds trickier and MAP_LOCKED is tricky enough already...
>
The test code I have been using is a pathalogical test case that only
touches pages once and they are fairly far apart.
On the face batching sounds like a good idea, but I have a couple of
questions. In order to batch fault in pages the seg fault handler needs
to know about the mapping in question. Specifically it needs to know
where it ends so that it doesn't try and mprotect()/mlock() past the
end. So now the program has to start tracking its maps in some globally
accessible structure and this sounds more like implementing memory
management in userspace. How could this batching be implemented without
requiring the signal handler to know about mapping that is being
accessed? Also, how much memory management policy is it reasonable to
expect user space to implement in these cases?
Eric
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2015-05-14 13:58 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-08 19:33 [PATCH 0/3] Allow user to request memory to be locked on page fault Eric B Munson
2015-05-08 19:33 ` [PATCH 1/3] Add flag to request pages are locked after " Eric B Munson
2015-05-08 19:33 ` [PATCH 2/3] Add mlockall flag for locking pages on fault Eric B Munson
[not found] ` <1431113626-19153-1-git-send-email-emunson-JqFfY2XvxFXQT0dZR+AlfA@public.gmane.org>
2015-05-08 19:33 ` [PATCH 3/3] Add tests for lock " Eric B Munson
2015-05-08 19:42 ` [PATCH 0/3] Allow user to request memory to be locked on page fault Andrew Morton
[not found] ` <20150508124203.6679b1d35ad9555425003929-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
2015-05-08 20:06 ` Eric B Munson
2015-05-08 20:15 ` Andrew Morton
2015-05-11 14:36 ` Eric B Munson
2015-05-11 19:12 ` Andrew Morton
2015-05-11 21:05 ` Eric B Munson
2015-05-13 13:58 ` Michal Hocko
2015-05-13 14:14 ` Eric B Munson
2015-05-11 18:06 ` Eric B Munson
2015-05-13 15:00 ` Eric B Munson
[not found] ` <20150513150036.GG1227-JqFfY2XvxFXQT0dZR+AlfA@public.gmane.org>
2015-05-14 8:08 ` Michal Hocko
[not found] ` <20150514080812.GC6433-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2015-05-14 13:58 ` Eric B Munson [this message]
2015-05-15 15:35 ` Eric B Munson
2015-05-19 20:30 ` Eric B Munson
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=20150514135835.GH1227@akamai.com \
--to=emunson-jqffy2xvxfxqt0dzr+alfa@public.gmane.org \
--cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
--cc=linux-alpha-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-arch-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-mips-6z/3iImG2C8G8FEW9MqTrA@public.gmane.org \
--cc=linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org \
--cc=linux-parisc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-xtensa-PjhNF2WwrV/0Sa2dR60CXw@public.gmane.org \
--cc=linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \
--cc=mhocko-AlSwsSmVLrQ@public.gmane.org \
--cc=shuahkh-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org \
--cc=sparclinux-u79uwXL29TY76Z2rM5mHXA@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;
as well as URLs for NNTP newsgroup(s).