Commit 790666c8 authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcachefs: Improve trans_blocked_journal_reclaim tracepoint



include information about the state of the btree key cache

Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 7254555c
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -11,13 +11,18 @@ static inline size_t bch2_nr_btree_keys_need_flush(struct bch_fs *c)
	return max_t(ssize_t, 0, nr_dirty - max_dirty);
}

static inline bool bch2_btree_key_cache_must_wait(struct bch_fs *c)
static inline ssize_t __bch2_btree_key_cache_must_wait(struct bch_fs *c)
{
	size_t nr_dirty = atomic_long_read(&c->btree_key_cache.nr_dirty);
	size_t nr_keys = atomic_long_read(&c->btree_key_cache.nr_keys);
	size_t max_dirty = 4096 + (nr_keys * 3) / 4;

	return nr_dirty > max_dirty;
	return nr_dirty - max_dirty;
}

static inline bool bch2_btree_key_cache_must_wait(struct bch_fs *c)
{
	return __bch2_btree_key_cache_must_wait(c) > 0;
}

static inline bool bch2_btree_key_cache_wait_done(struct bch_fs *c)
+1 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@
#include "buckets.h"
#include "btree_cache.h"
#include "btree_iter.h"
#include "btree_key_cache.h"
#include "btree_locking.h"
#include "btree_update_interior.h"
#include "keylist.h"
+25 −2
Original line number Diff line number Diff line
@@ -988,10 +988,33 @@ TRACE_EVENT(trans_restart_split_race,
		  __entry->u64s_remaining)
);

DEFINE_EVENT(transaction_event,	trans_blocked_journal_reclaim,
TRACE_EVENT(trans_blocked_journal_reclaim,
	TP_PROTO(struct btree_trans *trans,
		 unsigned long caller_ip),
	TP_ARGS(trans, caller_ip)
	TP_ARGS(trans, caller_ip),

	TP_STRUCT__entry(
		__array(char,			trans_fn, 32	)
		__field(unsigned long,		caller_ip	)

		__field(unsigned long,		key_cache_nr_keys	)
		__field(unsigned long,		key_cache_nr_dirty	)
		__field(long,			must_wait		)
	),

	TP_fast_assign(
		strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
		__entry->caller_ip		= caller_ip;
		__entry->key_cache_nr_keys	= atomic_long_read(&trans->c->btree_key_cache.nr_keys);
		__entry->key_cache_nr_dirty	= atomic_long_read(&trans->c->btree_key_cache.nr_dirty);
		__entry->must_wait		= __bch2_btree_key_cache_must_wait(trans->c);
	),

	TP_printk("%s %pS key cache keys %lu dirty %lu must_wait %li",
		  __entry->trans_fn, (void *) __entry->caller_ip,
		  __entry->key_cache_nr_keys,
		  __entry->key_cache_nr_dirty,
		  __entry->must_wait)
);

TRACE_EVENT(trans_restart_journal_preres_get,