Skip to content

Commit

Permalink
bcache: add journal statistic
Browse files Browse the repository at this point in the history
Sometimes, Journal takes up a lot of CPU, we need statistics
to know what's the journal is doing. So this patch provide
some journal statistics:
1) reclaim: how many times the journal try to reclaim resource,
   usually the journal bucket or/and the pin are exhausted.
2) flush_write: how many times the journal try to flush btree node
   to cache device, usually the journal bucket are exhausted.
3) retry_flush_write: how many times the journal retry to flush
   the next btree node, usually the previous tree node have been
   flushed by other thread.
we show these statistic by sysfs interface. Through these statistics
We can totally see the status of journal module when the CPU is too
high.

Signed-off-by: Tang Junhui <tang.junhui@zte.com.cn>
Reviewed-by: Michael Lyle <mlyle@lyle.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
  • Loading branch information
Tang Junhui authored and Jens Axboe committed Feb 7, 2018
1 parent 30abb3a commit a728eac
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 0 deletions.
4 changes: 4 additions & 0 deletions drivers/md/bcache/bcache.h
Original file line number Diff line number Diff line change
Expand Up @@ -658,6 +658,10 @@ struct cache_set {
atomic_long_t writeback_keys_done;
atomic_long_t writeback_keys_failed;

atomic_long_t reclaim;
atomic_long_t flush_write;
atomic_long_t retry_flush_write;

enum {
ON_ERROR_UNREGISTER,
ON_ERROR_PANIC,
Expand Down
5 changes: 5 additions & 0 deletions drivers/md/bcache/journal.c
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,8 @@ static void btree_flush_write(struct cache_set *c)
*/
struct btree *b, *best;
unsigned i;

atomic_long_inc(&c->flush_write);
retry:
best = NULL;

Expand All @@ -397,6 +399,7 @@ static void btree_flush_write(struct cache_set *c)
if (!btree_current_write(b)->journal) {
mutex_unlock(&b->write_lock);
/* We raced */
atomic_long_inc(&c->retry_flush_write);
goto retry;
}

Expand Down Expand Up @@ -476,6 +479,8 @@ static void journal_reclaim(struct cache_set *c)
unsigned iter, n = 0;
atomic_t p;

atomic_long_inc(&c->reclaim);

while (!atomic_read(&fifo_front(&c->journal.pin)))
fifo_pop(&c->journal.pin, p);

Expand Down
15 changes: 15 additions & 0 deletions drivers/md/bcache/sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@ read_attribute(bset_tree_stats);

read_attribute(state);
read_attribute(cache_read_races);
read_attribute(reclaim);
read_attribute(flush_write);
read_attribute(retry_flush_write);
read_attribute(writeback_keys_done);
read_attribute(writeback_keys_failed);
read_attribute(io_errors);
Expand Down Expand Up @@ -545,6 +548,15 @@ SHOW(__bch_cache_set)
sysfs_print(cache_read_races,
atomic_long_read(&c->cache_read_races));

sysfs_print(reclaim,
atomic_long_read(&c->reclaim));

sysfs_print(flush_write,
atomic_long_read(&c->flush_write));

sysfs_print(retry_flush_write,
atomic_long_read(&c->retry_flush_write));

sysfs_print(writeback_keys_done,
atomic_long_read(&c->writeback_keys_done));
sysfs_print(writeback_keys_failed,
Expand Down Expand Up @@ -731,6 +743,9 @@ static struct attribute *bch_cache_set_internal_files[] = {

&sysfs_bset_tree_stats,
&sysfs_cache_read_races,
&sysfs_reclaim,
&sysfs_flush_write,
&sysfs_retry_flush_write,
&sysfs_writeback_keys_done,
&sysfs_writeback_keys_failed,

Expand Down

0 comments on commit a728eac

Please sign in to comment.