From: "Tom May" <tom@tommay.com>
To: "Daniel Spång" <daniel.spang@gmail.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 0/8][for -mm] mem_notify v6
Date: Wed, 30 Apr 2008 19:07:58 -0700 [thread overview]
Message-ID: <ab3f9b940804301907y5a3e84e1l6cb41a339bc2241b@mail.gmail.com> (raw)
In-Reply-To: <cfd9edbf0804230127k33a56312i6582f926e00ea17@mail.gmail.com>
On Wed, Apr 23, 2008 at 1:27 AM, Daniel Spang <daniel.spang@gmail.com> wrote:
> Hi Tom
>
>
> On 4/17/08, Tom May <tom@tommay.com> wrote:
> >
> > Here is the start and end of the output from the test program. At
> > each /dev/mem_notify notification Cached decreases, then eventually
> > Mapped decreases as well, which means the amount of time the program
> > has to free memory gets smaller and smaller. Finally the oom killer
> > is invoked because the program can't react quickly enough to free
> > memory, even though it can free at a faster rate than it can use
> > memory. My test is slow to free because it calls nanosleep, but this
> > is just a simulation of my actual program that has to perform garbage
> > collection before it can free memory.
>
> I have also seen this behaviour in my static tests with low mem
> notification on swapless systems. It is a problem with small programs
> (typically static test programs) where the text segment is only a few
> pages. I have not seen this behaviour in larger programs which use a
> larger working set. As long as the system working set is bigger than
> the amount of memory that needs to be allocated, between every
> notification reaction opportunity, it seems to be ok.
Hi Daniel,
You're saying the program's in-core text pages serve as a reserve that
the kernel can discard when it needs some memory, correct? And that
even if the kernel discards them, it will page them back in as a
matter of course as the program runs, to maintain the reserve? That
certainly makes sense.
In my case of a Java virtual machine, where I originally saw the
problem, most of the code is interpreted byte codes or jit-compiled
native code, all of which resides not in the text segment but in
anonymous pages that aren't backed by a file, and there is no swap
space. The actual text segment working set can be very small (memory
allocation, garbage collection, synchronization, other random native
code). And, as KOSAKI Motohiro pointed out, it may be wise to mlock
these areas. So the text working set doesn't make an adequate
reserve.
However, I can maintain a reserve of cached and/or mapped memory by
touching pages in the text segment (or any mapped file) as the final
step of low memory notification handling, if the cached page count is
getting low. For my purposes, this is nearly the same as having an
additional threshold-based notification, since it forces notifications
to occur while the kernel still has some memory to satisfy allocations
while userspace code works to free memory. And it's simple.
Unfortunately, this is more expensive than it could be since the pages
need to be read in from some device (mapping /dev/zero doesn't cause
pages to be allocated). What I'm looking for now is a cheap way to
populate the cache with pages that the kernel can throw away when it
needs to reclaim memory.
Thanks,
.tom
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2008-05-01 2:07 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-09 15:19 [PATCH 0/8][for -mm] mem_notify v6 KOSAKI Motohiro
2008-02-09 16:02 ` Jon Masters
2008-02-09 16:33 ` KOSAKI Motohiro
2008-02-09 16:43 ` Rik van Riel
2008-02-09 16:49 ` KOSAKI Motohiro
2008-02-11 15:36 ` [PATCH 0/8][for -mm] mem_notify v6, " Jonathan Corbet
2008-02-11 15:46 ` KOSAKI Motohiro
2008-02-17 14:49 ` Paul Jackson
2008-02-19 7:36 ` KOSAKI Motohiro
2008-02-19 15:00 ` Paul Jackson
2008-02-19 19:02 ` Rik van Riel
2008-02-19 20:18 ` Paul Jackson
2008-02-19 20:43 ` Paul Jackson
2008-02-19 22:28 ` Pavel Machek
2008-02-20 1:54 ` Paul Jackson
2008-02-20 2:07 ` Rik van Riel
2008-02-20 2:48 ` KOSAKI Motohiro
2008-02-20 4:57 ` Paul Jackson
2008-02-20 5:21 ` KOSAKI Motohiro
2008-02-20 4:36 ` Paul Jackson
2008-04-01 23:35 ` Tom May
2008-04-02 7:31 ` KOSAKI Motohiro
2008-04-02 17:45 ` Tom May
2008-04-15 0:16 ` Tom May
2008-04-16 2:30 ` KOSAKI Motohiro
2008-04-17 9:30 ` KOSAKI Motohiro
2008-04-17 19:23 ` Tom May
2008-04-18 10:07 ` KOSAKI Motohiro
2008-04-21 20:32 ` Tom May
2008-04-23 8:27 ` Daniel Spång
2008-05-01 2:07 ` Tom May [this message]
2008-05-01 15:06 ` KOSAKI Motohiro
2008-05-02 22:21 ` Tom May
2008-05-03 12:26 ` KOSAKI Motohiro
2008-05-06 5:22 ` Tom May
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=ab3f9b940804301907y5a3e84e1l6cb41a339bc2241b@mail.gmail.com \
--to=tom@tommay.com \
--cc=daniel.spang@gmail.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.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).