From 71711c8b56b8cf0417f9a9e9614b9156e587cd73 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Sat, 17 Jun 2017 10:08:19 -0700 Subject: [PATCH] scoutfs: add manifest and item tracing Add some tracing to get visibility into compaction and item reading. Signed-off-by: Zach Brown --- kmod/src/compact.c | 5 ++-- kmod/src/manifest.c | 18 ++++++++++--- kmod/src/scoutfs_trace.h | 56 ++++++++++++++++++++++++++++++---------- 3 files changed, 60 insertions(+), 19 deletions(-) diff --git a/kmod/src/compact.c b/kmod/src/compact.c index 9c83eca6..b129b931 100644 --- a/kmod/src/compact.c +++ b/kmod/src/compact.c @@ -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)) { diff --git a/kmod/src/manifest.c b/kmod/src/manifest.c index 4cec4184..ed6736c4 100644 --- a/kmod/src/manifest.c +++ b/kmod/src/manifest.c @@ -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); diff --git a/kmod/src/scoutfs_trace.h b/kmod/src/scoutfs_trace.h index b7b87809..e03c2c6d 100644 --- a/kmod/src/scoutfs_trace.h +++ b/kmod/src/scoutfs_trace.h @@ -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" }, \