From: Christoph Lameter <cl@linux-foundation.org>
To: Miklos Szeredi <miklos@szeredi.hu>
Cc: penberg@cs.helsinki.fi, nickpiggin@yahoo.com.au,
hugh@veritas.com, linux-mm@kvack.org,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
akpm@linux-foundation.org
Subject: Re: SLUB defrag pull request?
Date: Wed, 22 Oct 2008 08:42:25 -0700 (PDT) [thread overview]
Message-ID: <Pine.LNX.4.64.0810220822500.30851@quilx.com> (raw)
In-Reply-To: <E1KsXrY-0000AU-C4@pomaz-ex.szeredi.hu>
On Wed, 22 Oct 2008, Miklos Szeredi wrote:
> On Tue, 21 Oct 2008, Christoph Lameter wrote:
>> The only way that a secure reference can be established is if the
>> slab page is locked. That requires a spinlock. The slab allocator
>> calls the get() functions while the slab lock guarantees object
>> existence. Then locks are dropped and reclaim actions can start with
>> the guarantee that the slab object will not suddenly vanish.
>
> Yes, you've made up your mind, that you want to do it this way. But
> it's the _wrong_ way, this "want to get a secure reference for use
> later" leads to madness when applied to dentries or inodes. Try for a
> minute to think outside this template.
>
> For example dcache_lock will protect against dentries moving to/from
> d_lru. So you can do this:
>
> take dcache_lock
> check if d_lru is non-empty
The dentry could have been freed even before we take the dcache_lock. We
cannot access d_lru without a stable reference to the dentry.
> take sb->s_umount
> free dentry
> release sb->s_umount
> release dcache_lock
>
> Yeah, locking will be more complicated in reality. Still, much less
> complicated than trying to do the same across two separate phases.
>
> Why can't something like that work?
Because the slab starts out with a series of objects left in a slab. It
needs to do build a list of objects etc in a way that is independent as
possible from the user of the slab page. It does that by locking the slab
page so that free operations stall until the reference has been
established. If it would not be shutting off frees then the objects could
vanish under us.
We could also avoid frees by calling some cache specific method that locks
out frees before and after. But then frees would stall everywhere and
every slab cache would have to check a global lock before freeing objects
(there would be numerous complications with RCU free etc etc).
Slab defrag only stops frees on a particular slab page.
The slab defrag approach also allows the slab cache (dentry or inodes
here) to do something else than free the object. It would be possible f.e.
to move the object by allocating a new entry and moving the information to
the new dentry. That would actually be better since it would preserve the
objects and just move them into the same slab page.
--
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-10-22 15:42 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1223883004.31587.15.camel@penberg-laptop>
[not found] ` <1223883164.31587.16.camel@penberg-laptop>
[not found] ` <Pine.LNX.4.64.0810131227120.20511@blonde.site>
2008-10-13 12:54 ` Nick Piggin
2008-10-13 13:59 ` Miklos Szeredi
2008-10-13 14:27 ` Miklos Szeredi
2008-10-13 16:35 ` Christoph Lameter
2008-10-13 14:49 ` Miklos Szeredi
2008-10-13 15:22 ` Miklos Szeredi
2008-10-20 14:59 ` Christoph Lameter
2008-10-20 18:01 ` Miklos Szeredi
2008-10-20 18:22 ` Christoph Lameter
2008-10-20 18:40 ` Miklos Szeredi
2008-10-20 19:11 ` Christoph Lameter
2008-10-20 19:28 ` Miklos Szeredi
2008-10-20 19:53 ` Christoph Lameter
2008-10-20 20:50 ` Miklos Szeredi
2008-10-21 23:17 ` Christoph Lameter
2008-10-22 7:10 ` Miklos Szeredi
2008-10-22 15:42 ` Christoph Lameter [this message]
2008-10-22 19:46 ` Miklos Szeredi
2008-10-22 19:54 ` Christoph Lameter
2008-10-22 20:11 ` Miklos Szeredi
2008-10-22 20:19 ` Christoph Lameter
2008-10-22 20:26 ` Miklos Szeredi
2008-10-22 20:48 ` Pekka Enberg
2008-10-22 21:01 ` Christoph Lameter
2008-10-22 21:04 ` Miklos Szeredi
2008-10-22 21:12 ` Pekka Enberg
2008-10-22 21:28 ` Christoph Lameter
2008-10-22 22:10 ` Miklos Szeredi
2008-10-22 23:20 ` Christoph Lameter
2008-10-23 7:10 ` Pekka Enberg
2008-10-23 8:38 ` Miklos Szeredi
2008-10-23 13:40 ` Christoph Lameter
2008-10-23 13:58 ` Pekka Enberg
2008-10-23 14:09 ` Christoph Lameter
2008-10-23 14:14 ` Pekka Enberg
2008-10-23 14:25 ` Christoph Lameter
2008-10-23 15:17 ` Eric Dumazet
2008-10-23 15:39 ` Christoph Lameter
2008-10-23 16:35 ` Eric Dumazet
2008-10-23 16:47 ` Christoph Lameter
2008-10-23 17:14 ` Eric Dumazet
2008-10-28 11:06 ` Pekka Enberg
2008-10-28 11:19 ` Nick Piggin
2008-10-30 15:45 ` Christoph Lameter
2008-10-22 20:59 ` Christoph Lameter
2008-10-20 23:04 ` Dave Chinner
2008-10-13 16:24 ` Christoph Lameter
2008-10-13 14:28 ` Miklos Szeredi
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=Pine.LNX.4.64.0810220822500.30851@quilx.com \
--to=cl@linux-foundation.org \
--cc=akpm@linux-foundation.org \
--cc=hugh@veritas.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=miklos@szeredi.hu \
--cc=nickpiggin@yahoo.com.au \
--cc=penberg@cs.helsinki.fi \
/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