diff options
| author | Andrew Morton <akpm@osdl.org> | 2004-05-14 05:46:44 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-05-14 05:46:44 -0700 |
| commit | fd2d876083bf90ce4f569542d78166387937e0bf (patch) | |
| tree | fc3f647b4f0a347eb5915b132e25e2b7998f245b /include/linux/dcache.h | |
| parent | 75fb13cdbd050bf9a14e72d2d3dccdf17e1060ff (diff) | |
[PATCH] dentry shrinkage
Rework dentries so that the inline name length is between 31 and 48 bytes.
On SMP P4-compiled x86 each dentry consumes 160 bytes (24 per page).
Here's the histogram of name lengths on all 1.5M files on my workstation:
1: 0%
2: 0%
3: 1%
4: 5%
5: 8%
6: 13%
7: 19%
8: 26%
9: 33%
10: 42%
11: 49%
12: 55%
13: 60%
14: 64%
15: 67%
16: 69%
17: 71%
18: 73%
19: 75%
20: 76%
21: 78%
22: 79%
23: 80%
24: 81%
25: 82%
26: 83%
27: 85%
28: 86%
29: 87%
30: 88%
31: 89%
32: 90%
33: 91%
34: 92%
35: 93%
36: 94%
37: 95%
38: 96%
39: 96%
40: 96%
41: 96%
42: 96%
43: 96%
44: 97%
45: 97%
46: 97%
47: 97%
48: 97%
49: 98%
50: 98%
51: 98%
52: 98%
53: 98%
54: 98%
55: 98%
56: 98%
57: 98%
58: 98%
59: 98%
60: 99%
61: 99%
62: 99%
63: 99%
64: 99%
So on x86 we'll fit 89% of filenames into the inline name.
The patch also removes the NAME_ALLOC_LEN() rounding-up of the storage for the
out-of-line names. That seems unnecessary.
Diffstat (limited to 'include/linux/dcache.h')
| -rw-r--r-- | include/linux/dcache.h | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/include/linux/dcache.h b/include/linux/dcache.h index 74f22a171e19..7b612005423b 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h @@ -74,8 +74,6 @@ full_name_hash(const unsigned char *name, unsigned int len) return end_name_hash(hash); } -#define DNAME_INLINE_LEN_MIN 24 - struct dcookie_struct; struct dentry { @@ -101,11 +99,9 @@ struct dentry { struct qstr d_name; struct hlist_node d_hash; /* lookup hash list */ struct hlist_head * d_bucket; /* lookup hash bucket */ - unsigned char d_iname[DNAME_INLINE_LEN_MIN]; /* small names */ + unsigned char d_iname[0]; /* small names */ }; -#define DNAME_INLINE_LEN (sizeof(struct dentry)-offsetof(struct dentry,d_iname)) - struct dentry_operations { int (*d_revalidate)(struct dentry *, struct nameidata *); int (*d_hash) (struct dentry *, struct qstr *); |
