scoutfs: add item cache range tracing

Add some tracepoints to track operations on our allocated item cache
range structs.

Signed-off-by: Zach Brown <zab@versity.com>
This commit is contained in:
Zach Brown
2017-11-09 18:26:09 -08:00
committed by Mark Fasheh
parent 3809f35b94
commit 7767a8a48e
2 changed files with 85 additions and 0 deletions

View File

@@ -95,6 +95,9 @@ struct cached_range {
struct scoutfs_key_buf *end;
};
#define trace_range(which, sb, rng) \
trace_scoutfs_item_range_##which(sb, (rng), (rng)->start, (rng)->end)
static u8 item_flags(struct cached_item *item)
{
return item->deletion ? SCOUTFS_ITEM_FLAG_DELETION : 0;
@@ -575,6 +578,7 @@ static void free_range(struct super_block *sb, struct cached_range *rng)
{
if (!IS_ERR_OR_NULL(rng)) {
scoutfs_inc_counter(sb, item_range_free);
trace_range(free, sb, rng);
scoutfs_key_free(sb, rng->start);
scoutfs_key_free(sb, rng->end);
kfree(rng);
@@ -640,6 +644,7 @@ restart:
goto restart;
}
trace_range(ins_rb_insert, sb, ins);
rb_link_node(&ins->node, parent, node);
rb_insert_color(&ins->node, root);
}
@@ -696,6 +701,7 @@ restart:
if (start_cmp > 0 && end_cmp < 0) {
swap(rng->end, rem->start);
scoutfs_key_dec(rng->end);
trace_range(remove_mid_left, sb, rng);
swap(rem->start, rem->end);
scoutfs_key_inc(rem->start);
@@ -707,12 +713,14 @@ restart:
if (start_cmp < 0 && end_cmp < 0) {
swap(rem->end, rng->start);
scoutfs_key_inc(rng->start);
trace_range(remove_start, sb, rng);
continue;
}
if (start_cmp > 0 && end_cmp > 0) {
swap(rem->start, rng->end);
scoutfs_key_dec(rng->end);
trace_range(remove_end, sb, rng);
continue;
}
@@ -723,6 +731,7 @@ restart:
}
if (insert) {
trace_range(rem_rb_insert, sb, rem);
rb_link_node(&rem->node, parent, node);
rb_insert_color(&rem->node, root);
} else {
@@ -2014,6 +2023,7 @@ static int shrink_around(struct super_block *sb, struct cached_range *rng,
rng->end = first->key;
first->key = NULL;
scoutfs_key_dec_cur_len(rng->end);
trace_range(shrink_end, sb, rng);
}
/* set start of remaining existing range */
@@ -2022,6 +2032,7 @@ static int shrink_around(struct super_block *sb, struct cached_range *rng,
rng->start = last->key;
last->key = NULL;
scoutfs_key_inc_cur_len(rng->start);
trace_range(shrink_start, sb, rng);
}
/* add new range, stealing existing end */

View File

@@ -1499,6 +1499,80 @@ DEFINE_EVENT(scoutfs_range_class, scoutfs_read_items,
TP_ARGS(sb, start, end)
);
DECLARE_EVENT_CLASS(scoutfs_cached_range_class,
TP_PROTO(struct super_block *sb, void *rng,
struct scoutfs_key_buf *start, struct scoutfs_key_buf *end),
TP_ARGS(sb, rng, start, end),
TP_STRUCT__entry(
__field(__u64, fsid)
__field(void *, rng)
__dynamic_array(char, start, scoutfs_key_str(NULL, start))
__dynamic_array(char, end, scoutfs_key_str(NULL, end))
),
TP_fast_assign(
__entry->fsid = FSID_ARG(sb);
__entry->rng = rng;
scoutfs_key_str(__get_dynamic_array(start), start);
scoutfs_key_str(__get_dynamic_array(end), end);
),
TP_printk("fsid "FSID_FMT" rng %p start %s end %s",
__entry->fsid, __entry->rng, __get_str(start), __get_str(end))
);
DEFINE_EVENT(scoutfs_cached_range_class, scoutfs_item_range_free,
TP_PROTO(struct super_block *sb, void *rng,
struct scoutfs_key_buf *start, struct scoutfs_key_buf *end),
TP_ARGS(sb, rng, start, end)
);
DEFINE_EVENT(scoutfs_cached_range_class, scoutfs_item_range_ins_rb_insert,
TP_PROTO(struct super_block *sb, void *rng,
struct scoutfs_key_buf *start, struct scoutfs_key_buf *end),
TP_ARGS(sb, rng, start, end)
);
DEFINE_EVENT(scoutfs_cached_range_class, scoutfs_item_range_remove_mid_left,
TP_PROTO(struct super_block *sb, void *rng,
struct scoutfs_key_buf *start, struct scoutfs_key_buf *end),
TP_ARGS(sb, rng, start, end)
);
DEFINE_EVENT(scoutfs_cached_range_class, scoutfs_item_range_remove_start,
TP_PROTO(struct super_block *sb, void *rng,
struct scoutfs_key_buf *start, struct scoutfs_key_buf *end),
TP_ARGS(sb, rng, start, end)
);
DEFINE_EVENT(scoutfs_cached_range_class, scoutfs_item_range_remove_end,
TP_PROTO(struct super_block *sb, void *rng,
struct scoutfs_key_buf *start, struct scoutfs_key_buf *end),
TP_ARGS(sb, rng, start, end)
);
DEFINE_EVENT(scoutfs_cached_range_class, scoutfs_item_range_rem_rb_insert,
TP_PROTO(struct super_block *sb, void *rng,
struct scoutfs_key_buf *start, struct scoutfs_key_buf *end),
TP_ARGS(sb, rng, start, end)
);
DEFINE_EVENT(scoutfs_cached_range_class, scoutfs_item_range_delete_enoent,
TP_PROTO(struct super_block *sb, void *rng,
struct scoutfs_key_buf *start, struct scoutfs_key_buf *end),
TP_ARGS(sb, rng, start, end)
);
DEFINE_EVENT(scoutfs_cached_range_class, scoutfs_item_range_shrink_start,
TP_PROTO(struct super_block *sb, void *rng,
struct scoutfs_key_buf *start, struct scoutfs_key_buf *end),
TP_ARGS(sb, rng, start, end)
);
DEFINE_EVENT(scoutfs_cached_range_class, scoutfs_item_range_shrink_end,
TP_PROTO(struct super_block *sb, void *rng,
struct scoutfs_key_buf *start, struct scoutfs_key_buf *end),
TP_ARGS(sb, rng, start, end)
);
#define lock_mode(mode) \
__print_symbolic(mode, \
{ DLM_LOCK_IV, "IV" }, \