bcachefs: Add time stats for btree updates
authorKent Overstreet <kent.overstreet@gmail.com>
Thu, 21 Mar 2019 20:28:57 +0000 (16:28 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:18 +0000 (17:08 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/bcachefs.h
fs/bcachefs/btree_io.c
fs/bcachefs/btree_types.h
fs/bcachefs/btree_update_interior.c
fs/bcachefs/btree_update_leaf.c

index 8bf1bfb7ec398078988afa15917fa8db32f6e99b..ea648753aec0761b011253b3fc7426da0575c7d5 100644 (file)
@@ -290,10 +290,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)           \
index 6f1b1e4317a0f542330da8c9d4797918f976b8de..d785e6ac22f7387c9d837e426e56d4002e7a32e4 100644 (file)
@@ -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);
 
@@ -988,7 +989,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);
index 2904239b79477ccfeea00c272a3bfe36d1d456cc..bcc14e40cf5e08a567f5ec5a6e64248cf76683d4 100644 (file)
@@ -274,6 +274,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;
index 31c1474cd4947e725c13b00d8692ee1500515732..8b96faf107f8f653863fabfca88a1cad0bc5098e 100644 (file)
@@ -1440,7 +1440,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
index d940fdf0147838df389ef6c6aad933687f5cb103..14e6a8d19df52b69e945436a1037d35f0430195c 100644 (file)
@@ -824,10 +824,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));
@@ -850,6 +850,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;
@@ -860,6 +863,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;