public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Josh MacDonald <jmacd@CS.Berkeley.EDU>
To: linux-kernel@vger.kernel.org
Cc: torvalds@transmeta.com, reiserfs-list@namesys.com,
	reiserfs-dev@namesys.com
Subject: Note describing poor dcache utilization under high memory pressure
Date: Mon, 28 Jan 2002 09:13:38 -0800	[thread overview]
Message-ID: <20020128091338.D6578@helen.CS.Berkeley.EDU> (raw)

When memory pressure becomes high, the Linux kswapd begins calling
shrink_caches() from try_to_free_pages() with an integer priority from
6 (the default, lowest priority) to 1 (high priority).  Looking
specifically at the dcache, this results in a calls to
shrink_dcache_memory() that attempt to free a fraction (1/priority) of
the inactive dcache entries.  This ultimately leads to prune_dcache()
scanning the dcache in least-recently-used order attempting to call
kmem_cache_free() on some number of dcache entries.

Dcache entries are allocated from the kmem_slab_cache, which manages
objects in page-size "slabs", but the kmem_slab_cache cannot free a
page until every object in a slab becomes unused.  The problem is that
freeing dcache entries in LRU-order is effectively freeing entries
from randomly-selected slabs, and therefore applying shrink_caches()
pressure to the dcache has an undesired result.  In the attempt to
reduce its size, the dcache must free objects from random slabs in 
order to actually release full pages.  The result is that under high
memory pressure the dcache utilization drops dramatically.  The
prune_dcache() mechanism doesn't just reduce the page utilization as
desired, it reduces the intra-page utilization, which is bad.

In order to measure this effect (via /proc/slabinfo) I first populated
a large dcache and then ran a memory-hog to force swapping to occur.
The dcache utilization drops to between 20-35%.  For example, before
running the memory-hog my dcache reports:

dentry_cache       10170  10170    128  339  339    1 :  252  126

(i.e., 10170 active dentry objects, 10170 available dentry objects @
128 bytes each, 339 pages with at least one object, and 339 allocated
pages, an approximately 1.4MB dcache)

While running the memory-hog program to initiate swapping, the dcache
stands at:

dentry_cache         693   3150    128  105  105    1 :  252  126

Meaning, the randomly-applied cache pressure was successful at freeing
234 (= 339-105) pages, leaving a 430KB dcache, but at the same time it
reduced the cache utilization to 22%, meaning that although it was
able to free nearly 1MB of space, 335KB are now wasted as a result of
the high memory-pressure condition.

So, it would seem that the dcache and kmem_slab_cache memory allocator
could benefit from a way to shrink the dcache in a less random way.
Any thoughts?

-josh

