From 0e7ca66922e4b84a122feed8ffa78314a53beab1 Mon Sep 17 00:00:00 2001 From: Liu Xiaodong Date: Thu, 29 Nov 2018 03:11:57 -0500 Subject: [PATCH] lib/trace: show specific usage of trace mask Previously, if want to know which mask bit is used for specific trace group, the only way is to check source code. Now list each trace group with its trace tpoint group mask bit in usage message Change-Id: I7a85fe9c0885f1919f6ffbdc97dab81f1986fb07 Signed-off-by: Liu Xiaodong Reviewed-on: https://review.gerrithub.io/435448 Tested-by: SPDK CI Jenkins Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto --- include/spdk/trace.h | 14 +++++++++++++- lib/bdev/bdev.c | 2 +- lib/event/app.c | 3 +-- lib/iscsi/conn.c | 2 +- lib/nvmf/rdma.c | 2 +- lib/nvmf/tcp.c | 2 +- lib/scsi/scsi.c | 2 +- lib/trace/trace_flags.c | 18 +++++++++++++++++- 8 files changed, 36 insertions(+), 9 deletions(-) diff --git a/include/spdk/trace.h b/include/spdk/trace.h index 5c6c83693..7ac903245 100644 --- a/include/spdk/trace.h +++ b/include/spdk/trace.h @@ -332,7 +332,17 @@ void spdk_trace_register_description(const char *name, const char *short_name, uint8_t object_type, uint8_t new_object, uint8_t arg1_is_ptr, const char *arg1_name); +/** + * Show trace mask and its usage. + * + * \param f File to hold the mask's information. + * \param tmask_arg Command line option to set the trace group mask. + */ +void spdk_trace_mask_usage(FILE *f, const char *tmask_arg); + struct spdk_trace_register_fn { + const char *name; + uint8_t tgroup_id; void (*reg_fn)(void); struct spdk_trace_register_fn *next; }; @@ -344,9 +354,11 @@ struct spdk_trace_register_fn { */ void spdk_trace_add_register_fn(struct spdk_trace_register_fn *reg_fn); -#define SPDK_TRACE_REGISTER_FN(fn) \ +#define SPDK_TRACE_REGISTER_FN(fn, name_str, _tgroup_id) \ static void fn(void); \ struct spdk_trace_register_fn reg_ ## fn = { \ + .name = name_str, \ + .tgroup_id = _tgroup_id, \ .reg_fn = fn, \ .next = NULL, \ }; \ diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 6d18d9d91..b8871e757 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -4094,7 +4094,7 @@ spdk_bdev_set_qos_rate_limits(struct spdk_bdev *bdev, uint64_t *limits, SPDK_LOG_REGISTER_COMPONENT("bdev", SPDK_LOG_BDEV) -SPDK_TRACE_REGISTER_FN(bdev_trace) +SPDK_TRACE_REGISTER_FN(bdev_trace, "bdev", TRACE_GROUP_BDEV) { spdk_trace_register_owner(OWNER_BDEV, 'b'); spdk_trace_register_object(OBJECT_BDEV_IO, 'i'); diff --git a/lib/event/app.c b/lib/event/app.c index 0bb771aa6..a9fd92640 100644 --- a/lib/event/app.c +++ b/lib/event/app.c @@ -711,8 +711,6 @@ usage(void (*app_usage)(void)) printf(" -c, --config config file (default %s)\n", g_default_opts.config_file != NULL ? g_default_opts.config_file : "none"); printf(" -d, --limit-coredump do not set max coredump size to RLIM_INFINITY\n"); - printf(" -e, --tpoint-group-mask \n"); - printf(" tracepoint group mask for spdk trace buffers (default 0x0)\n"); printf(" -g, --single-file-segments\n"); printf(" force creating just one hugetlbfs file\n"); printf(" -h, --help show this usage\n"); @@ -742,6 +740,7 @@ usage(void (*app_usage)(void)) printf(" --num-trace-entries number of trace entries for each core (default %d)\n", SPDK_APP_DEFAULT_NUM_TRACE_ENTRIES); spdk_tracelog_usage(stdout, "-L"); + spdk_trace_mask_usage(stdout, "-e"); if (app_usage) { app_usage(); } diff --git a/lib/iscsi/conn.c b/lib/iscsi/conn.c index 8a074186b..2c89feab9 100644 --- a/lib/iscsi/conn.c +++ b/lib/iscsi/conn.c @@ -1469,7 +1469,7 @@ spdk_iscsi_conn_logout(struct spdk_iscsi_conn *conn) conn->logout_timer = spdk_poller_register(logout_timeout, conn, ISCSI_LOGOUT_TIMEOUT * 1000000); } -SPDK_TRACE_REGISTER_FN(iscsi_conn_trace) +SPDK_TRACE_REGISTER_FN(iscsi_conn_trace, "iscsi_conn", TRACE_GROUP_ISCSI) { spdk_trace_register_owner(OWNER_ISCSI_CONN, 'c'); spdk_trace_register_object(OBJECT_ISCSI_PDU, 'p'); diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c index 865ef9b8c..54906616c 100644 --- a/lib/nvmf/rdma.c +++ b/lib/nvmf/rdma.c @@ -134,7 +134,7 @@ enum spdk_nvmf_rdma_request_state { #define TRACE_RDMA_QP_DISCONNECT SPDK_TPOINT_ID(TRACE_GROUP_NVMF_RDMA, 0xF) #define TRACE_RDMA_QP_DESTROY SPDK_TPOINT_ID(TRACE_GROUP_NVMF_RDMA, 0x10) -SPDK_TRACE_REGISTER_FN(nvmf_trace) +SPDK_TRACE_REGISTER_FN(nvmf_trace, "nvmf_rdma", TRACE_GROUP_NVMF_RDMA) { spdk_trace_register_object(OBJECT_NVMF_RDMA_IO, 'r'); spdk_trace_register_description("RDMA_REQ_NEW", "", diff --git a/lib/nvmf/tcp.c b/lib/nvmf/tcp.c index 17cc61e43..c9f0acdf3 100644 --- a/lib/nvmf/tcp.c +++ b/lib/nvmf/tcp.c @@ -131,7 +131,7 @@ static const char *spdk_nvme_tcp_term_req_fes_str[] = { #define TRACE_TCP_FLUSH_WRITEBUF_DONE SPDK_TPOINT_ID(TRACE_GROUP_NVMF_TCP, 0xB) #define TRACE_TCP_FLUSH_WRITEBUF_PDU_DONE SPDK_TPOINT_ID(TRACE_GROUP_NVMF_TCP, 0xC) -SPDK_TRACE_REGISTER_FN(nvmf_tcp_trace) +SPDK_TRACE_REGISTER_FN(nvmf_tcp_trace, "nvmf_tcp", TRACE_GROUP_NVMF_TCP) { spdk_trace_register_object(OBJECT_NVMF_TCP_IO, 'r'); spdk_trace_register_description("TCP_REQ_NEW", "", diff --git a/lib/scsi/scsi.c b/lib/scsi/scsi.c index 5dce04468..5f7b28bd0 100644 --- a/lib/scsi/scsi.c +++ b/lib/scsi/scsi.c @@ -56,7 +56,7 @@ spdk_scsi_fini(void) pthread_mutex_destroy(&g_spdk_scsi.mutex); } -SPDK_TRACE_REGISTER_FN(scsi_trace) +SPDK_TRACE_REGISTER_FN(scsi_trace, "scsi", TRACE_GROUP_SCSI) { spdk_trace_register_owner(OWNER_SCSI_DEV, 'd'); spdk_trace_register_object(OBJECT_SCSI_TASK, 't'); diff --git a/lib/trace/trace_flags.c b/lib/trace/trace_flags.c index 69ca0bdf6..5176465d0 100644 --- a/lib/trace/trace_flags.c +++ b/lib/trace/trace_flags.c @@ -100,6 +100,23 @@ spdk_trace_set_tpoint_group_mask(uint64_t tpoint_group_mask) } } +void +spdk_trace_mask_usage(FILE *f, const char *tmask_arg) +{ + struct spdk_trace_register_fn *register_fn; + + fprintf(f, " %s, --tpoint-group-mask \n", tmask_arg); + fprintf(f, " tracepoint group mask for spdk trace buffers (default 0x0"); + + register_fn = g_reg_fn_head; + while (register_fn) { + fprintf(f, ", %s 0x%x", register_fn->name, 1 << register_fn->tgroup_id); + register_fn = register_fn->next; + } + + fprintf(f, ", all 0xffff)\n"); +} + void spdk_trace_register_owner(uint8_t type, char id_prefix) { @@ -165,7 +182,6 @@ spdk_trace_add_register_fn(struct spdk_trace_register_fn *reg_fn) g_reg_fn_head = reg_fn; } - void spdk_trace_flags_init(void) {