Now we have counters for how many times jouranl is reclaimed, how many
times cached dirty btree nodes are flushed, but we don't know how many
jouranl buckets are really reclaimed.

This patch adds reclaimed_journal_buckets into struct cache_set, this
is an increasing only counter, to tell how many journal buckets are
reclaimed since cache set runs. From all these three counters (reclaim,
reclaimed_journal_buckets, flush_write), we can have idea how well
current journal space reclaim code works.

Signed-off-by: Coly Li <[email protected]>
---
 drivers/md/bcache/bcache.h  | 1 +
 drivers/md/bcache/journal.c | 1 +
 drivers/md/bcache/sysfs.c   | 5 +++++
 3 files changed, 7 insertions(+)

diff --git a/drivers/md/bcache/bcache.h b/drivers/md/bcache/bcache.h
index 35396248a7d5..013e35a9e317 100644
--- a/drivers/md/bcache/bcache.h
+++ b/drivers/md/bcache/bcache.h
@@ -705,6 +705,7 @@ struct cache_set {
        atomic_long_t           writeback_keys_failed;
 
        atomic_long_t           reclaim;
+       atomic_long_t           reclaimed_journal_buckets;
        atomic_long_t           flush_write;
 
        enum                    {
diff --git a/drivers/md/bcache/journal.c b/drivers/md/bcache/journal.c
index 4a7cc1bf8e3a..39580692339c 100644
--- a/drivers/md/bcache/journal.c
+++ b/drivers/md/bcache/journal.c
@@ -614,6 +614,7 @@ static void journal_reclaim(struct cache_set *c)
                k->ptr[n++] = MAKE_PTR(0,
                                  bucket_to_sector(c, ca->sb.d[ja->cur_idx]),
                                  ca->sb.nr_this_dev);
+               atomic_long_inc(&c->reclaimed_journal_buckets);
        }
 
        if (n) {
diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
index 80ead1a205b9..2ec1f2a90f4a 100644
--- a/drivers/md/bcache/sysfs.c
+++ b/drivers/md/bcache/sysfs.c
@@ -80,6 +80,7 @@ read_attribute(bset_tree_stats);
 read_attribute(state);
 read_attribute(cache_read_races);
 read_attribute(reclaim);
+read_attribute(reclaimed_journal_buckets);
 read_attribute(flush_write);
 read_attribute(writeback_keys_done);
 read_attribute(writeback_keys_failed);
@@ -691,6 +692,9 @@ SHOW(__bch_cache_set)
        sysfs_print(reclaim,
                    atomic_long_read(&c->reclaim));
 
+       sysfs_print(reclaimed_journal_buckets,
+                   atomic_long_read(&c->reclaimed_journal_buckets));
+
        sysfs_print(flush_write,
                    atomic_long_read(&c->flush_write));
 
@@ -909,6 +913,7 @@ static struct attribute *bch_cache_set_internal_files[] = {
        &sysfs_bset_tree_stats,
        &sysfs_cache_read_races,
        &sysfs_reclaim,
+       &sysfs_reclaimed_journal_buckets,
        &sysfs_flush_write,
        &sysfs_writeback_keys_done,
        &sysfs_writeback_keys_failed,
-- 
2.16.4

Reply via email to