From: Chris Wright <chrisw@osdl.org>
To: Andrew Morton <akpm@osdl.org>
Cc: "Adam J. Richter" <adam@yggdrasil.com>,
maneesh@in.ibm.com, greg@kroah.com, linux-kernel@vger.kernel.org
Subject: Re: [Patch] Delete sysfs_dirent.s_count, saving ~100kB on my system
Date: Wed, 1 Dec 2004 15:51:59 -0800 [thread overview]
Message-ID: <20041201155159.N14339@build.pdx.osdl.net> (raw)
In-Reply-To: <20041201130703.79a3f3b5.akpm@osdl.org>; from akpm@osdl.org on Wed, Dec 01, 2004 at 01:07:03PM -0800
* Andrew Morton (akpm@osdl.org) wrote:
> That's all well and good, but sysfs_new_dirent() should be using a
> standalone slab cache for allocating sysfs_dirent instances. That way, we
> use 36 bytes for each one rather than 64.
Reasonable, here's a patch (lightly tested). Without, size-64 looks
like so:
size-64 4064 4108 76 52 1 : tunables 32 16 8 : slabdata 79 79 0 : globalstat 4263 4079 79 0 0 0 84 0 : cpustat 15986 337 12286 3
And with:
size-64 1196 1196 76 52 1 : tunables 32 16 8 : slabdata 23 23 0 : globalstat 1297 1196 23 0 0 0 84 0 : cpustat 12418 108 11349 1
sysfs_dir_cache 2862 2916 48 81 1 : tunables 32 16 8 : slabdata 36 36 0 : globalstat 2931 2874 36 0 0 0 113 0 : cpustat 2756 216 110 0
Allocate sysfs_dirent structures from their own slab.
Signed-off-by: Chris Wright <chrisw@osdl.org>
===== fs/sysfs/dir.c 1.31 vs edited =====
--- 1.31/fs/sysfs/dir.c 2004-11-17 16:00:00 -08:00
+++ edited/fs/sysfs/dir.c 2004-12-01 13:29:11 -08:00
@@ -36,7 +36,7 @@
{
struct sysfs_dirent * sd;
- sd = kmalloc(sizeof(*sd), GFP_KERNEL);
+ sd = kmem_cache_alloc(sysfs_dir_cachep, GFP_KERNEL);
if (!sd)
return NULL;
===== fs/sysfs/sysfs.h 1.14 vs edited =====
--- 1.14/fs/sysfs/sysfs.h 2004-10-30 06:15:11 -07:00
+++ edited/fs/sysfs/sysfs.h 2004-12-01 13:58:42 -08:00
@@ -1,5 +1,6 @@
extern struct vfsmount * sysfs_mount;
+extern kmem_cache_t *sysfs_dir_cachep;
extern struct inode * sysfs_new_inode(mode_t mode);
extern int sysfs_create(struct dentry *, int mode, int (*init)(struct inode *));
@@ -74,7 +75,7 @@
kobject_put(sl->target_kobj);
kfree(sl);
}
- kfree(sd);
+ kmem_cache_free(sysfs_dir_cachep, sd);
}
static inline struct sysfs_dirent * sysfs_get(struct sysfs_dirent * sd)
===== fs/sysfs/mount.c 1.11 vs edited =====
--- 1.11/fs/sysfs/mount.c 2004-10-30 06:10:49 -07:00
+++ edited/fs/sysfs/mount.c 2004-12-01 14:43:44 -08:00
@@ -16,6 +16,7 @@
struct vfsmount *sysfs_mount;
struct super_block * sysfs_sb = NULL;
+kmem_cache_t *sysfs_dir_cachep;
static struct super_operations sysfs_ops = {
.statfs = simple_statfs,
@@ -76,7 +77,13 @@
int __init sysfs_init(void)
{
- int err;
+ int err = -ENOMEM;
+
+ sysfs_dir_cachep = kmem_cache_create("sysfs_dir_cache",
+ sizeof(struct sysfs_dirent),
+ 0, 0, NULL, NULL);
+ if (!sysfs_dir_cachep)
+ goto out;
err = register_filesystem(&sysfs_fs_type);
if (!err) {
@@ -85,7 +92,13 @@
printk(KERN_ERR "sysfs: could not mount!\n");
err = PTR_ERR(sysfs_mount);
sysfs_mount = NULL;
+ goto out_err;
}
- }
+ } else
+ goto out_err;
+out:
return err;
+out_err:
+ kmem_cache_destroy(sysfs_dir_cachep);
+ goto out;
}
next prev parent reply other threads:[~2004-12-01 23:58 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-12-01 18:56 Adam J. Richter
2004-12-01 21:07 ` Andrew Morton
2004-12-01 23:51 ` Chris Wright [this message]
2004-12-17 23:27 ` Greg KH
2004-12-30 13:34 ` Maneesh Soni
-- strict thread matches above, loose matches on Subject: below --
2004-12-02 2:59 Adam J. Richter
2004-11-23 4:08 Adam J. Richter
2004-11-22 19:17 Adam J. Richter
2004-11-22 22:53 ` Maneesh Soni
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=20041201155159.N14339@build.pdx.osdl.net \
--to=chrisw@osdl.org \
--cc=adam@yggdrasil.com \
--cc=akpm@osdl.org \
--cc=greg@kroah.com \
--cc=linux-kernel@vger.kernel.org \
--cc=maneesh@in.ibm.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
Powered by JetHome