Message ID | 20200325021629.15103-3-chaitanya.kulkarni@wdc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | null_blk: add tracepoints for zoned mode | expand |
On 2020/03/25 12:21, Chaitanya Kulkarni wrote: > This patch adds two new tracpoints for null_blk_zoned.c that allows us > to trace report-zones, zone-mgmt-op and zone-write operations which has > direct effect on the zone condition state machine. > > Also, we update drivers/block/Makefile so that new null_blk related > tracefiles can be compiled. > > Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> Looks good to me. Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> > --- > drivers/block/Makefile | 6 +++ > drivers/block/null_blk_trace.c | 21 +++++++++ > drivers/block/null_blk_trace.h | 79 ++++++++++++++++++++++++++++++++++ > 3 files changed, 106 insertions(+) > create mode 100644 drivers/block/null_blk_trace.c > create mode 100644 drivers/block/null_blk_trace.h > > diff --git a/drivers/block/Makefile b/drivers/block/Makefile > index a53cc1e3a2d3..795facd8cf19 100644 > --- a/drivers/block/Makefile > +++ b/drivers/block/Makefile > @@ -6,6 +6,9 @@ > # Rewritten to use lists instead of if-statements. > # > > +# needed for trace events > +ccflags-y += -I$(src) > + > obj-$(CONFIG_MAC_FLOPPY) += swim3.o > obj-$(CONFIG_BLK_DEV_SWIM) += swim_mod.o > obj-$(CONFIG_BLK_DEV_FD) += floppy.o > @@ -39,6 +42,9 @@ obj-$(CONFIG_ZRAM) += zram/ > > obj-$(CONFIG_BLK_DEV_NULL_BLK) += null_blk.o > null_blk-objs := null_blk_main.o > +ifeq ($(CONFIG_BLK_DEV_ZONED), y) > +null_blk-$(CONFIG_TRACING) += null_blk_trace.o > +endif > null_blk-$(CONFIG_BLK_DEV_ZONED) += null_blk_zoned.o > > skd-y := skd_main.o > diff --git a/drivers/block/null_blk_trace.c b/drivers/block/null_blk_trace.c > new file mode 100644 > index 000000000000..f246e7bff698 > --- /dev/null > +++ b/drivers/block/null_blk_trace.c > @@ -0,0 +1,21 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * null_blk trace related helpers. > + * > + * Copyright (C) 2020 Western Digital Corporation or its affiliates. > + */ > +#include "null_blk_trace.h" > + > +/* > + * Helper to use for all null_blk traces to extract disk name. > + */ > +const char *nullb_trace_disk_name(struct trace_seq *p, char *name) > +{ > + const char *ret = trace_seq_buffer_ptr(p); > + > + if (name && *name) > + trace_seq_printf(p, "disk=%s, ", name); > + trace_seq_putc(p, 0); > + > + return ret; > +} > diff --git a/drivers/block/null_blk_trace.h b/drivers/block/null_blk_trace.h > new file mode 100644 > index 000000000000..4f83032eb544 > --- /dev/null > +++ b/drivers/block/null_blk_trace.h > @@ -0,0 +1,79 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +/* > + * null_blk device driver tracepoints. > + * > + * Copyright (C) 2020 Western Digital Corporation or its affiliates. > + */ > + > +#undef TRACE_SYSTEM > +#define TRACE_SYSTEM nullb > + > +#if !defined(_TRACE_NULLB_H) || defined(TRACE_HEADER_MULTI_READ) > +#define _TRACE_NULLB_H > + > +#include <linux/tracepoint.h> > +#include <linux/trace_seq.h> > + > +#include "null_blk.h" > + > +const char *nullb_trace_disk_name(struct trace_seq *p, char *name); > + > +#define __print_disk_name(name) nullb_trace_disk_name(p, name) > + > +#ifndef TRACE_HEADER_MULTI_READ > +static inline void __assign_disk_name(char *name, struct gendisk *disk) > +{ > + if (disk) > + memcpy(name, disk->disk_name, DISK_NAME_LEN); > + else > + memset(name, 0, DISK_NAME_LEN); > +} > +#endif > + > +TRACE_EVENT(nullb_zone_op, > + TP_PROTO(struct nullb_cmd *cmd, unsigned int zone_no, > + unsigned int zone_cond), > + TP_ARGS(cmd, zone_no, zone_cond), > + TP_STRUCT__entry( > + __array(char, disk, DISK_NAME_LEN) > + __field(enum req_opf, op) > + __field(unsigned int, zone_no) > + __field(unsigned int, zone_cond) > + ), > + TP_fast_assign( > + __entry->op = req_op(cmd->rq); > + __entry->zone_no = zone_no; > + __entry->zone_cond = zone_cond; > + __assign_disk_name(__entry->disk, cmd->rq->rq_disk); > + ), > + TP_printk("%s req=%-15s zone_no=%u zone_cond=%-10s", > + __print_disk_name(__entry->disk), > + blk_op_str(__entry->op), > + __entry->zone_no, > + blk_zone_cond_str(__entry->zone_cond)) > +); > + > +TRACE_EVENT(nullb_report_zones, > + TP_PROTO(struct nullb *nullb, unsigned int nr_zones), > + TP_ARGS(nullb, nr_zones), > + TP_STRUCT__entry( > + __array(char, disk, DISK_NAME_LEN) > + __field(unsigned int, nr_zones) > + ), > + TP_fast_assign( > + __entry->nr_zones = nr_zones; > + __assign_disk_name(__entry->disk, nullb->disk); > + ), > + TP_printk("%s nr_zones=%u", > + __print_disk_name(__entry->disk), __entry->nr_zones) > +); > + > +#endif /* _TRACE_NULLB_H */ > + > +#undef TRACE_INCLUDE_PATH > +#define TRACE_INCLUDE_PATH . > +#undef TRACE_INCLUDE_FILE > +#define TRACE_INCLUDE_FILE null_blk_trace > + > +/* This part must be outside protection */ > +#include <trace/define_trace.h> >
diff --git a/drivers/block/Makefile b/drivers/block/Makefile index a53cc1e3a2d3..795facd8cf19 100644 --- a/drivers/block/Makefile +++ b/drivers/block/Makefile @@ -6,6 +6,9 @@ # Rewritten to use lists instead of if-statements. # +# needed for trace events +ccflags-y += -I$(src) + obj-$(CONFIG_MAC_FLOPPY) += swim3.o obj-$(CONFIG_BLK_DEV_SWIM) += swim_mod.o obj-$(CONFIG_BLK_DEV_FD) += floppy.o @@ -39,6 +42,9 @@ obj-$(CONFIG_ZRAM) += zram/ obj-$(CONFIG_BLK_DEV_NULL_BLK) += null_blk.o null_blk-objs := null_blk_main.o +ifeq ($(CONFIG_BLK_DEV_ZONED), y) +null_blk-$(CONFIG_TRACING) += null_blk_trace.o +endif null_blk-$(CONFIG_BLK_DEV_ZONED) += null_blk_zoned.o skd-y := skd_main.o diff --git a/drivers/block/null_blk_trace.c b/drivers/block/null_blk_trace.c new file mode 100644 index 000000000000..f246e7bff698 --- /dev/null +++ b/drivers/block/null_blk_trace.c @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * null_blk trace related helpers. + * + * Copyright (C) 2020 Western Digital Corporation or its affiliates. + */ +#include "null_blk_trace.h" + +/* + * Helper to use for all null_blk traces to extract disk name. + */ +const char *nullb_trace_disk_name(struct trace_seq *p, char *name) +{ + const char *ret = trace_seq_buffer_ptr(p); + + if (name && *name) + trace_seq_printf(p, "disk=%s, ", name); + trace_seq_putc(p, 0); + + return ret; +} diff --git a/drivers/block/null_blk_trace.h b/drivers/block/null_blk_trace.h new file mode 100644 index 000000000000..4f83032eb544 --- /dev/null +++ b/drivers/block/null_blk_trace.h @@ -0,0 +1,79 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * null_blk device driver tracepoints. + * + * Copyright (C) 2020 Western Digital Corporation or its affiliates. + */ + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM nullb + +#if !defined(_TRACE_NULLB_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_NULLB_H + +#include <linux/tracepoint.h> +#include <linux/trace_seq.h> + +#include "null_blk.h" + +const char *nullb_trace_disk_name(struct trace_seq *p, char *name); + +#define __print_disk_name(name) nullb_trace_disk_name(p, name) + +#ifndef TRACE_HEADER_MULTI_READ +static inline void __assign_disk_name(char *name, struct gendisk *disk) +{ + if (disk) + memcpy(name, disk->disk_name, DISK_NAME_LEN); + else + memset(name, 0, DISK_NAME_LEN); +} +#endif + +TRACE_EVENT(nullb_zone_op, + TP_PROTO(struct nullb_cmd *cmd, unsigned int zone_no, + unsigned int zone_cond), + TP_ARGS(cmd, zone_no, zone_cond), + TP_STRUCT__entry( + __array(char, disk, DISK_NAME_LEN) + __field(enum req_opf, op) + __field(unsigned int, zone_no) + __field(unsigned int, zone_cond) + ), + TP_fast_assign( + __entry->op = req_op(cmd->rq); + __entry->zone_no = zone_no; + __entry->zone_cond = zone_cond; + __assign_disk_name(__entry->disk, cmd->rq->rq_disk); + ), + TP_printk("%s req=%-15s zone_no=%u zone_cond=%-10s", + __print_disk_name(__entry->disk), + blk_op_str(__entry->op), + __entry->zone_no, + blk_zone_cond_str(__entry->zone_cond)) +); + +TRACE_EVENT(nullb_report_zones, + TP_PROTO(struct nullb *nullb, unsigned int nr_zones), + TP_ARGS(nullb, nr_zones), + TP_STRUCT__entry( + __array(char, disk, DISK_NAME_LEN) + __field(unsigned int, nr_zones) + ), + TP_fast_assign( + __entry->nr_zones = nr_zones; + __assign_disk_name(__entry->disk, nullb->disk); + ), + TP_printk("%s nr_zones=%u", + __print_disk_name(__entry->disk), __entry->nr_zones) +); + +#endif /* _TRACE_NULLB_H */ + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH . +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_FILE null_blk_trace + +/* This part must be outside protection */ +#include <trace/define_trace.h>
This patch adds two new tracpoints for null_blk_zoned.c that allows us to trace report-zones, zone-mgmt-op and zone-write operations which has direct effect on the zone condition state machine. Also, we update drivers/block/Makefile so that new null_blk related tracefiles can be compiled. Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> --- drivers/block/Makefile | 6 +++ drivers/block/null_blk_trace.c | 21 +++++++++ drivers/block/null_blk_trace.h | 79 ++++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 drivers/block/null_blk_trace.c create mode 100644 drivers/block/null_blk_trace.h