From: Andrew Morton <akpm@linux-foundation.org>
To: Christoph Lameter <cl@linux.com>
Cc: Glauber Costa <glommer@parallels.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
kamezawa.hiroyu@jp.fujitsu.com,
Johannes Weiner <hannes@cmpxchg.org>, Tejun Heo <tj@kernel.org>,
Michal Hocko <mhocko@suse.cz>, Pekka Enberg <penberg@kernel.org>,
David Rientjes <rientjes@google.com>,
Pekka Enberg <penberg@cs.helsinki.fi>,
Suleiman Souhlal <suleiman@google.com>
Subject: Re: [PATCH v6 25/29] memcg/sl[au]b: shrink dead caches
Date: Thu, 8 Nov 2012 11:21:20 -0800 [thread overview]
Message-ID: <20121108112120.fc964c29.akpm@linux-foundation.org> (raw)
In-Reply-To: <0000013ae1050e6f-7f908e0b-720a-4e68-a275-e5086a4f5c74-000000@email.amazonses.com>
On Thu, 8 Nov 2012 17:15:36 +0000
Christoph Lameter <cl@linux.com> wrote:
> On Wed, 7 Nov 2012, Andrew Morton wrote:
>
> > What's up with kmem_cache_shrink? It's global and exported to modules
> > but its only external caller is some weird and hopelessly poorly
> > documented site down in drivers/acpi/osl.c. slab and slob implement
> > kmem_cache_shrink() *only* for acpi! wtf? Let's work out what acpi is
> > trying to actually do there, then do it properly, then killkillkill!
>
> kmem_cache_shrink is also used internally. Its simply releasing unused
> cached objects.
Only in slub. It could be removed outright from the others and
simplified in slub.
> > Secondly, as slab and slub (at least) have the ability to shed cached
> > memory, why aren't they hooked into the core cache-shinking machinery.
> > After all, it's called "shrink_slab"!
>
> Because the core cache shrinking needs the slab caches to free up memory
> from inodes and dentries. We could call kmem_cache_shrink at the end of
> the shrink passes in vmscan. The price would be that the caches would have
> to be repopulated when new allocations occur.
Well, the shrinker shouldn't strips away all the cache. It will perform
a partial trim, the magnitude of which increases with perceived
external memory pressure.
AFACIT, this is correct and desirable behaviour for shrinking
slab's internal caches.
> >
> > If we can fix all that up then I wonder whether this particular patch
> > needs to exist at all. If the kmem_cache is no longer used then we
> > can simply leave it floating around in memory and the regular cache
> > shrinking code out of shrink_slab() will clean up any remaining pages.
> > The kmem_cache itself can be reclaimed via another shrinker, if
> > necessary?
>
> The kmem_cache can only be released if all its objects (used and unused)
> are released. kmem_cache_shrink drops the unused objects on some internal
> slab specific list. That may enable us to release the kmem_cache
> structure.
--
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>
WARNING: multiple messages have this Message-ID (diff)
From: Andrew Morton <akpm@linux-foundation.org>
To: Christoph Lameter <cl@linux.com>
Cc: Glauber Costa <glommer@parallels.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
kamezawa.hiroyu@jp.fujitsu.com,
Johannes Weiner <hannes@cmpxchg.org>, Tejun Heo <tj@kernel.org>,
Michal Hocko <mhocko@suse.cz>, Pekka Enberg <penberg@kernel.org>,
David Rientjes <rientjes@google.com>,
Pekka Enberg <penberg@cs.helsinki.fi>,
Suleiman Souhlal <suleiman@google.com>
Subject: Re: [PATCH v6 25/29] memcg/sl[au]b: shrink dead caches
Date: Thu, 8 Nov 2012 11:21:20 -0800 [thread overview]
Message-ID: <20121108112120.fc964c29.akpm@linux-foundation.org> (raw)
In-Reply-To: <0000013ae1050e6f-7f908e0b-720a-4e68-a275-e5086a4f5c74-000000@email.amazonses.com>
On Thu, 8 Nov 2012 17:15:36 +0000
Christoph Lameter <cl@linux.com> wrote:
> On Wed, 7 Nov 2012, Andrew Morton wrote:
>
> > What's up with kmem_cache_shrink? It's global and exported to modules
> > but its only external caller is some weird and hopelessly poorly
> > documented site down in drivers/acpi/osl.c. slab and slob implement
> > kmem_cache_shrink() *only* for acpi! wtf? Let's work out what acpi is
> > trying to actually do there, then do it properly, then killkillkill!
>
> kmem_cache_shrink is also used internally. Its simply releasing unused
> cached objects.
Only in slub. It could be removed outright from the others and
simplified in slub.
> > Secondly, as slab and slub (at least) have the ability to shed cached
> > memory, why aren't they hooked into the core cache-shinking machinery.
> > After all, it's called "shrink_slab"!
>
> Because the core cache shrinking needs the slab caches to free up memory
> from inodes and dentries. We could call kmem_cache_shrink at the end of
> the shrink passes in vmscan. The price would be that the caches would have
> to be repopulated when new allocations occur.
Well, the shrinker shouldn't strips away all the cache. It will perform
a partial trim, the magnitude of which increases with perceived
external memory pressure.
AFACIT, this is correct and desirable behaviour for shrinking
slab's internal caches.
> >
> > If we can fix all that up then I wonder whether this particular patch
> > needs to exist at all. If the kmem_cache is no longer used then we
> > can simply leave it floating around in memory and the regular cache
> > shrinking code out of shrink_slab() will clean up any remaining pages.
> > The kmem_cache itself can be reclaimed via another shrinker, if
> > necessary?
>
> The kmem_cache can only be released if all its objects (used and unused)
> are released. kmem_cache_shrink drops the unused objects on some internal
> slab specific list. That may enable us to release the kmem_cache
> structure.
next prev parent reply other threads:[~2012-11-08 19:21 UTC|newest]
Thread overview: 150+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-01 12:07 [PATCH v6 00/29] kmem controller for memcg Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 01/29] memcg: Make it possible to use the stock for more than one page Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 02/29] memcg: Reclaim when more than one page needed Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 03/29] memcg: change defines to an enum Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 04/29] kmem accounting basic infrastructure Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 05/29] Add a __GFP_KMEMCG flag Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 19:58 ` Christoph Lameter
2012-11-01 19:58 ` Christoph Lameter
2012-11-01 12:07 ` [PATCH v6 06/29] memcg: kmem controller infrastructure Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 20:03 ` Christoph Lameter
2012-11-01 20:03 ` Christoph Lameter
2012-11-01 12:07 ` [PATCH v6 07/29] mm: Allocate kernel pages to the right memcg Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 08/29] res_counter: return amount of charges after res_counter_uncharge Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 09/29] memcg: kmem accounting lifecycle management Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 10/29] memcg: use static branches when code not in use Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 11/29] memcg: allow a memcg with kmem charges to be destructed Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-02 0:05 ` Andrew Morton
2012-11-02 0:05 ` Andrew Morton
2012-11-02 7:50 ` Glauber Costa
2012-11-02 7:50 ` Glauber Costa
2012-11-06 10:54 ` Michal Hocko
2012-11-06 10:54 ` Michal Hocko
2012-11-01 12:07 ` [PATCH v6 12/29] execute the whole memcg freeing in free_worker Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 13/29] protect architectures where THREAD_SIZE >= PAGE_SIZE against fork bombs Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 14/29] Add documentation about the kmem controller Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 15/29] slab/slub: struct memcg_params Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 16/29] slab: annotate on-slab caches nodelist locks Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 17/29] consider a memcg parameter in kmem_create_cache Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 18/29] Allocate memory for memcg caches whenever a new memcg appears Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-06 0:23 ` Andrew Morton
2012-11-06 0:23 ` Andrew Morton
2012-11-07 7:05 ` Glauber Costa
2012-11-07 7:05 ` Glauber Costa
2012-11-07 7:10 ` Andrew Morton
2012-11-07 7:10 ` Andrew Morton
2012-11-01 12:07 ` [PATCH v6 19/29] memcg: infrastructure to match an allocation to the right cache Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-06 0:28 ` Andrew Morton
2012-11-06 0:28 ` Andrew Morton
2012-11-06 8:03 ` Michal Hocko
2012-11-06 8:03 ` Michal Hocko
2012-11-08 11:05 ` Michal Hocko
2012-11-08 11:05 ` Michal Hocko
2012-11-08 14:33 ` Michal Hocko
2012-11-08 14:33 ` Michal Hocko
2012-11-07 7:04 ` Glauber Costa
2012-11-07 7:04 ` Glauber Costa
2012-11-07 7:13 ` Andrew Morton
2012-11-07 7:13 ` Andrew Morton
2012-11-01 12:07 ` [PATCH v6 20/29] memcg: skip memcg kmem allocations in specified code regions Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-06 0:33 ` Andrew Morton
2012-11-06 0:33 ` Andrew Morton
2012-11-01 12:07 ` [PATCH v6 21/29] sl[au]b: always get the cache from its page in kmem_cache_free Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 22/29] sl[au]b: Allocate objects from memcg cache Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 23/29] memcg: destroy memcg caches Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-02 0:05 ` Andrew Morton
2012-11-02 0:05 ` Andrew Morton
2012-11-02 7:46 ` Glauber Costa
2012-11-02 7:46 ` Glauber Costa
2012-11-02 20:19 ` Michal Hocko
2012-11-02 20:19 ` Michal Hocko
2012-11-06 0:40 ` Andrew Morton
2012-11-06 0:40 ` Andrew Morton
2012-11-01 12:07 ` [PATCH v6 24/29] memcg/sl[au]b Track all the memcg children of a kmem_cache Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 25/29] memcg/sl[au]b: shrink dead caches Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-06 0:48 ` Andrew Morton
2012-11-06 0:48 ` Andrew Morton
2012-11-07 7:13 ` Glauber Costa
2012-11-07 7:13 ` Glauber Costa
2012-11-07 7:16 ` Andrew Morton
2012-11-07 7:16 ` Andrew Morton
2012-11-07 9:22 ` Glauber Costa
2012-11-07 9:22 ` Glauber Costa
2012-11-07 22:46 ` Andrew Morton
2012-11-07 22:46 ` Andrew Morton
2012-11-08 7:13 ` Glauber Costa
2012-11-08 7:13 ` Glauber Costa
2012-11-08 17:15 ` Christoph Lameter
2012-11-08 17:15 ` Christoph Lameter
2012-11-08 19:21 ` Andrew Morton [this message]
2012-11-08 19:21 ` Andrew Morton
2012-11-08 22:31 ` Glauber Costa
2012-11-08 22:31 ` Glauber Costa
2012-11-08 22:40 ` Andrew Morton
2012-11-08 22:40 ` Andrew Morton
2012-11-09 20:06 ` Christoph Lameter
2012-11-09 20:06 ` Christoph Lameter
2012-11-09 20:04 ` Christoph Lameter
2012-11-09 20:04 ` Christoph Lameter
2012-11-01 12:07 ` [PATCH v6 26/29] Aggregate memcg cache values in slabinfo Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-06 0:57 ` Andrew Morton
2012-11-06 0:57 ` Andrew Morton
2012-11-01 12:07 ` [PATCH v6 27/29] slab: propagate tunables values Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 28/29] slub: slub-specific propagation changes Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-06 19:25 ` Andrew Morton
2012-11-06 19:25 ` Andrew Morton
2012-11-07 15:53 ` Sasha Levin
2012-11-07 15:53 ` Sasha Levin
2012-11-08 6:51 ` Glauber Costa
2012-11-08 6:51 ` Glauber Costa
2012-11-09 3:37 ` Sasha Levin
2012-11-09 3:37 ` Sasha Levin
2012-11-14 12:06 ` Glauber Costa
2012-11-14 12:06 ` Glauber Costa
2012-11-01 12:07 ` [PATCH v6 29/29] Add slab-specific documentation about the kmem controller Glauber Costa
2012-11-01 12:07 ` Glauber Costa
2012-11-02 0:04 ` [PATCH v6 00/29] kmem controller for memcg Andrew Morton
2012-11-02 0:04 ` Andrew Morton
2012-11-02 7:41 ` Glauber Costa
2012-11-02 7:41 ` Glauber Costa
2012-11-02 19:25 ` JoonSoo Kim
2012-11-02 19:25 ` JoonSoo Kim
2012-11-02 23:06 ` Tejun Heo
2012-11-02 23:06 ` Tejun Heo
2012-11-05 8:14 ` Glauber Costa
2012-11-05 8:14 ` Glauber Costa
2012-11-05 8:18 ` Glauber Costa
2012-11-05 8:18 ` Glauber Costa
2012-11-03 3:36 ` Greg Thelen
2012-11-03 3:36 ` Greg Thelen
2012-11-02 8:30 ` Pekka Enberg
2012-11-02 8:30 ` Pekka Enberg
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=20121108112120.fc964c29.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=cl@linux.com \
--cc=glommer@parallels.com \
--cc=hannes@cmpxchg.org \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.cz \
--cc=penberg@cs.helsinki.fi \
--cc=penberg@kernel.org \
--cc=rientjes@google.com \
--cc=suleiman@google.com \
--cc=tj@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.