Commit 88739040 authored by Atul Malakar's avatar Atul Malakar Committed by Tomasz Zawadzki
Browse files

nvme-pcie: Added queue depth tracing support



queue_depth tracks number of IO outstanding at the transport level.

Queue depth is added as a new argument to the TRACE_NVME_PCIE_SUBMIT,
TRACE_NVME_PCIE_COMPLETE events.
It will be useful when doing I/O performance analysis with SPDK tracing.

Change-Id: I3759b59427fcbad320c9b24a93560179977efc93
Signed-off-by: default avatarAtul Malakar <a.malakar@samsung.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/23044


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
parent 2a75dcc9
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -487,6 +487,9 @@ struct spdk_nvme_qpair {
	/* The user is destroying qpair */
	uint8_t					destroy_in_progress: 1;

	/* Number of IO outstanding at transport level */
	uint16_t				queue_depth;

	enum spdk_nvme_transport_type		trtype;

	uint32_t				num_outstanding_reqs;
+10 −4
Original line number Diff line number Diff line
@@ -216,6 +216,7 @@ nvme_pcie_qpair_construct(struct spdk_nvme_qpair *qpair,

	TAILQ_INIT(&pqpair->free_tr);
	TAILQ_INIT(&pqpair->outstanding_tr);
	pqpair->qpair.queue_depth = 0;

	for (i = 0; i < num_trackers; i++) {
		tr = &pqpair->tr[i];
@@ -629,7 +630,8 @@ nvme_pcie_qpair_submit_tracker(struct spdk_nvme_qpair *qpair, struct nvme_tracke

	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);
			  req->cmd.cdw10, req->cmd.cdw11, req->cmd.cdw12,
			  pqpair->qpair.queue_depth);

	if (req->cmd.fuse) {
		/*
@@ -674,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, req->cb_arg,
			  (uint32_t)req->cmd.cid, (uint32_t)cpl->status_raw);
			  (uint32_t)req->cmd.cid, (uint32_t)cpl->status_raw, pqpair->qpair.queue_depth);

	assert(req != NULL);

@@ -698,6 +700,7 @@ nvme_pcie_qpair_complete_tracker(struct spdk_nvme_qpair *qpair, struct nvme_trac
		nvme_pcie_qpair_submit_tracker(qpair, tr);
	} else {
		TAILQ_REMOVE(&pqpair->outstanding_tr, tr, tq_list);
		pqpair->qpair.queue_depth--;

		/* Only check admin requests from different processes. */
		if (nvme_qpair_is_admin_queue(qpair) && req->pid != getpid()) {
@@ -1645,6 +1648,7 @@ nvme_pcie_qpair_submit_request(struct spdk_nvme_qpair *qpair, struct nvme_reques
	pqpair->stat->submitted_requests++;
	TAILQ_REMOVE(&pqpair->free_tr, tr, tq_list); /* remove tr from free_tr */
	TAILQ_INSERT_TAIL(&pqpair->outstanding_tr, tr, tq_list);
	pqpair->qpair.queue_depth++;
	tr->req = req;
	tr->cb_fn = req->cb_fn;
	tr->cb_arg = req->cb_arg;
@@ -1826,7 +1830,8 @@ SPDK_TRACE_REGISTER_FN(nvme_pcie, "nvme_pcie", TRACE_GROUP_NVME_PCIE)
				{ "opc", SPDK_TRACE_ARG_TYPE_INT, 4 },
				{ "dw10", SPDK_TRACE_ARG_TYPE_PTR, 4 },
				{ "dw11", SPDK_TRACE_ARG_TYPE_PTR, 4 },
				{ "dw12", SPDK_TRACE_ARG_TYPE_PTR, 4 }
				{ "dw12", SPDK_TRACE_ARG_TYPE_PTR, 4 },
				{ "qd", SPDK_TRACE_ARG_TYPE_INT, 4 }
			}
		},
		{
@@ -1834,7 +1839,8 @@ SPDK_TRACE_REGISTER_FN(nvme_pcie, "nvme_pcie", TRACE_GROUP_NVME_PCIE)
			OWNER_TYPE_NVME_PCIE_QP, OBJECT_NVME_PCIE_REQ, 0,
			{	{ "ctx", SPDK_TRACE_ARG_TYPE_PTR, 8 },
				{ "cid", SPDK_TRACE_ARG_TYPE_INT, 4 },
				{ "cpl", SPDK_TRACE_ARG_TYPE_PTR, 4 }
				{ "cpl", SPDK_TRACE_ARG_TYPE_PTR, 4 },
				{ "qd", SPDK_TRACE_ARG_TYPE_INT, 4 }
			}
		},
	};