Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7159b1ad authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcache: Better alloc tracepoints



Change the invalidate tracepoint to indicate how much data we're invalidating,
and change the alloc tracepoints to indicate what offset they're for.

Signed-off-by: default avatarKent Overstreet <kmo@daterainc.com>
parent 3f5e0a34
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -162,10 +162,15 @@ static bool can_invalidate_bucket(struct cache *ca, struct bucket *b)

static void invalidate_one_bucket(struct cache *ca, struct bucket *b)
{
	size_t bucket = b - ca->buckets;

	if (GC_SECTORS_USED(b))
		trace_bcache_invalidate(ca, bucket);

	bch_inc_gen(ca, b);
	b->prio = INITIAL_PRIO;
	atomic_inc(&b->pin);
	fifo_push(&ca->free_inc, b - ca->buckets);
	fifo_push(&ca->free_inc, bucket);
}

/*
@@ -301,8 +306,6 @@ static void invalidate_buckets(struct cache *ca)
		invalidate_buckets_random(ca);
		break;
	}

	trace_bcache_alloc_invalidate(ca);
}

#define allocator_wait(ca, cond)					\
@@ -408,8 +411,10 @@ long bch_bucket_alloc(struct cache *ca, unsigned reserve, bool wait)
	    fifo_pop(&ca->free[reserve], r))
		goto out;

	if (!wait)
	if (!wait) {
		trace_bcache_alloc_fail(ca, reserve);
		return -1;
	}

	do {
		prepare_to_wait(&ca->set->bucket_wait, &w,
@@ -425,6 +430,8 @@ long bch_bucket_alloc(struct cache *ca, unsigned reserve, bool wait)
out:
	wake_up_process(ca->alloc_thread);

	trace_bcache_alloc(ca, reserve);

	if (expensive_debug_checks(ca->set)) {
		size_t iter;
		long i;
+1 −1
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_btree_node_split);
EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_btree_node_compact);
EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_btree_set_root);

EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_alloc_invalidate);
EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_invalidate);
EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_alloc_fail);

EXPORT_TRACEPOINT_SYMBOL_GPL(bcache_writeback);
+34 −14
Original line number Diff line number Diff line
@@ -399,26 +399,43 @@ TRACE_EVENT(bcache_keyscan,

/* Allocator */

TRACE_EVENT(bcache_alloc_invalidate,
	TP_PROTO(struct cache *ca),
	TP_ARGS(ca),
TRACE_EVENT(bcache_invalidate,
	TP_PROTO(struct cache *ca, size_t bucket),
	TP_ARGS(ca, bucket),

	TP_STRUCT__entry(
		__field(unsigned,	free			)
		__field(unsigned,	free_inc		)
		__field(unsigned,	free_inc_size		)
		__field(unsigned,	unused			)
		__field(unsigned,	sectors			)
		__field(dev_t,		dev			)
		__field(__u64,		offset			)
	),

	TP_fast_assign(
		__entry->free		= fifo_used(&ca->free[RESERVE_NONE]);
		__entry->free_inc	= fifo_used(&ca->free_inc);
		__entry->free_inc_size	= ca->free_inc.size;
		__entry->unused		= fifo_used(&ca->unused);
		__entry->dev		= ca->bdev->bd_dev;
		__entry->offset		= bucket << ca->set->bucket_bits;
		__entry->sectors	= GC_SECTORS_USED(&ca->buckets[bucket]);
	),

	TP_printk("free %u free_inc %u/%u unused %u", __entry->free,
		  __entry->free_inc, __entry->free_inc_size, __entry->unused)
	TP_printk("invalidated %u sectors at %d,%d sector=%llu",
		  __entry->sectors, MAJOR(__entry->dev),
		  MINOR(__entry->dev), __entry->offset)
);

TRACE_EVENT(bcache_alloc,
	TP_PROTO(struct cache *ca, size_t bucket),
	TP_ARGS(ca, bucket),

	TP_STRUCT__entry(
		__field(dev_t,		dev			)
		__field(__u64,		offset			)
	),

	TP_fast_assign(
		__entry->dev		= ca->bdev->bd_dev;
		__entry->offset		= bucket << ca->set->bucket_bits;
	),

	TP_printk("allocated %d,%d sector=%llu", MAJOR(__entry->dev),
		  MINOR(__entry->dev), __entry->offset)
);

TRACE_EVENT(bcache_alloc_fail,
@@ -426,6 +443,7 @@ TRACE_EVENT(bcache_alloc_fail,
	TP_ARGS(ca, reserve),

	TP_STRUCT__entry(
		__field(dev_t,		dev			)
		__field(unsigned,	free			)
		__field(unsigned,	free_inc		)
		__field(unsigned,	unused			)
@@ -433,13 +451,15 @@ TRACE_EVENT(bcache_alloc_fail,
	),

	TP_fast_assign(
		__entry->dev		= ca->bdev->bd_dev;
		__entry->free		= fifo_used(&ca->free[reserve]);
		__entry->free_inc	= fifo_used(&ca->free_inc);
		__entry->unused		= fifo_used(&ca->unused);
		__entry->blocked	= atomic_read(&ca->set->prio_blocked);
	),

	TP_printk("free %u free_inc %u unused %u blocked %u", __entry->free,
	TP_printk("alloc fail %d,%d free %u free_inc %u unused %u blocked %u",
		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->free,
		  __entry->free_inc, __entry->unused, __entry->blocked)
);