From: John Lash <jlash@speakeasy.net>
To: Alex Buell <alex.buell@munted.org.uk>
Cc: Mailing List - Linux Kernel <linux-kernel@vger.kernel.org>
Subject: Re: inode_cache / dentry_cache not being reclaimed aggressively enough on low-memory PCs
Date: Sat, 3 Jan 2004 10:30:23 -0600 [thread overview]
Message-ID: <20040103103023.77bf91b5.jlash@speakeasy.net> (raw)
In-Reply-To: <Pine.LNX.4.58.0401031128100.2605@slut.local.munted.org.uk>
On Sat, 3 Jan 2004 11:35:36 +0000 (GMT)
Alex Buell <alex.buell@munted.org.uk> wrote:
> I've just run across a problem with 2.4.x (and probably 2.6.x as well, if
> reports I've see are correct). When updatedb is run overnight, it builds
> up large amounts of inode_cache and dentry_cache. This is a big problem on
> low memory boxes as those caches are not being reclaimed aggressively
> enough, which means the box will be constantly swapping if it runs out of
> free memory. I've looked at archives and I find that there's similar
> reports going back to 2.4.16, and doesn't seem to have been solved as this
> problem is apparently in 2.6.0 as well!
>
> The only solution I've found so far is to run L*rry McV*y's lmdd to force
> reclaimation of those caches but this isn't ideal. What patches are out
> there that solves this problem?
>
After taking the 30 minute tour of the 2.6.0 dcache code, one thing that seems
possible is shrink_dcache_memory() is causing you the problem. It is doing some
manipulation of the nr_unused value to prevent all unused dcache entries from
being removed and thereby blowing away all recently used entries as well as the
ones that are really stale.
As it stands, it will maintain as many unused entries as there are used entries.
If this low memory system las a large, stable, number of inuse dentry objects,
the unused entries will match it thereby holding double the memory and possibly
causing the problem you see.
here are the lines I mean:
nr_unused = dentry_stat.nr_unused;
nr_used = dentry_stat.nr_dentry - nr_unused;
if (nr_unused < nr_used * unused_ratio)
return 0;
return nr_unused - nr_used * unused_ratio; /* unused_ratio = 1 at the top of
the fn */
Check on your system, /proc/sys/fs/dentry-state, first two values appear to be
nr_dentry and nr_unused. Plug those values into the above code and if you get
something around zero, that's why the memory is stuck.
A couple of solutions come to mind. The one I like best would be to adjust the
above code to make it conscious of the total memory in the system and keep
nr_unused to a reasonable percentage. Another is to allow unused_ratio to be
less than 1, Possibly some/proc entry to lower it (.5, .25, whatever), or to
avoid the float, provide another parameter to do an integer divisor for
unused_ratio. Something like:
nr_unused - nr_used * unused_ratio / ratio_fraction
If that's not why the memory is stuck, then it's something deeper in the reclaim
code. Either way, I'd be curious to know what you find. Depending on what your
system shows, I could provide a patch to try some things out.
--john
> Thanks,
> Alex.
> --
> http://www.munted.org.uk
>
> Your mother cooks socks in hell
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
next prev parent reply other threads:[~2004-01-03 16:30 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-01-03 11:35 Alex Buell
2004-01-03 16:30 ` John Lash [this message]
2004-01-03 18:27 ` Alex Buell
2004-01-03 22:24 ` Mike Fedyk
2004-01-03 22:55 ` Andrew Morton
2004-01-04 0:15 ` Alex Buell
2004-01-04 3:05 ` Andrew Morton
2004-01-04 7:23 ` Mike Fedyk
2004-01-05 17:32 ` Marcelo Tosatti
2004-01-05 18:47 ` Mike Fedyk
2004-01-09 20:49 ` Rik van Riel
2004-01-04 5:31 ` John Lash
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=20040103103023.77bf91b5.jlash@speakeasy.net \
--to=jlash@speakeasy.net \
--cc=alex.buell@munted.org.uk \
--cc=linux-kernel@vger.kernel.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
Powered by JetHome