From 021404bb6adb529ef0c1e1c631da357faf2591ba Mon Sep 17 00:00:00 2001 From: Mark Fasheh Date: Tue, 22 Aug 2017 14:34:29 -0500 Subject: [PATCH] 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 --- kmod/src/format.h | 3 +-- kmod/src/inode.c | 11 ++--------- kmod/src/ioctl.c | 4 +--- kmod/src/ioctl.h | 3 +-- kmod/src/key.c | 1 - kmod/src/lock.c | 5 ----- 6 files changed, 5 insertions(+), 22 deletions(-) diff --git a/kmod/src/format.h b/kmod/src/format.h index 2d3c449d..5be9ed58 100644 --- a/kmod/src/format.h +++ b/kmod/src/format.h @@ -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 diff --git a/kmod/src/inode.c b/kmod/src/inode.c index f7a81c13..2b7ddb0a 100644 --- a/kmod/src/inode.c +++ b/kmod/src/inode.c @@ -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); diff --git a/kmod/src/ioctl.c b/kmod/src/ioctl.c index 4780c9b3..3fe08339 100644 --- a/kmod/src/ioctl.c +++ b/kmod/src/ioctl.c @@ -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; diff --git a/kmod/src/ioctl.h b/kmod/src/ioctl.h index 52b0b4d4..2c980455 100644 --- a/kmod/src/ioctl.h +++ b/kmod/src/ioctl.h @@ -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, diff --git a/kmod/src/key.c b/kmod/src/key.c index da2b4ea5..40051d8a 100644 --- a/kmod/src/key.c +++ b/kmod/src/key.c @@ -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", diff --git a/kmod/src/lock.c b/kmod/src/lock.c index 9ce58738..16855530 100644 --- a/kmod/src/lock.c +++ b/kmod/src/lock.c @@ -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) {