From: "Jörn Engel" <joern@wohnheim.fh-wedel.de>
To: Andreas Dilger <adilger@clusterfs.com>
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC] Alignment of fields in struct dentry
Date: Thu, 14 Sep 2006 23:02:35 +0200 [thread overview]
Message-ID: <20060914210235.GA10548@wohnheim.fh-wedel.de> (raw)
In-Reply-To: <20060914183325.GU6441@schatzie.adilger.int>
Hello Andreas,
On Thu, 14 September 2006 12:33:25 -0600, Andreas Dilger wrote:
>
> I think it makes sense to keep d_inode in the first part of the dentry
> always, because it is by far the most referenced field in the dentry,
> along with the critical fields from prune_dcache(), shrink_dcache_anon(),
> dget(), dput(), d_lookup().
d_inode is definitely one of the hotter fields in there. It just
happens to cause the misalignment. Bah, I don't see a good solution.
> While not totally accurate in terms of runtime frequency of use, the counts
> in the code:
>
> fs/*.[ch] fs/*/*.[ch] size32 size64 prune_dc shrk_dc_anon d_lookup
> d_inode 384 2131 4 8
> d_lock 104 529 4 4 1 2
> d_count 18 66 4 4 1 2
> d_lru 18 18 4_ 8 1 1
> d_hash 37 154 4 8_ 2 1
> d_name 73 908 12_ 16 1
> d_flags 26 104 4 4 2
> d_mounted 7 7 4 4
> d_parent 40 231 4 8_ 2
> d_op 37 269 4 8
> d_rcu/d_child 3+22 3+45 8 16
[ d_hash is 8/16, actually ]
d_hash, d_name and d_parent belong way up to the top of the list, imo.
d_lookup() should be the hottest function of all, as the comment in
the structure definition already indicates. Maybe the solution is to
rearrange the fields with those going to the top?
Using your scheme (slightly reduced) we now have:
size32 size64 funky?
d_count 4 4
d_flags 4 4
d_lock 4 4_ y
d_inode 4_ 8
d_hash 8 16--
d_parent 4 8_
d_name 12-- 16___
d_lru 8_ 16_
d_rcu/d_child 8 16__
d_subdirs 8___ 16_
d_alias 8 16____
d_time 4 8
d_op 4_ 8_
d_sb 4 8
d_fsdata 4 8__
d_cookie 0 0 y
d_mounted 4 4
d_iname 36____ 36
With the two funky fields possibly growing, depending on kernel
config. [_-] mark 16-, 32- 64- and 128-byte boundaries, depending on
len. What really frightens me is that a 32-byte boundary goes right
through d_name on 32bit machines. Iirc, my PIII has 32-byte
cachelines. Not good.
How about moving [d_hash,d_parent,d_name] to the front? Something
like:
size32 size64 funky?
d_hash 8 16_
d_parent 4 8
d_name 12- 16--
d_inode 4 8_
d_count 4__ 4
d_flags 4 4
d_lock 4 4 y
d_mounted 4 4
d_lru 8 16
d_rcu/d_child 8 16
d_subdirs 8 16
d_alias 8 16
d_time 4 8
d_op 4 8
d_sb 4 8
d_fsdata 4 8
d_cookie 0 0 y
d_iname 36 36
Now d_lookup() should use a single cacheline, even on my aged
notebook, and the other hot fields remain at the top. d_mounted is
also moved up to remove the misalignment on 64bit. Might be worth
a benchmark or two to see whether it makes a difference...
Jörn
--
Joern's library part 1:
http://lwn.net/Articles/2.6-kernel-api/
next prev parent reply other threads:[~2006-09-14 21:02 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-09-14 9:31 Jörn Engel
2006-09-14 10:50 ` Jörn Engel
2006-09-14 18:33 ` Andreas Dilger
2006-09-14 21:02 ` Jörn Engel [this message]
2006-09-14 21:55 ` Andreas Dilger
2006-09-15 10:27 ` Jörn Engel
2006-09-15 13:41 ` Jörn Engel
2006-09-15 20:44 ` Arnd Bergmann
2006-09-18 21:24 ` Jörn Engel
2006-09-18 21:54 ` Arnd Bergmann
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=20060914210235.GA10548@wohnheim.fh-wedel.de \
--to=joern@wohnheim.fh-wedel.de \
--cc=adilger@clusterfs.com \
--cc=linux-fsdevel@vger.kernel.org \
--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
all inboxes | Powered by JetHome®