]> git.hungrycats.org Git - linux/commitdiff
[PATCH] remove cacheline alignment from inode slabs
authorAnton Blanchard <anton@samba.org>
Tue, 24 Aug 2004 04:34:08 +0000 (21:34 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 24 Aug 2004 04:34:08 +0000 (21:34 -0700)
Most of the inode slabs are cacheline aligned.  This can waste a fair
amount of memory, especially on architectures with large cacheline sizes
(eg 128 bytes).

Alignment has a few advantages.  It prevents 2 cpus from accessing 2 data
structures in the same cacheline.  Since struct inodes are well over a
cacheline and there are so many of them, there is little chance we will hit
this problem if we remove the alignment.

Alignment also ensures the maximum amount of the data structure is in the
same cacheline (instead of straddling 2 for example).  The large size of
struct inode reduces this advantage.

With this patch the inode_cache slab goes from 640 bytes to 544 bytes, and
the number that fits in a 4kB slab goes from 6 to 7 on ppc64.  A number of
other inode slabs also see improvements.

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
27 files changed:
fs/adfs/super.c
fs/affs/super.c
fs/befs/linuxvfs.c
fs/bfs/inode.c
fs/cifs/cifsfs.c
fs/coda/inode.c
fs/efs/super.c
fs/ext2/super.c
fs/ext3/super.c
fs/fat/inode.c
fs/hpfs/super.c
fs/inode.c
fs/isofs/inode.c
fs/jffs2/super.c
fs/minix/inode.c
fs/ncpfs/inode.c
fs/nfs/inode.c
fs/ntfs/super.c
fs/proc/inode.c
fs/qnx4/inode.c
fs/reiserfs/super.c
fs/romfs/inode.c
fs/smbfs/inode.c
fs/sysv/inode.c
fs/udf/super.c
fs/ufs/super.c
fs/xfs/linux-2.6/xfs_super.c

index e9462e76ac4cda57aa2b63aaf6b0cf271ed2ddb7..2f3b18e23a97d53f795ef3095991fe55686f95d3 100644 (file)
@@ -241,7 +241,7 @@ static int init_inodecache(void)
 {
        adfs_inode_cachep = kmem_cache_create("adfs_inode_cache",
                                             sizeof(struct adfs_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (adfs_inode_cachep == NULL)
                return -ENOMEM;
index f4ebbd27ef1bf4e1931147b7d1c183b8e33d1171..a0358130f498a401c0dba75e626327ba4829029b 100644 (file)
@@ -115,7 +115,7 @@ static int init_inodecache(void)
 {
        affs_inode_cachep = kmem_cache_create("affs_inode_cache",
                                             sizeof(struct affs_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (affs_inode_cachep == NULL)
                return -ENOMEM;
index 49cf3428d51138431bccab0cf78e0aaeeed94cef..84e932ecda71109cc89d2402a0ad6859ca78f22c 100644 (file)
@@ -433,7 +433,7 @@ befs_init_inodecache(void)
 {
        befs_inode_cachep = kmem_cache_create("befs_inode_cache",
                                              sizeof (struct befs_inode_info),
-                                             0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                             0, SLAB_RECLAIM_ACCOUNT,
                                              init_once, NULL);
        if (befs_inode_cachep == NULL) {
                printk(KERN_ERR "befs_init_inodecache: "
index 9ef5b3146f2c66b6e88a7804fa4292d0de627b70..b163efd7a2708d5d75ef7ce6bf71a4c92f7e1542 100644 (file)
@@ -245,7 +245,7 @@ static int init_inodecache(void)
 {
        bfs_inode_cachep = kmem_cache_create("bfs_inode_cache",
                                             sizeof(struct bfs_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (bfs_inode_cachep == NULL)
                return -ENOMEM;
index fbc737e2eeb339c3b8bd792b3bc6a0cb28a25d15..132d3af8fba82b1a92530c68dbb5738da8775b0f 100644 (file)
@@ -561,7 +561,7 @@ cifs_init_inodecache(void)
 {
        cifs_inode_cachep = kmem_cache_create("cifs_inode_cache",
                                              sizeof (struct cifsInodeInfo),
-                                             0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                             0, SLAB_RECLAIM_ACCOUNT,
                                              cifs_init_once, NULL);
        if (cifs_inode_cachep == NULL)
                return -ENOMEM;
index 9d39ef496b6278394c3e8f8069918f2828e260c5..11b7eb1e7a46cd350e8d27e2076f45ad8300d804 100644 (file)
@@ -69,7 +69,7 @@ int coda_init_inodecache(void)
 {
        coda_inode_cachep = kmem_cache_create("coda_inode_cache",
                                sizeof(struct coda_inode_info),
-                               0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                               0, SLAB_RECLAIM_ACCOUNT,
                                init_once, NULL);
        if (coda_inode_cachep == NULL)
                return -ENOMEM;
index d4910e43a154af4ddc3428c680d288d3c5eb5fa2..01444a0b0569560ca90de0b8665e5c3e18b4ba5d 100644 (file)
@@ -58,7 +58,7 @@ static int init_inodecache(void)
 {
        efs_inode_cachep = kmem_cache_create("efs_inode_cache",
                                sizeof(struct efs_inode_info),
-                               0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                               0, SLAB_RECLAIM_ACCOUNT,
                                init_once, NULL);
        if (efs_inode_cachep == NULL)
                return -ENOMEM;
index aeef14cd3fd4fa6ddf2db4e4c39ea502f36efa5d..28a820e3f27ae0af1d5b926bcb071df9e3a80628 100644 (file)
@@ -190,7 +190,7 @@ static int init_inodecache(void)
 {
        ext2_inode_cachep = kmem_cache_create("ext2_inode_cache",
                                             sizeof(struct ext2_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (ext2_inode_cachep == NULL)
                return -ENOMEM;
index ee7dcaa1f1954bc3b8b2b6f200d96e8ee65f4ae9..1274b1f790b01a2bb2ed52b840030a5e7b8b6122 100644 (file)
@@ -477,7 +477,7 @@ static int init_inodecache(void)
 {
        ext3_inode_cachep = kmem_cache_create("ext3_inode_cache",
                                             sizeof(struct ext3_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (ext3_inode_cachep == NULL)
                return -ENOMEM;
index c0fc6b7d6a9874deec9e948429b985edc6d13950..a85a9eea09a6871526f070cb1489a21fc8ca0c85 100644 (file)
@@ -744,7 +744,7 @@ int __init fat_init_inodecache(void)
 {
        fat_inode_cachep = kmem_cache_create("fat_inode_cache",
                                             sizeof(struct msdos_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (fat_inode_cachep == NULL)
                return -ENOMEM;
index 714f64447d6ed812a2e6bdaffda451b23ceb55c2..34074b3782c3a190e5a9a9771d0573f601d81dfd 100644 (file)
@@ -191,7 +191,7 @@ static int init_inodecache(void)
 {
        hpfs_inode_cachep = kmem_cache_create("hpfs_inode_cache",
                                             sizeof(struct hpfs_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (hpfs_inode_cachep == NULL)
                return -ENOMEM;
index b87572e8587ed7384ad710c7e3a7a20702fea3a2..eab34bcf84ab1bcbdefe686641daf2dfbc38cfc1 100644 (file)
@@ -1373,8 +1373,7 @@ void __init inode_init(unsigned long mempages)
 
        /* inode slab cache */
        inode_cachep = kmem_cache_create("inode_cache", sizeof(struct inode),
-                               0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, init_once,
-                               NULL);
+                               0, SLAB_PANIC, init_once, NULL);
        set_shrinker(DEFAULT_SEEKS, shrink_icache_memory);
 }
 
index 491dcde30a0e4b488f142306cfe7b3571bd50c3a..aa22a669c957397d9aa5844f84de6c03523f1f99 100644 (file)
@@ -108,7 +108,7 @@ static int init_inodecache(void)
 {
        isofs_inode_cachep = kmem_cache_create("isofs_inode_cache",
                                             sizeof(struct iso_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (isofs_inode_cachep == NULL)
                return -ENOMEM;
index c37fb163ef811f86c629add0c3d9d72fbd787372..3bc1b92b450b4b02fa2c48c5a428593fb458d5b9 100644 (file)
@@ -302,7 +302,7 @@ static int __init init_jffs2_fs(void)
 
        jffs2_inode_cachep = kmem_cache_create("jffs2_i",
                                             sizeof(struct jffs2_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             jffs2_i_init_once, NULL);
        if (!jffs2_inode_cachep) {
                printk(KERN_ERR "JFFS2 error: Failed to initialise inode cache\n");
index 9295de94df66a319b747bcf7be2a91a79e1951c0..e93ebd55f8618b35475051f13fa44aea1adbef0e 100644 (file)
@@ -79,7 +79,7 @@ static int init_inodecache(void)
 {
        minix_inode_cachep = kmem_cache_create("minix_inode_cache",
                                             sizeof(struct minix_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (minix_inode_cachep == NULL)
                return -ENOMEM;
index bea651fd2f94308acde143bbb2167e4dfb212236..8e64b6759a2d45cfb43a84788c63d6f3de2e8c22 100644 (file)
@@ -72,7 +72,7 @@ static int init_inodecache(void)
 {
        ncp_inode_cachep = kmem_cache_create("ncp_inode_cache",
                                             sizeof(struct ncp_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (ncp_inode_cachep == NULL)
                return -ENOMEM;
index 243b5750287ae648c5b804985b127cec798a639f..fb627a12d53b2fea93039916505a2ca9cf66a94b 100644 (file)
@@ -1859,7 +1859,7 @@ int nfs_init_inodecache(void)
 {
        nfs_inode_cachep = kmem_cache_create("nfs_inode_cache",
                                             sizeof(struct nfs_inode),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (nfs_inode_cachep == NULL)
                return -ENOMEM;
index ba072f58a2e98991210318dbb5a686279a2c8430..faaccbe16b6907af4d4ae1cdd9fa5485ce600bd6 100644 (file)
@@ -2638,7 +2638,7 @@ static int __init init_ntfs_fs(void)
 
        ntfs_inode_cache = kmem_cache_create(ntfs_inode_cache_name,
                        sizeof(ntfs_inode), 0,
-                       SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT, NULL, NULL);
+                       SLAB_RECLAIM_ACCOUNT, NULL, NULL);
        if (!ntfs_inode_cache) {
                printk(KERN_CRIT "NTFS: Failed to create %s!\n",
                                ntfs_inode_cache_name);
index 2d38f02c9e4eb8d69a812649ad719f69ee74b564..d8d976d5f39ad772ed6851cf385a5b455712182a 100644 (file)
@@ -120,7 +120,7 @@ int __init proc_init_inodecache(void)
 {
        proc_inode_cachep = kmem_cache_create("proc_inode_cache",
                                             sizeof(struct proc_inode),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (proc_inode_cachep == NULL)
                return -ENOMEM;
index 19b7d5a053e1968963333f1bc315226744b2ce89..ed36a8bb72cd92aa1398f47b84ceab3bec35844c 100644 (file)
@@ -544,7 +544,7 @@ static int init_inodecache(void)
 {
        qnx4_inode_cachep = kmem_cache_create("qnx4_inode_cache",
                                             sizeof(struct qnx4_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (qnx4_inode_cachep == NULL)
                return -ENOMEM;
index a7e9e643ad33232cec662a0fad075cf01c2b4a3d..966d1adb07ffb0a144200a9bccd4638f1aca00c5 100644 (file)
@@ -444,7 +444,7 @@ static int init_inodecache(void)
 {
        reiserfs_inode_cachep = kmem_cache_create("reiser_inode_cache",
                                             sizeof(struct reiserfs_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (reiserfs_inode_cachep == NULL)
                return -ENOMEM;
index 28c863a2e47e8cb739998da2f7ce07b4693eeedc..3611cc0df95a83d00e3168670188a31fd3c5c75f 100644 (file)
@@ -579,7 +579,7 @@ static int init_inodecache(void)
 {
        romfs_inode_cachep = kmem_cache_create("romfs_inode_cache",
                                             sizeof(struct romfs_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (romfs_inode_cachep == NULL)
                return -ENOMEM;
index c8ca98ab273e2aa181df4378ea37a67ee442a523..1001a64b35da5a4fb0e3a5e847a5bf3581730301 100644 (file)
@@ -80,7 +80,7 @@ static int init_inodecache(void)
 {
        smb_inode_cachep = kmem_cache_create("smb_inode_cache",
                                             sizeof(struct smb_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (smb_inode_cachep == NULL)
                return -ENOMEM;
index 2be44b7a9f74d3e79b769624b729def3f18a301a..45e077653a1d856965665daa6f4f918928ad9f59 100644 (file)
@@ -340,7 +340,7 @@ int __init sysv_init_icache(void)
 {
        sysv_inode_cachep = kmem_cache_create("sysv_inode_cache",
                        sizeof(struct sysv_inode_info), 0,
-                       SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT, 
+                       SLAB_RECLAIM_ACCOUNT,
                        init_once, NULL);
        if (!sysv_inode_cachep)
                return -ENOMEM;
index eff7d84724160a9c0b6f62889accec0b2d1eb139..c132a95052f7679845be2371c31854372ef04878 100644 (file)
@@ -145,7 +145,7 @@ static int init_inodecache(void)
 {
        udf_inode_cachep = kmem_cache_create("udf_inode_cache",
                                             sizeof(struct udf_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (udf_inode_cachep == NULL)
                return -ENOMEM;
index 43475183b12d2e0cb3b87e3e9cdcfe5706d0ff4c..e2c45d0e2cfa75e059431432bb981cc6d00335d7 100644 (file)
@@ -1183,7 +1183,7 @@ static int init_inodecache(void)
 {
        ufs_inode_cachep = kmem_cache_create("ufs_inode_cache",
                                             sizeof(struct ufs_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (ufs_inode_cachep == NULL)
                return -ENOMEM;
index fc7d4ce32f0887ca1c8b01b794e0a25bf2d3f596..3737a1cf66386fddabb5ee0ad2db4fd6d0c5bbea 100644 (file)
@@ -335,8 +335,7 @@ STATIC int
 init_inodecache( void )
 {
        linvfs_inode_zone = kmem_cache_create("linvfs_icache",
-                               sizeof(vnode_t), 0,
-                               SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                               sizeof(vnode_t), 0, SLAB_RECLAIM_ACCOUNT,
                                init_once, NULL);
 
        if (linvfs_inode_zone == NULL)