--
PRCS version control system    http://sourceforge.net/projects/prcs
Xdelta storage & transport     http://sourceforge.net/projects/xdelta
Need a concurrent skip list?   http://sourceforge.net/projects/skiplist

             reply	other threads:[~2002-01-28 17:14 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-01-28 17:13 Josh MacDonald [this message]
2002-01-28 17:39 ` Note describing poor dcache utilization under high memory pressure Linus Torvalds
2002-01-28 18:01   ` Rik van Riel
2002-01-28 18:21     ` Linus Torvalds
2002-01-28 18:37       ` Rik van Riel
2002-01-28 19:28         ` William Lee Irwin III
2002-01-28 20:01       ` Daniel Phillips
2002-01-28 21:33         ` Rick Stevens
2002-01-28 21:43           ` Rik van Riel
2002-01-28 22:00             ` Rick Stevens
2002-01-28 22:43               ` Daniel Phillips
2002-01-28 23:06                 ` Rick Stevens
2002-01-28 23:51                   ` [OT] " jepler
2002-01-29  2:30                     ` IPmonger
2002-01-29 12:02                       ` Karl & Betty Schendel
2002-01-28 22:26             ` Daniel Phillips
2002-01-28 22:34           ` Brian Gerst
2002-01-28 23:08             ` Daniel Phillips
2002-01-28 22:39           ` Daniel Phillips
2002-01-28 23:12             ` Rick Stevens
2002-01-28 23:27               ` Daniel Phillips
2002-01-28 22:01         ` Momchil Velikov
2002-01-28 22:19           ` Daniel Phillips
2002-01-29  1:29         ` Oliver Xymoron
2002-01-29  1:37           ` [reiserfs-list] " Valdis.Kletnieks
2002-01-29  1:45           ` Daniel Phillips
2002-01-29  8:39           ` Momchil Velikov
2002-01-29  8:55             ` Daniel Phillips
2002-01-29  9:20               ` William Lee Irwin III
2002-01-29  9:55                 ` Daniel Phillips
2002-01-29 10:18                 ` Momchil Velikov
2002-01-29 19:55                   ` William Lee Irwin III
2002-01-29 20:08                     ` Linus Torvalds
2002-01-29 20:39                       ` William Lee Irwin III
2002-01-29 20:49                         ` Linus Torvalds
2002-01-29 21:01                           ` William Lee Irwin III
2002-01-29  9:20               ` Momchil Velikov
2002-01-29 10:27                 ` Daniel Phillips
2002-01-29 11:54                 ` Helge Hafting
2002-01-29 12:33                   ` Daniel Phillips
2002-01-30  9:07                     ` Horst von Brand
2002-01-30 10:55                       ` Daniel Phillips
2002-01-30 14:46                         ` Rik van Riel
2002-01-30 14:59                           ` Daniel Phillips
2002-01-30 15:54                             ` Rik van Riel
2002-01-30 16:34                               ` Daniel Phillips
2002-01-29 10:59           ` Rik van Riel
2002-01-29 11:28             ` Daniel Phillips
2002-01-29 11:38               ` Rik van Riel
2002-01-29 12:01                 ` Daniel Phillips
2002-01-29 16:57             ` Oliver Xymoron
2002-01-29 17:25               ` Rik van Riel
2002-01-29 20:48                 ` Daniel Phillips
2002-01-29 21:00                   ` Oliver Xymoron
2002-01-29 21:08                     ` Linus Torvalds
2002-01-29 21:13                       ` Oliver Xymoron
2002-01-29 21:50                         ` Linus Torvalds
2002-01-29 22:02                           ` Oliver Xymoron
2002-01-29 22:10                             ` Linus Torvalds
2002-01-29 22:53                           ` Daniel Phillips
2002-01-29 22:53                     ` Daniel Phillips
2002-01-29 23:02                       ` Oliver Xymoron
2002-01-29 23:21                         ` Daniel Phillips
2002-01-28 19:25   ` [reiserfs-dev] " Hans Reiser
2002-01-28 23:52     ` Daniel Phillips
2002-01-29  0:16       ` Hans Reiser
2002-01-29  0:30         ` Alexander Viro
2002-01-29 10:46           ` Hans Reiser
2002-01-29 14:50             ` Chris Mason
2002-01-29 21:10               ` Hans Reiser
2002-01-30  7:11                 ` Oliver Xymoron
2002-01-30  9:57                   ` Hans Reiser
2002-01-29 17:28           ` Josh MacDonald
2002-01-29 18:44             ` [reiserfs-list] " Andreas Dilger
2002-01-29 19:55               ` Andrew Morton
2002-01-30  7:17                 ` Oliver Xymoron
2002-01-30  7:32                   ` [reiserfs-list] Re: [reiserfs-dev] Re: Note describing poordcache " Andrew Morton
2002-01-30  7:52                     ` Oliver Xymoron
2002-01-30 10:03                     ` Hans Reiser
2002-01-30 10:07             ` [reiserfs-dev] Re: Note describing poor dcache " Horst von Brand
2002-01-29 18:29           ` Horst von Brand
2002-01-29  0:51         ` Daniel Phillips
2002-01-29  1:32           ` Daniel Phillips
2002-01-28 22:46   ` Alex Bligh - linux-kernel
2002-01-29 17:27   ` Josh MacDonald

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=20020128091338.D6578@helen.CS.Berkeley.EDU \
    --to=jmacd@cs.berkeley.edu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=reiserfs-dev@namesys.com \
    --cc=reiserfs-list@namesys.com \
    --cc=torvalds@transmeta.com \
    /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