diff options
author | Tao Ma <tao.ma@oracle.com> | 2009-02-24 11:53:23 -0500 |
---|---|---|
committer | Mark Fasheh <mfasheh@suse.com> | 2009-04-03 14:39:17 -0400 |
commit | 138211515c102807a16c02fdc15feef1f6ef8124 (patch) | |
tree | 9b6fff8512a19792f2e29458292607f4efb413c4 /fs/ocfs2/inode.h | |
parent | 1d46dc08d33138c29c63d717807c08ab704fc773 (diff) |
ocfs2: Optimize inode allocation by remembering last group
In ocfs2, the inode block search looks for the "emptiest" inode
group to allocate from. So if an inode alloc file has many equally
(or almost equally) empty groups, new inodes will tend to get
spread out amongst them, which in turn can put them all over the
disk. This is undesirable because directory operations on conceptually
"nearby" inodes force a large number of seeks.
So we add ip_last_used_group in core directory inodes which records
the last used allocation group. Another field named ip_last_used_slot
is also added in case inode stealing happens. When claiming new inode,
we passed in directory's inode so that the allocation can use this
information.
For more details, please see
http://oss.oracle.com/osswiki/OCFS2/DesignDocs/InodeAllocationStrategy.
Signed-off-by: Tao Ma <tao.ma@oracle.com>
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
Diffstat (limited to 'fs/ocfs2/inode.h')
-rw-r--r-- | fs/ocfs2/inode.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/ocfs2/inode.h b/fs/ocfs2/inode.h index eb3c302b38d3..e1978acbf65e 100644 --- a/fs/ocfs2/inode.h +++ b/fs/ocfs2/inode.h | |||
@@ -72,6 +72,10 @@ struct ocfs2_inode_info | |||
72 | 72 | ||
73 | struct inode vfs_inode; | 73 | struct inode vfs_inode; |
74 | struct jbd2_inode ip_jinode; | 74 | struct jbd2_inode ip_jinode; |
75 | |||
76 | /* Only valid if the inode is the dir. */ | ||
77 | u32 ip_last_used_slot; | ||
78 | u64 ip_last_used_group; | ||
75 | }; | 79 | }; |
76 | 80 | ||
77 | /* | 81 | /* |