mirror of
https://github.com/torvalds/linux.git
synced 2026-07-30 03:01:41 +02:00
bcachefs: trace_io_move_pred
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
d6efd42a84
commit
060ff4b794
|
|
@ -38,30 +38,61 @@ const char * const bch2_data_ops_strs[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
static void trace_io_move2(struct bch_fs *c, struct bkey_s_c k,
|
||||
struct bch_io_opts *io_opts,
|
||||
struct data_update_opts *data_opts)
|
||||
{
|
||||
if (trace_io_move_enabled()) {
|
||||
struct printbuf buf = PRINTBUF;
|
||||
struct evacuate_bucket_arg {
|
||||
struct bpos bucket;
|
||||
int gen;
|
||||
struct data_update_opts data_opts;
|
||||
};
|
||||
|
||||
bch2_bkey_val_to_text(&buf, c, k);
|
||||
prt_newline(&buf);
|
||||
bch2_data_update_opts_to_text(&buf, c, io_opts, data_opts);
|
||||
trace_io_move(c, buf.buf);
|
||||
printbuf_exit(&buf);
|
||||
}
|
||||
static bool evacuate_bucket_pred(struct bch_fs *, void *,
|
||||
enum btree_id, struct bkey_s_c,
|
||||
struct bch_io_opts *,
|
||||
struct data_update_opts *);
|
||||
|
||||
static noinline void
|
||||
trace_io_move2(struct bch_fs *c, struct bkey_s_c k,
|
||||
struct bch_io_opts *io_opts,
|
||||
struct data_update_opts *data_opts)
|
||||
{
|
||||
struct printbuf buf = PRINTBUF;
|
||||
|
||||
bch2_bkey_val_to_text(&buf, c, k);
|
||||
prt_newline(&buf);
|
||||
bch2_data_update_opts_to_text(&buf, c, io_opts, data_opts);
|
||||
trace_io_move(c, buf.buf);
|
||||
printbuf_exit(&buf);
|
||||
}
|
||||
|
||||
static void trace_io_move_read2(struct bch_fs *c, struct bkey_s_c k)
|
||||
static noinline void trace_io_move_read2(struct bch_fs *c, struct bkey_s_c k)
|
||||
{
|
||||
if (trace_io_move_read_enabled()) {
|
||||
struct printbuf buf = PRINTBUF;
|
||||
struct printbuf buf = PRINTBUF;
|
||||
|
||||
bch2_bkey_val_to_text(&buf, c, k);
|
||||
trace_io_move_read(c, buf.buf);
|
||||
printbuf_exit(&buf);
|
||||
bch2_bkey_val_to_text(&buf, c, k);
|
||||
trace_io_move_read(c, buf.buf);
|
||||
printbuf_exit(&buf);
|
||||
}
|
||||
|
||||
static noinline void
|
||||
trace_io_move_pred2(struct bch_fs *c, struct bkey_s_c k,
|
||||
struct bch_io_opts *io_opts,
|
||||
struct data_update_opts *data_opts,
|
||||
move_pred_fn pred, void *_arg, bool p)
|
||||
{
|
||||
struct printbuf buf = PRINTBUF;
|
||||
|
||||
prt_printf(&buf, "%ps: %u", pred, p);
|
||||
|
||||
if (pred == evacuate_bucket_pred) {
|
||||
struct evacuate_bucket_arg *arg = _arg;
|
||||
prt_printf(&buf, " gen=%u", arg->gen);
|
||||
}
|
||||
|
||||
prt_newline(&buf);
|
||||
bch2_bkey_val_to_text(&buf, c, k);
|
||||
prt_newline(&buf);
|
||||
bch2_data_update_opts_to_text(&buf, c, io_opts, data_opts);
|
||||
trace_io_move_pred(c, buf.buf);
|
||||
printbuf_exit(&buf);
|
||||
}
|
||||
|
||||
struct moving_io {
|
||||
|
|
@ -298,7 +329,8 @@ int bch2_move_extent(struct moving_context *ctxt,
|
|||
struct bch_fs *c = trans->c;
|
||||
int ret = -ENOMEM;
|
||||
|
||||
trace_io_move2(c, k, &io_opts, &data_opts);
|
||||
if (trace_io_move_enabled())
|
||||
trace_io_move2(c, k, &io_opts, &data_opts);
|
||||
this_cpu_add(c->counters[BCH_COUNTER_io_move], k.k->size);
|
||||
|
||||
if (ctxt->stats)
|
||||
|
|
@ -364,7 +396,8 @@ int bch2_move_extent(struct moving_context *ctxt,
|
|||
atomic_inc(&io->b->count);
|
||||
}
|
||||
|
||||
trace_io_move_read2(c, k);
|
||||
if (trace_io_move_read_enabled())
|
||||
trace_io_move_read2(c, k);
|
||||
|
||||
mutex_lock(&ctxt->lock);
|
||||
atomic_add(io->read_sectors, &ctxt->read_sectors);
|
||||
|
|
@ -496,6 +529,7 @@ int bch2_move_get_io_opts_one(struct btree_trans *trans,
|
|||
bch2_inode_opts_get(io_opts, c, &inode);
|
||||
}
|
||||
bch2_trans_iter_exit(trans, &inode_iter);
|
||||
/* seem to be spinning here? */
|
||||
out:
|
||||
return bch2_get_update_rebalance_opts(trans, io_opts, extent_iter, extent_k);
|
||||
}
|
||||
|
|
@ -910,7 +944,13 @@ static int __bch2_move_data_phys(struct moving_context *ctxt,
|
|||
}
|
||||
|
||||
struct data_update_opts data_opts = {};
|
||||
if (!pred(c, arg, bp.v->btree_id, k, &io_opts, &data_opts)) {
|
||||
bool p = pred(c, arg, bp.v->btree_id, k, &io_opts, &data_opts);
|
||||
|
||||
if (trace_io_move_pred_enabled())
|
||||
trace_io_move_pred2(c, k, &io_opts, &data_opts,
|
||||
pred, arg, p);
|
||||
|
||||
if (!p) {
|
||||
bch2_trans_iter_exit(trans, &iter);
|
||||
goto next;
|
||||
}
|
||||
|
|
@ -993,12 +1033,6 @@ int bch2_move_data_phys(struct bch_fs *c,
|
|||
return ret;
|
||||
}
|
||||
|
||||
struct evacuate_bucket_arg {
|
||||
struct bpos bucket;
|
||||
int gen;
|
||||
struct data_update_opts data_opts;
|
||||
};
|
||||
|
||||
static bool evacuate_bucket_pred(struct bch_fs *c, void *_arg,
|
||||
enum btree_id btree, struct bkey_s_c k,
|
||||
struct bch_io_opts *io_opts,
|
||||
|
|
|
|||
|
|
@ -1431,6 +1431,11 @@ DEFINE_EVENT(fs_str, data_update,
|
|||
TP_ARGS(c, str)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(fs_str, io_move_pred,
|
||||
TP_PROTO(struct bch_fs *c, const char *str),
|
||||
TP_ARGS(c, str)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(fs_str, io_move_created_rebalance,
|
||||
TP_PROTO(struct bch_fs *c, const char *str),
|
||||
TP_ARGS(c, str)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user