scoutfs: remove inode ctime index

Like the mtime index, this index is unused. Removing it is a near
identical task. Running the same createmany test from our last
patch gives us the following:

 $ createmany -o '/scoutfs/file_%lu' 10000000

 total: 10000000 creates in 598.28 seconds: 16714.59 creates/second

 real    9m58.292s
 user    0m7.420s
 sys     5m44.632s

So after both indices are gone, we go from a 12m56 run time to 9m58s,
saving almost 3 minutes which translates into a total performance
increase of about 23%.

Signed-off-by: Mark Fasheh <mfasheh@versity.com>
This commit is contained in:
Mark Fasheh
2017-08-22 15:59:13 -07:00
committed by Zach Brown
parent d59367262d
commit 021404bb6a
6 changed files with 5 additions and 22 deletions
+1 -2
View File
@@ -243,13 +243,12 @@ struct scoutfs_segment_block {
#define SCOUTFS_FS_ZONE 3
/* inode index zone */
#define SCOUTFS_INODE_INDEX_CTIME_TYPE 1
#define SCOUTFS_INODE_INDEX_SIZE_TYPE 3
#define SCOUTFS_INODE_INDEX_META_SEQ_TYPE 4
#define SCOUTFS_INODE_INDEX_DATA_SEQ_TYPE 5
#define SCOUTFS_INODE_INDEX_NR \
(SCOUTFS_INODE_INDEX_DATA_SEQ_TYPE - SCOUTFS_INODE_INDEX_CTIME_TYPE + 1)
(SCOUTFS_INODE_INDEX_DATA_SEQ_TYPE - SCOUTFS_INODE_INDEX_SIZE_TYPE + 1)
/* node zone */
#define SCOUTFS_FREE_EXTENT_BLKNO_TYPE 11
+2 -9
View File
@@ -582,11 +582,7 @@ void scoutfs_update_inode_item(struct inode *inode)
/* only race with other inode field stores once */
store_inode(&sinode, inode);
ret = update_index(sb, si, ino, SCOUTFS_INODE_INDEX_CTIME_TYPE,
le64_to_cpu(sinode.ctime.sec),
le32_to_cpu(sinode.ctime.nsec),
si->item_ctime.tv_sec, si->item_ctime.tv_nsec) ?:
update_index(sb, si, ino, SCOUTFS_INODE_INDEX_SIZE_TYPE,
ret = update_index(sb, si, ino, SCOUTFS_INODE_INDEX_SIZE_TYPE,
le64_to_cpu(sinode.size), 0, si->item_size, 0) ?:
update_index(sb, si, ino, SCOUTFS_INODE_INDEX_META_SEQ_TYPE,
le64_to_cpu(sinode.meta_seq), 0,
@@ -650,10 +646,7 @@ static int remove_index_items(struct super_block *sb, u64 ino,
umode_t mode = le32_to_cpu(sinode->mode);
int ret;
ret = remove_index(sb, ino, SCOUTFS_INODE_INDEX_CTIME_TYPE,
le64_to_cpu(sinode->ctime.sec),
le32_to_cpu(sinode->ctime.nsec)) ?:
remove_index(sb, ino, SCOUTFS_INODE_INDEX_SIZE_TYPE,
ret = remove_index(sb, ino, SCOUTFS_INODE_INDEX_SIZE_TYPE,
le64_to_cpu(sinode->size), 0) ?:
remove_index(sb, ino, SCOUTFS_INODE_INDEX_META_SEQ_TYPE,
le64_to_cpu(sinode->meta_seq), 0);
+1 -3
View File
@@ -73,9 +73,7 @@ static long scoutfs_ioc_walk_inodes(struct file *file, unsigned long arg)
walk.first.ino, walk.last.major, walk.last.minor,
walk.last.ino);
if (walk.index == SCOUTFS_IOC_WALK_INODES_CTIME)
type = SCOUTFS_INODE_INDEX_CTIME_TYPE;
else if (walk.index == SCOUTFS_IOC_WALK_INODES_SIZE)
if (walk.index == SCOUTFS_IOC_WALK_INODES_SIZE)
type = SCOUTFS_INODE_INDEX_SIZE_TYPE;
else if (walk.index == SCOUTFS_IOC_WALK_INODES_META_SEQ)
type = SCOUTFS_INODE_INDEX_META_SEQ_TYPE;
+1 -2
View File
@@ -53,8 +53,7 @@ struct scoutfs_ioctl_walk_inodes {
} __packed;
enum {
SCOUTFS_IOC_WALK_INODES_CTIME = 0,
SCOUTFS_IOC_WALK_INODES_SIZE,
SCOUTFS_IOC_WALK_INODES_SIZE = 0,
SCOUTFS_IOC_WALK_INODES_META_SEQ,
SCOUTFS_IOC_WALK_INODES_DATA_SEQ,
SCOUTFS_IOC_WALK_INODES_UNKNOWN,
-1
View File
@@ -136,7 +136,6 @@ int scoutfs_key_str_size(char *buf, struct scoutfs_key_buf *key, size_t size)
case SCOUTFS_INODE_INDEX_ZONE: {
struct scoutfs_inode_index_key *ikey = key->data;
static char *type_strings[] = {
[SCOUTFS_INODE_INDEX_CTIME_TYPE] = "ctm",
[SCOUTFS_INODE_INDEX_SIZE_TYPE] = "siz",
[SCOUTFS_INODE_INDEX_META_SEQ_TYPE] = "msq",
[SCOUTFS_INODE_INDEX_DATA_SEQ_TYPE] = "dsq",
-5
View File
@@ -462,11 +462,6 @@ int scoutfs_lock_inode_index(struct super_block *sb, int mode,
int bit;
switch(type) {
case SCOUTFS_INODE_INDEX_CTIME_TYPE:
major_mask = (1 << 5) - 1;
ino_mask = ~0ULL;
break;
case SCOUTFS_INODE_INDEX_SIZE_TYPE:
major_mask = 0;
if (major) {