Commit f30fdcf1 authored by Jim Harris's avatar Jim Harris
Browse files

sock: add trace points for sock requests



Add tracepoints for queue/pend/complete for each sock request.

Note that we don't want to calculate the total request length when the
SOCK_REQ_QUEUE tracepoint is not enabled, so we use the new spdk_trace_tpoint_enabled()
macro to do that calculation only when necessary.

Signed-off-by: default avatarJim Harris <jim.harris@samsung.com>
Change-Id: I54d112cd0926c2e683968b17ba05b2da97061355
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/22099


Reviewed-by: default avatarSeung yeon Shin <syeon.shin@samsung.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: default avatarBen Walker <ben@nvidia.com>
parent d1ec8ae9
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@
#include "spdk/queue.h"
#include "spdk/likely.h"
#include "spdk/log.h"
#include "spdk/trace.h"
#include "spdk_internal/trace_defs.h"

#ifdef __cplusplus
extern "C" {
@@ -129,6 +131,15 @@ static inline void
spdk_sock_request_queue(struct spdk_sock *sock, struct spdk_sock_request *req)
{
	assert(req->internal.curr_list == NULL);
	if (spdk_unlikely(spdk_trace_tpoint_enabled(TRACE_SOCK_REQ_QUEUE))) {
		uint64_t len = 0;
		int i;

		for (i = 0; i < req->iovcnt; i++) {
			len += SPDK_SOCK_REQUEST_IOV(req, i)->iov_len;
		}
		spdk_trace_record(TRACE_SOCK_REQ_QUEUE, 0, len, (uintptr_t)req, (uintptr_t)req->cb_arg);
	}
	TAILQ_INSERT_TAIL(&sock->queued_reqs, req, internal.link);
#ifdef DEBUG
	req->internal.curr_list = &sock->queued_reqs;
@@ -140,6 +151,7 @@ static inline void
spdk_sock_request_pend(struct spdk_sock *sock, struct spdk_sock_request *req)
{
	assert(req->internal.curr_list == &sock->queued_reqs);
	spdk_trace_record(TRACE_SOCK_REQ_PEND, 0, 0, (uintptr_t)req, (uintptr_t)req->cb_arg);
	TAILQ_REMOVE(&sock->queued_reqs, req, internal.link);
	assert(sock->queued_iovcnt >= req->iovcnt);
	sock->queued_iovcnt -= req->iovcnt;
@@ -155,6 +167,7 @@ spdk_sock_request_complete(struct spdk_sock *sock, struct spdk_sock_request *req
	bool closed;
	int rc = 0;

	spdk_trace_record(TRACE_SOCK_REQ_COMPLETE, 0, 0, (uintptr_t)req, (uintptr_t)req->cb_arg);
	req->internal.offset = 0;
	req->internal.is_zcopy = 0;

+8 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
#define OWNER_BDEV		0x2
#define OWNER_NVME_PCIE_QP	0x3
#define OWNER_NVME_TCP_QP	0x4
#define OWNER_SOCK		0x5
#define OWNER_SCSI_DEV		0x10
#define OWNER_FTL		0x20
#define OWNER_NVMF_TCP		0x30
@@ -22,6 +23,7 @@
#define OBJECT_NVME_PCIE_REQ	0x3
#define OBJECT_NVME_TCP_REQ	0x4
#define OBJECT_BDEV_NVME_IO	0x5
#define OBJECT_SOCK_REQ		0x6
#define OBJECT_SCSI_TASK	0x10
#define OBJECT_NVMF_RDMA_IO	0x40
#define OBJECT_NVMF_TCP_IO	0x80
@@ -42,6 +44,7 @@
#define TRACE_GROUP_ACCEL_IAA	0xC
#define TRACE_GROUP_NVME_TCP	0xD
#define TRACE_GROUP_BDEV_NVME	0xE
#define TRACE_GROUP_SOCK	0xF

/* Bdev tracepoint definitions */
#define TRACE_BDEV_IO_START		SPDK_TPOINT_ID(TRACE_GROUP_BDEV, 0x0)
@@ -158,4 +161,9 @@
#define TRACE_BDEV_NVME_IO_START	SPDK_TPOINT_ID(TRACE_GROUP_BDEV_NVME, 0x0)
#define TRACE_BDEV_NVME_IO_DONE		SPDK_TPOINT_ID(TRACE_GROUP_BDEV_NVME, 0x1)

/* sock tracepoint definitions */
#define TRACE_SOCK_REQ_QUEUE		SPDK_TPOINT_ID(TRACE_GROUP_SOCK, 0x0)
#define TRACE_SOCK_REQ_PEND		SPDK_TPOINT_ID(TRACE_GROUP_SOCK, 0x1)
#define TRACE_SOCK_REQ_COMPLETE		SPDK_TPOINT_ID(TRACE_GROUP_SOCK, 0x2)

#endif /* SPDK_INTERNAL_TRACE_DEFS */
+33 −0
Original line number Diff line number Diff line
@@ -11,6 +11,8 @@
#include "spdk/log.h"
#include "spdk/env.h"
#include "spdk/util.h"
#include "spdk/trace.h"
#include "spdk_internal/trace_defs.h"

#define SPDK_SOCK_DEFAULT_PRIORITY 0
#define SPDK_SOCK_DEFAULT_ZCOPY true
@@ -978,3 +980,34 @@ spdk_sock_get_default_impl(void)
}

SPDK_LOG_REGISTER_COMPONENT(sock)

SPDK_TRACE_REGISTER_FN(sock_trace, "sock", TRACE_GROUP_SOCK)
{
	struct spdk_trace_tpoint_opts opts[] = {
		{
			"SOCK_REQ_QUEUE", TRACE_SOCK_REQ_QUEUE,
			OWNER_SOCK, OBJECT_SOCK_REQ, 1,
			{
				{ "ctx", SPDK_TRACE_ARG_TYPE_PTR, 8 },
			}
		},
		{
			"SOCK_REQ_PEND", TRACE_SOCK_REQ_PEND,
			OWNER_SOCK, OBJECT_SOCK_REQ, 0,
			{
				{ "ctx", SPDK_TRACE_ARG_TYPE_PTR, 8 },
			}
		},
		{
			"SOCK_REQ_COMPLETE", TRACE_SOCK_REQ_COMPLETE,
			OWNER_SOCK, OBJECT_SOCK_REQ, 0,
			{
				{ "ctx", SPDK_TRACE_ARG_TYPE_PTR, 8 },
			}
		},
	};

	spdk_trace_register_owner(OWNER_SOCK, 's');
	spdk_trace_register_object(OBJECT_SOCK_REQ, 's');
	spdk_trace_register_description_ext(opts, SPDK_COUNTOF(opts));
}
+3 −3
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ DEPDIRS-env_dpdk := log util

DEPDIRS-ioat := log
DEPDIRS-idxd := log util
DEPDIRS-sock := log $(JSON_LIBS)
DEPDIRS-sock := log $(JSON_LIBS) trace
DEPDIRS-util := log
DEPDIRS-vmd := log util
DEPDIRS-dma := log
@@ -118,8 +118,8 @@ endif
DEPDIRS-env_dpdk_rpc := $(JSON_LIBS)

# module/sock
DEPDIRS-sock_posix := log sock util
DEPDIRS-sock_uring := log sock util
DEPDIRS-sock_posix := log sock util trace
DEPDIRS-sock_uring := log sock util trace

# module/scheduler
DEPDIRS-scheduler_dynamic := event log thread util json