scoutfs: add manifest and item tracing

Add some tracing to get visibility into compaction and item reading.

Signed-off-by: Zach Brown <zab@versity.com>
This commit is contained in:
Zach Brown
2017-06-27 14:04:38 -07:00
parent ef551776ae
commit 71711c8b56
3 changed files with 60 additions and 19 deletions
+2 -3
View File
@@ -666,9 +666,8 @@ static void scoutfs_compact_func(struct work_struct *work)
/* trace compaction ranges */
list_for_each_entry(cseg, &curs.csegs, entry) {
SK_TRACE_PRINTK("level %u segno %llu first "SK_FMT" last "SK_FMT"\n",
cseg->level, cseg->segno, SK_ARG(cseg->first),
SK_ARG(cseg->last));
trace_scoutfs_compact_input(sb, cseg->level, cseg->segno,
cseg->seq, cseg->first, cseg->last);
}
if (ret == 0 && !list_empty(&curs.csegs)) {
+15 -3
View File
@@ -130,7 +130,7 @@ int scoutfs_manifest_add(struct super_block *sb,
unsigned key_bytes;
unsigned bytes;
trace_scoutfs_manifest_add(sb, first, last, segno, seq, level);
trace_scoutfs_manifest_add(sb, level, segno, seq, first, last);
key_bytes = first->key_len + last->key_len;
bytes = offsetof(struct scoutfs_manifest_entry, keys[key_bytes]);
@@ -173,11 +173,14 @@ int scoutfs_manifest_add_ment(struct super_block *sb,
struct scoutfs_manifest_entry *ment;
struct manifest_search_key skey;
struct scoutfs_key_buf first;
struct scoutfs_key_buf last;
unsigned bytes;
lockdep_assert_held(&mani->rwsem);
init_ment_keys(add, &first, NULL);
init_ment_keys(add, &first, &last);
trace_scoutfs_manifest_add(sb, add->level, le64_to_cpu(add->segno),
le64_to_cpu(add->seq), &first, &last);
skey.key = &first;
skey.level = add->level;
@@ -230,6 +233,7 @@ int scoutfs_manifest_del(struct super_block *sb, struct scoutfs_key_buf *first,
struct scoutfs_super_block *super = &sbi->super;
struct scoutfs_manifest_entry *ment;
struct manifest_search_key skey;
struct scoutfs_key_buf last;
skey.key = first;
skey.level = level;
@@ -239,6 +243,10 @@ int scoutfs_manifest_del(struct super_block *sb, struct scoutfs_key_buf *first,
if (!ment)
return -ENOENT;
init_ment_keys(ment, NULL, &last);
trace_scoutfs_manifest_delete(sb, ment->level, le64_to_cpu(ment->segno),
le64_to_cpu(ment->seq), first, &last);
scoutfs_ring_delete(&mani->ring, ment);
le64_add_cpu(&super->manifest.level_counts[level], -1ULL);
return 0;
@@ -500,7 +508,7 @@ int scoutfs_manifest_read_items(struct super_block *sb,
int cmp;
int n;
trace_printk("reading items\n");
trace_scoutfs_read_items(sb, key, end);
/* get refs on all the segments */
ret = scoutfs_net_manifest_range_entries(sb, key, end, &ref_list);
@@ -509,6 +517,10 @@ int scoutfs_manifest_read_items(struct super_block *sb,
/* submit reads for all the segments */
list_for_each_entry(ref, &ref_list, entry) {
trace_scoutfs_read_item_segment(sb, ref->level, ref->segno,
ref->seq, ref->first, ref->last);
seg = scoutfs_seg_submit_read(sb, ref->segno);
if (IS_ERR(seg)) {
ret = PTR_ERR(seg);
+43 -13
View File
@@ -181,27 +181,51 @@ TRACE_EVENT(scoutfs_scan_orphans,
TP_printk("dev %d,%d", MAJOR(__entry->dev), MINOR(__entry->dev))
);
TRACE_EVENT(scoutfs_manifest_add,
TP_PROTO(struct super_block *sb, struct scoutfs_key_buf *first,
struct scoutfs_key_buf *last, u64 segno, u64 seq, u8 level),
TP_ARGS(sb, first, last, segno, seq, level),
DECLARE_EVENT_CLASS(scoutfs_manifest_class,
TP_PROTO(struct super_block *sb, u8 level, u64 segno, u64 seq,
struct scoutfs_key_buf *first, struct scoutfs_key_buf *last),
TP_ARGS(sb, level, segno, seq, first, last),
TP_STRUCT__entry(
__dynamic_array(char, first, scoutfs_key_str(NULL, first))
__dynamic_array(char, last, scoutfs_key_str(NULL, last))
__field(u8, level)
__field(u64, segno)
__field(u64, seq)
__field(u8, level)
__dynamic_array(char, first, scoutfs_key_str(NULL, first))
__dynamic_array(char, last, scoutfs_key_str(NULL, last))
),
TP_fast_assign(
scoutfs_key_str(__get_dynamic_array(first), first);
scoutfs_key_str(__get_dynamic_array(last), last);
__entry->level = level;
__entry->segno = segno;
__entry->seq = seq;
__entry->level = level;
scoutfs_key_str(__get_dynamic_array(first), first);
scoutfs_key_str(__get_dynamic_array(last), last);
),
TP_printk("first %s last %s segno %llu seq %llu level %u",
__get_str(first), __get_str(last), __entry->segno,
__entry->seq, __entry->level)
TP_printk("level %u segno %llu seq %llu first %s last %s",
__entry->level, __entry->segno, __entry->seq,
__get_str(first), __get_str(last))
);
DEFINE_EVENT(scoutfs_manifest_class, scoutfs_manifest_add,
TP_PROTO(struct super_block *sb, u8 level, u64 segno, u64 seq,
struct scoutfs_key_buf *first, struct scoutfs_key_buf *last),
TP_ARGS(sb, level, segno, seq, first, last)
);
DEFINE_EVENT(scoutfs_manifest_class, scoutfs_manifest_delete,
TP_PROTO(struct super_block *sb, u8 level, u64 segno, u64 seq,
struct scoutfs_key_buf *first, struct scoutfs_key_buf *last),
TP_ARGS(sb, level, segno, seq, first, last)
);
DEFINE_EVENT(scoutfs_manifest_class, scoutfs_compact_input,
TP_PROTO(struct super_block *sb, u8 level, u64 segno, u64 seq,
struct scoutfs_key_buf *first, struct scoutfs_key_buf *last),
TP_ARGS(sb, level, segno, seq, first, last)
);
DEFINE_EVENT(scoutfs_manifest_class, scoutfs_read_item_segment,
TP_PROTO(struct super_block *sb, u8 level, u64 segno, u64 seq,
struct scoutfs_key_buf *first, struct scoutfs_key_buf *last),
TP_ARGS(sb, level, segno, seq, first, last)
);
DECLARE_EVENT_CLASS(scoutfs_key_class,
@@ -264,6 +288,12 @@ DEFINE_EVENT(scoutfs_range_class, scoutfs_item_shrink_range,
TP_ARGS(sb, start, end)
);
DEFINE_EVENT(scoutfs_range_class, scoutfs_read_items,
TP_PROTO(struct super_block *sb, struct scoutfs_key_buf *start,
struct scoutfs_key_buf *end),
TP_ARGS(sb, start, end)
);
#define lock_mode(mode) \
__print_symbolic(mode, \
{ SCOUTFS_LOCK_MODE_READ, "READ" }, \