From e36f0d363ea2737e979df417f938643ef0749ea9 Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Wed, 10 Aug 2022 22:29:42 +0000 Subject: [PATCH] nvme/pcie, nvme/tcp: add cb_arg context tracepoint argument This allows mapping an nvme_request back to the nvme_bdev_io. This requires bumping up the max number of arguments per tracepoint. 5 was previously chosen as max since it exactly fit in 64 bytes (1 cacheline) when all arguments were stored as uint64_t, but now that we support uint32_t arguments we can afford extra arguments when some of them are uint32_t. I've bumped it to 8 so we can avoid having to touch this value multiple times if we find some cases where we need 7 or 8 args. Signed-off-by: Jim Harris Change-Id: Ie2ef5e59d10549860b47542e68c1c34efa63047f Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13995 Tested-by: SPDK CI Jenkins Reviewed-by: Tomasz Zawadzki Reviewed-by: Jacek Kalwas Reviewed-by: Aleksey Marchuk --- include/spdk/trace.h | 2 +- lib/nvme/nvme_pcie_common.c | 10 ++++++---- lib/nvme/nvme_tcp.c | 10 ++++++---- lib/trace/Makefile | 2 +- lib/trace_parser/Makefile | 2 +- module/bdev/nvme/bdev_nvme.c | 4 ++++ scripts/bpf/trace.py | 2 +- 7 files changed, 20 insertions(+), 12 deletions(-) diff --git a/include/spdk/trace.h b/include/spdk/trace.h index 3e6ebc707..8ba901292 100644 --- a/include/spdk/trace.h +++ b/include/spdk/trace.h @@ -62,7 +62,7 @@ struct spdk_trace_object { #define SPDK_TRACE_ARG_TYPE_PTR 1 #define SPDK_TRACE_ARG_TYPE_STR 2 -#define SPDK_TRACE_MAX_ARGS_COUNT 5 +#define SPDK_TRACE_MAX_ARGS_COUNT 8 #define SPDK_TRACE_MAX_RELATIONS 16 struct spdk_trace_argument { diff --git a/lib/nvme/nvme_pcie_common.c b/lib/nvme/nvme_pcie_common.c index 6acec919f..d8a2204a6 100644 --- a/lib/nvme/nvme_pcie_common.c +++ b/lib/nvme/nvme_pcie_common.c @@ -629,7 +629,7 @@ nvme_pcie_qpair_submit_tracker(struct spdk_nvme_qpair *qpair, struct nvme_tracke req = tr->req; assert(req != NULL); - spdk_trace_record(TRACE_NVME_PCIE_SUBMIT, qpair->id, 0, (uintptr_t)req, + spdk_trace_record(TRACE_NVME_PCIE_SUBMIT, qpair->id, 0, (uintptr_t)req, req->cb_arg, (uint32_t)req->cmd.cid, (uint32_t)req->cmd.opc, req->cmd.cdw10, req->cmd.cdw11, req->cmd.cdw12); @@ -676,7 +676,7 @@ nvme_pcie_qpair_complete_tracker(struct spdk_nvme_qpair *qpair, struct nvme_trac req = tr->req; - spdk_trace_record(TRACE_NVME_PCIE_COMPLETE, qpair->id, 0, (uintptr_t)req, + spdk_trace_record(TRACE_NVME_PCIE_COMPLETE, qpair->id, 0, (uintptr_t)req, req->cb_arg, (uint32_t)req->cmd.cid, (uint32_t)cpl->status_raw); assert(req != NULL); @@ -1818,7 +1818,8 @@ SPDK_TRACE_REGISTER_FN(nvme_pcie, "nvme_pcie", TRACE_GROUP_NVME_PCIE) { "NVME_PCIE_SUBMIT", TRACE_NVME_PCIE_SUBMIT, OWNER_NVME_PCIE_QP, OBJECT_NVME_PCIE_REQ, 1, - { { "cid", SPDK_TRACE_ARG_TYPE_INT, 4 }, + { { "ctx", SPDK_TRACE_ARG_TYPE_PTR, 8 }, + { "cid", SPDK_TRACE_ARG_TYPE_INT, 4 }, { "opc", SPDK_TRACE_ARG_TYPE_INT, 4 }, { "dw10", SPDK_TRACE_ARG_TYPE_PTR, 4 }, { "dw11", SPDK_TRACE_ARG_TYPE_PTR, 4 }, @@ -1828,7 +1829,8 @@ SPDK_TRACE_REGISTER_FN(nvme_pcie, "nvme_pcie", TRACE_GROUP_NVME_PCIE) { "NVME_PCIE_COMPLETE", TRACE_NVME_PCIE_COMPLETE, OWNER_NVME_PCIE_QP, OBJECT_NVME_PCIE_REQ, 0, - { { "cid", SPDK_TRACE_ARG_TYPE_INT, 4 }, + { { "ctx", SPDK_TRACE_ARG_TYPE_PTR, 8 }, + { "cid", SPDK_TRACE_ARG_TYPE_INT, 4 }, { "cpl", SPDK_TRACE_ARG_TYPE_PTR, 4 } } }, diff --git a/lib/nvme/nvme_tcp.c b/lib/nvme/nvme_tcp.c index e3f14e33b..1e2ec553a 100644 --- a/lib/nvme/nvme_tcp.c +++ b/lib/nvme/nvme_tcp.c @@ -731,7 +731,7 @@ nvme_tcp_qpair_submit_request(struct spdk_nvme_qpair *qpair, return -1; } - spdk_trace_record(TRACE_NVME_TCP_SUBMIT, qpair->id, 0, (uintptr_t)req, + spdk_trace_record(TRACE_NVME_TCP_SUBMIT, qpair->id, 0, (uintptr_t)req, req->cb_arg, (uint32_t)req->cmd.cid, (uint32_t)req->cmd.opc, req->cmd.cdw10, req->cmd.cdw11, req->cmd.cdw12); TAILQ_INSERT_TAIL(&tqpair->outstanding_reqs, tcp_req, link); @@ -777,7 +777,7 @@ nvme_tcp_req_complete(struct nvme_tcp_req *tcp_req, spdk_nvme_qpair_print_completion(qpair, rsp); } - spdk_trace_record(TRACE_NVME_TCP_COMPLETE, qpair->id, 0, (uintptr_t)req, + spdk_trace_record(TRACE_NVME_TCP_COMPLETE, qpair->id, 0, (uintptr_t)req, req->cb_arg, (uint32_t)req->cmd.cid, (uint32_t)cpl.status_raw); TAILQ_REMOVE(&tcp_req->tqpair->outstanding_reqs, tcp_req, link); nvme_tcp_req_put(tqpair, tcp_req); @@ -2472,7 +2472,8 @@ SPDK_TRACE_REGISTER_FN(nvme_tcp, "nvme_tcp", TRACE_GROUP_NVME_TCP) { "NVME_TCP_SUBMIT", TRACE_NVME_TCP_SUBMIT, OWNER_NVME_TCP_QP, OBJECT_NVME_TCP_REQ, 1, - { { "cid", SPDK_TRACE_ARG_TYPE_INT, 4 }, + { { "ctx", SPDK_TRACE_ARG_TYPE_PTR, 8 }, + { "cid", SPDK_TRACE_ARG_TYPE_INT, 4 }, { "opc", SPDK_TRACE_ARG_TYPE_INT, 4 }, { "dw10", SPDK_TRACE_ARG_TYPE_PTR, 4 }, { "dw11", SPDK_TRACE_ARG_TYPE_PTR, 4 }, @@ -2482,7 +2483,8 @@ SPDK_TRACE_REGISTER_FN(nvme_tcp, "nvme_tcp", TRACE_GROUP_NVME_TCP) { "NVME_TCP_COMPLETE", TRACE_NVME_TCP_COMPLETE, OWNER_NVME_TCP_QP, OBJECT_NVME_TCP_REQ, 0, - { { "cid", SPDK_TRACE_ARG_TYPE_INT, 4 }, + { { "ctx", SPDK_TRACE_ARG_TYPE_PTR, 8 }, + { "cid", SPDK_TRACE_ARG_TYPE_INT, 4 }, { "cpl", SPDK_TRACE_ARG_TYPE_PTR, 4 } } }, diff --git a/lib/trace/Makefile b/lib/trace/Makefile index ed3e5c0fc..37e364eda 100644 --- a/lib/trace/Makefile +++ b/lib/trace/Makefile @@ -6,7 +6,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -SO_VER := 6 +SO_VER := 7 SO_MINOR := 0 C_SRCS = trace.c trace_flags.c trace_rpc.c diff --git a/lib/trace_parser/Makefile b/lib/trace_parser/Makefile index a0a7834e9..d3e3aefd1 100644 --- a/lib/trace_parser/Makefile +++ b/lib/trace_parser/Makefile @@ -7,7 +7,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -SO_VER := 2 +SO_VER := 3 SO_MINOR := 0 CXX_SRCS = trace.cpp diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index 27d83bc18..ab0bf937e 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -6781,4 +6781,8 @@ SPDK_TRACE_REGISTER_FN(bdev_nvme_trace, "bdev_nvme", TRACE_GROUP_BDEV_NVME) spdk_trace_register_object(OBJECT_BDEV_NVME_IO, 'N'); spdk_trace_register_description_ext(opts, SPDK_COUNTOF(opts)); + spdk_trace_tpoint_register_relation(TRACE_NVME_PCIE_SUBMIT, OBJECT_BDEV_NVME_IO, 0); + spdk_trace_tpoint_register_relation(TRACE_NVME_TCP_SUBMIT, OBJECT_BDEV_NVME_IO, 0); + spdk_trace_tpoint_register_relation(TRACE_NVME_PCIE_COMPLETE, OBJECT_BDEV_NVME_IO, 0); + spdk_trace_tpoint_register_relation(TRACE_NVME_TCP_COMPLETE, OBJECT_BDEV_NVME_IO, 0); } diff --git a/scripts/bpf/trace.py b/scripts/bpf/trace.py index bf897a825..9b9bcd400 100755 --- a/scripts/bpf/trace.py +++ b/scripts/bpf/trace.py @@ -18,7 +18,7 @@ UCHAR_MAX = (1 << 8) - 1 TRACE_MAX_LCORE = 128 TRACE_MAX_GROUP_ID = 16 TRACE_MAX_TPOINT_ID = TRACE_MAX_GROUP_ID * 64 -TRACE_MAX_ARGS_COUNT = 5 +TRACE_MAX_ARGS_COUNT = 8 TRACE_MAX_RELATIONS = 16 TRACE_INVALID_OBJECT = (1 << 64) - 1 OBJECT_NONE = 0