Re: [RFC] [PATCH 1/8] inode_diet: Replace inode.u.generic_ip with inode.i_private



Hi,

On Tue, 2006-06-20 at 13:45 +0200, Arnd Bergmann wrote:
On Tuesday 20 June 2006 11:43, Steven Whitehouse wrote:
As a further suggestion, I wonder do we really need i_private at all?
Since we have sb->s_op->alloc_inode and inode->i_sb->s_op->destroy_inode
if all filesystems did something along the following lines:

struct myfs_inode {
struct inode i_inode;
...
};

#define MYFS_I(inode) container_of((inode), struct myfs_inode, i_inode)

then it would seem that i_private is redundant. If there is a file
system which does genuinely need a pointer here (if indeed such a
filesystem does exist, I haven't actually checked that) then a pointer
can just be added as the one single other member of (in my example)
struct myfs_inode.

That would mean that all file systems need to implement ->alloc_inode,
which in turn need slab caches that eat consume memory even when
the file system is not mounted.

Yes, although I'm not sure that it would be as significant as the memory
saved by removing the pointer bearing in mind the relative numbers of
the structures that you'd expect to see in a "normal" working system. We
could also try and reduce this by creating a special inode cache which
would be shared by all filesystems which did still need just struct
inode + private pointer for example.

What you do gain though is (on umount of a filesystem) a much greater
likelihood of being able to reclaim the memory which was being used by
the inodes of that particular filesystem (particularly so if you only
have a single mounted filesystem of a particular type). So hopefully
having a separate slab cache per fstype would help reduce memory
fragmentation, and more than compensate for the difference.

In fact a number of filesystems already have slab caches for their own
private part of the inode anyway... I count 10 of those on my current
development box.

Something as simple as nfsctl or devpts should not need that.

Arnd <><

Steve.


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



Relevant Pages

  • Re: [RFC] Union Mount: Readdir approaches
    ... I am developing a linux stackable/unification filesystem too. ... it consumes much memory and cpu, ... array for the underlying inode pointers. ... - the vritual dir inode object has a cache for its child entries. ...
    (Linux-Kernel)
  • [RFC][PATCH] VFS: update documentation (take #2)
    ... filesystem interface to userspace programs. ... These are taken from the inode data. ... owner: for internal VFS use: you should initialize this to NULL ... struct super_block *sb: the superblock structure. ...
    (Linux-Kernel)
  • [PATCH 2/11] FUSE - core
    ... This patch adds FUSE core. ... +# Makefile for the FUSE filesystem. ... +struct fuse_inode { ... +static inline u64 get_node_id(struct inode *inode) ...
    (Linux-Kernel)
  • [PATCH 2/11] FUSE - core
    ... This patch adds FUSE core. ... +# Makefile for the FUSE filesystem. ... +struct fuse_inode { ... +static inline u64 get_node_id(struct inode *inode) ...
    (Linux-Kernel)
  • [RFC] LogFS
    ... I've been hacking on a small filesystem. ... +This filesystem started with the codename "Logfs", ... +struct logfs_disk_super { ... +static inline void logfs_iput(struct inode *inode) ...
    (Linux-Kernel)