bcachefs: Add a sysfs var for average btree write size
authorKent Overstreet <kent.overstreet@gmail.com>
Thu, 1 Apr 2021 01:07:37 +0000 (21:07 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:58 +0000 (17:08 -0400)
Useful number for performance tuning.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/bcachefs.h
fs/bcachefs/btree_io.c
fs/bcachefs/sysfs.c

index 51aefecb5cbbaf2e848eb37f2d45d5c59765ac31..c5ff142871c7e72ceac8cd150b2548201dc5e4f5 100644 (file)
@@ -796,6 +796,9 @@ mempool_t           bio_bounce_pages;
        struct bio_set          dio_write_bioset;
        struct bio_set          dio_read_bioset;
 
+
+       atomic64_t              btree_writes_nr;
+       atomic64_t              btree_writes_sectors;
        struct bio_list         btree_write_error_list;
        struct work_struct      btree_write_error_work;
        spinlock_t              btree_write_error_lock;
index fc94782afb605e09b1cc70164a8d00a60826a63d..3b45389a8e068415bd307ca0f67443c0cf28d184 100644 (file)
@@ -1551,6 +1551,9 @@ void __bch2_btree_node_write(struct bch_fs *c, struct btree *b,
 
        b->written += sectors_to_write;
 
+       atomic64_inc(&c->btree_writes_nr);
+       atomic64_add(sectors_to_write, &c->btree_writes_sectors);
+
        /* XXX: submitting IO with btree locks held: */
        bch2_submit_wbio_replicas(&wbio->wbio, c, BCH_DATA_btree, k.k);
        bch2_bkey_buf_exit(&k, c);
index 4b83a98621d77abf0a815b601ab2532d82b207f5..dd9b54e0d80b696ae91d24659d2148a7e7c438eb 100644 (file)
@@ -153,6 +153,8 @@ read_attribute(io_latency_stats_read);
 read_attribute(io_latency_stats_write);
 read_attribute(congested);
 
+read_attribute(btree_avg_write_size);
+
 read_attribute(bucket_quantiles_last_read);
 read_attribute(bucket_quantiles_last_write);
 read_attribute(bucket_quantiles_fragmentation);
@@ -228,6 +230,14 @@ static size_t bch2_btree_cache_size(struct bch_fs *c)
        return ret;
 }
 
+static size_t bch2_btree_avg_write_size(struct bch_fs *c)
+{
+       u64 nr = atomic64_read(&c->btree_writes_nr);
+       u64 sectors = atomic64_read(&c->btree_writes_sectors);
+
+       return nr ? div64_u64(sectors, nr) : 0;
+}
+
 static int fs_alloc_debug_to_text(struct printbuf *out, struct bch_fs *c)
 {
        struct bch_fs_usage_online *fs_usage = bch2_fs_usage_read(c);
@@ -316,6 +326,7 @@ SHOW(bch2_fs)
        sysfs_print(block_size,                 block_bytes(c));
        sysfs_print(btree_node_size,            btree_bytes(c));
        sysfs_hprint(btree_cache_size,          bch2_btree_cache_size(c));
+       sysfs_hprint(btree_avg_write_size,      bch2_btree_avg_write_size(c));
 
        sysfs_print(read_realloc_races,
                    atomic_long_read(&c->read_realloc_races));
@@ -507,6 +518,7 @@ struct attribute *bch2_fs_files[] = {
        &sysfs_block_size,
        &sysfs_btree_node_size,
        &sysfs_btree_cache_size,
+       &sysfs_btree_avg_write_size,
 
        &sysfs_journal_write_delay_ms,
        &sysfs_journal_reclaim_delay_ms,