summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2019-03-21 16:28:57 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2019-03-21 16:28:57 -0400
commitcec68342cb27fc18668402dc4e637abeadf9f6cd (patch)
treeab846548721120509e04f2755caed3472f9c2760
parentb8f6c60d8bb50abb4b47dfca8fccde1074f5578c (diff)
bcachefs: Add time stats for btree updates
-rw-r--r--fs/bcachefs/bcachefs.h7
-rw-r--r--fs/bcachefs/btree_io.c8
-rw-r--r--fs/bcachefs/btree_types.h1
-rw-r--r--fs/bcachefs/btree_update_interior.c3
-rw-r--r--fs/bcachefs/btree_update_leaf.c13
5 files changed, 23 insertions, 9 deletions
diff --git a/fs/bcachefs/bcachefs.h b/fs/bcachefs/bcachefs.h
index 028b4b8249bb..4492a9276fd2 100644
--- a/fs/bcachefs/bcachefs.h
+++ b/fs/bcachefs/bcachefs.h
@@ -287,10 +287,11 @@ do { \
#define BCH_TIME_STATS() \
x(btree_node_mem_alloc) \
+ x(btree_node_split) \
+ x(btree_node_sort) \
+ x(btree_node_read) \
x(btree_gc) \
- x(btree_split) \
- x(btree_sort) \
- x(btree_read) \
+ x(btree_update) \
x(btree_lock_contended_read) \
x(btree_lock_contended_intent) \
x(btree_lock_contended_write) \
diff --git a/fs/bcachefs/btree_io.c b/fs/bcachefs/btree_io.c
index 25aa22a017ac..f2107cf7ca5b 100644
--- a/fs/bcachefs/btree_io.c
+++ b/fs/bcachefs/btree_io.c
@@ -327,7 +327,7 @@ static void btree_node_sort(struct bch_fs *c, struct btree *b,
BUG_ON(vstruct_end(&out->keys) > (void *) out + (PAGE_SIZE << order));
if (sorting_entire_node)
- bch2_time_stats_update(&c->times[BCH_TIME_btree_sort],
+ bch2_time_stats_update(&c->times[BCH_TIME_btree_node_sort],
start_time);
/* Make sure we preserve bset journal_seq: */
@@ -403,7 +403,8 @@ void bch2_btree_sort_into(struct bch_fs *c,
&dst->format,
true);
- bch2_time_stats_update(&c->times[BCH_TIME_btree_sort], start_time);
+ bch2_time_stats_update(&c->times[BCH_TIME_btree_node_sort],
+ start_time);
set_btree_bset_end(dst, dst->set);
@@ -989,7 +990,8 @@ start:
}
}
- bch2_time_stats_update(&c->times[BCH_TIME_btree_read], rb->start_time);
+ bch2_time_stats_update(&c->times[BCH_TIME_btree_node_read],
+ rb->start_time);
bio_put(&rb->bio);
clear_btree_node_read_in_flight(b);
wake_up_bit(&b->flags, BTREE_NODE_read_in_flight);
diff --git a/fs/bcachefs/btree_types.h b/fs/bcachefs/btree_types.h
index 0521a3cd7c84..d566722aa482 100644
--- a/fs/bcachefs/btree_types.h
+++ b/fs/bcachefs/btree_types.h
@@ -273,6 +273,7 @@ struct btree_insert_entry {
struct btree_trans {
struct bch_fs *c;
size_t nr_restarts;
+ u64 commit_start;
u64 iters_live;
u64 iters_linked;
diff --git a/fs/bcachefs/btree_update_interior.c b/fs/bcachefs/btree_update_interior.c
index 6537ed50d9e5..47196c14096b 100644
--- a/fs/bcachefs/btree_update_interior.c
+++ b/fs/bcachefs/btree_update_interior.c
@@ -1439,7 +1439,8 @@ static void btree_split(struct btree_update *as, struct btree *b,
bch2_btree_iter_verify_locks(iter);
- bch2_time_stats_update(&c->times[BCH_TIME_btree_split], start_time);
+ bch2_time_stats_update(&c->times[BCH_TIME_btree_node_split],
+ start_time);
}
static void
diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c
index 3617dc45ad1c..70d16148ab98 100644
--- a/fs/bcachefs/btree_update_leaf.c
+++ b/fs/bcachefs/btree_update_leaf.c
@@ -823,10 +823,10 @@ int bch2_trans_commit(struct btree_trans *trans,
{
struct bch_fs *c = trans->c;
struct btree_insert_entry *i;
- int ret;
+ int ret = 0;
if (!trans->nr_updates)
- return 0;
+ goto out;
/* for the sake of sanity: */
BUG_ON(trans->nr_updates > 1 && !(flags & BTREE_INSERT_ATOMIC));
@@ -849,6 +849,9 @@ int bch2_trans_commit(struct btree_trans *trans,
!percpu_ref_tryget(&c->writes)))
return -EROFS;
+ if (!trans->commit_start)
+ trans->commit_start = local_clock();
+
ret = bch2_trans_journal_preres_get(trans);
if (ret)
goto err;
@@ -859,6 +862,12 @@ err:
if (unlikely(!(trans->flags & BTREE_INSERT_NOCHECK_RW)))
percpu_ref_put(&c->writes);
+out:
+ if (!ret && trans->commit_start) {
+ bch2_time_stats_update(&c->times[BCH_TIME_btree_update],
+ trans->commit_start);
+ trans->commit_start = 0;
+ }
trans->nr_updates = 0;