Skip to contentSkip to conversation

Add context and SRQ information to rdmatool

PATCH Applied Leon Romanovsky 2 participants 5 messages Apr 25, 2021 – Apr 28, 2021

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

cover Add context and SRQ information to rdmatool

From: Leon Romanovsky <[email protected]>

Hi,

This is the user space part of already accepted to the kernel series that extends RDMA netlink interface to return uverbs context and SRQ information.

The accepted kernel series can be seen here:
https://lore.kernel.org/linux-rdma/[email protected]/

Thanks

Neta Ostrovsky (2):
rdma: Update uapi headers
rdma: Add context resource tracking information
rdma: Add SRQ resource tracking information

 man/man8/rdma-resource.8              |  12 +-
 rdma/Makefile                         |   2 +-
 rdma/include/uapi/rdma/rdma_netlink.h |  13 ++
 rdma/res-ctx.c                        | 103 ++++++++++
 rdma/res-srq.c                        | 274 ++++++++++++++++++++++++++
 rdma/res.c                            |   8 +-
 rdma/res.h                            |  28 +++
 rdma/utils.c                          |   8 +
 8 files changed, 445 insertions(+), 3 deletions(-)
 create mode 100644 rdma/res-ctx.c
 create mode 100644 rdma/res-srq.c
Signature · 1 line
2.30.2
#1 lore raw

PATCH 1/3 rdma: Update uapi headers

From: Neta Ostrovsky <[email protected]>

Update rdma_netlink.h file upto kernel commit c6c11ad3ab9f ("RDMA/nldev: Add QP numbers to SRQ information")

---
 rdma/include/uapi/rdma/rdma_netlink.h | 13 +++++++++++++
 1 file changed, 13 insertions(+)
rdma/include/uapi/rdma/rdma_netlink.h +13 -0
index 4aef76ae..e161c245 100644
@@ -293,6 +293,10 @@ enum rdma_nldev_command {
 
 	RDMA_NLDEV_CMD_RES_MR_GET_RAW,
 
+	RDMA_NLDEV_CMD_RES_CTX_GET, /* can dump */
+
+	RDMA_NLDEV_CMD_RES_SRQ_GET, /* can dump */
+
 	RDMA_NLDEV_NUM_OPS
 };
 
@@ -533,6 +537,15 @@ enum rdma_nldev_attr {
 
 	RDMA_NLDEV_ATTR_RES_RAW,	/* binary */
 
+	RDMA_NLDEV_ATTR_RES_CTX,		/* nested table */
+	RDMA_NLDEV_ATTR_RES_CTX_ENTRY,		/* nested table */
+
+	RDMA_NLDEV_ATTR_RES_SRQ,		/* nested table */
+	RDMA_NLDEV_ATTR_RES_SRQ_ENTRY,		/* nested table */
+	RDMA_NLDEV_ATTR_RES_SRQN,		/* u32 */
+
+	RDMA_NLDEV_ATTR_MIN_RANGE,		/* u32 */
+	RDMA_NLDEV_ATTR_MAX_RANGE,		/* u32 */
 	/*
 	 * Always the end
 	 */
Signature · 1 line
2.30.2
#2 lore raw

PATCH 2/3 rdma: Add context resource tracking information

In reply to Leon Romanovsky

From: Neta Ostrovsky <[email protected]>

Sample output:

$ rdma res show ctx
dev ibp8s0f0 ctxn 0 pid 980 comm ibv_rc_pingpong
dev ibp8s0f0 ctxn 1 pid 981 comm ibv_rc_pingpong
dev ibp8s0f0 ctxn 2 pid 992 comm ibv_rc_pingpong
dev ibp8s0f1 ctxn 0 pid 984 comm ibv_rc_pingpong
dev ibp8s0f1 ctxn 1 pid 987 comm ibv_rc_pingpong
$ rdma res show ctx dev ibp8s0f1
dev ibp8s0f1 ctxn 0 pid 984 comm ibv_rc_pingpong
dev ibp8s0f1 ctxn 1 pid 987 comm ibv_rc_pingpong
---
 man/man8/rdma-resource.8 |   7 ++-
 rdma/Makefile            |   2 +-
 rdma/res-ctx.c           | 103 +++++++++++++++++++++++++++++++++++++++
 rdma/res.c               |   5 +-
 rdma/res.h               |  12 +++++
 rdma/utils.c             |   3 ++
 6 files changed, 129 insertions(+), 3 deletions(-)
 create mode 100644 rdma/res-ctx.c
man/man8/rdma-resource.8 +6 -1
index 8d0d14c6..c2102853 100644
@@ -13,7 +13,7 @@ rdma-resource \- rdma resource configuration
 
 .ti -8
 .IR RESOURCE " := { "
-.BR cm_id " | " cq " | " mr " | " pd " | " qp " }"
+.BR cm_id " | " cq " | " mr " | " pd " | " qp " | " ctx " }"
 .sp
 
 .ti -8
@@ -103,6 +103,11 @@ rdma resource show cq pid 30489
 Show CQs belonging to pid 30489
 .RE
 .PP
+rdma resource show ctx ctxn 1
+.RS 4
+Show contexts that have index equal to 1.
+.RE
+.PP
 
 .SH SEE ALSO
 .BR rdma (8),
rdma/Makefile +1 -1
index aa5ce822..32f504fc 100644
@@ -7,7 +7,7 @@ ifeq ($(HAVE_MNL),y)
 CFLAGS += -I./include/uapi/
 
 RDMA_OBJ = rdma.o utils.o dev.o link.o res.o res-pd.o res-mr.o res-cq.o \
-	   res-cmid.o res-qp.o sys.o stat.o stat-mr.o
+	   res-cmid.o res-qp.o sys.o stat.o stat-mr.o res-ctx.o
 
 TARGETS += rdma
 endif
rdma/res-ctx.c new file +103 -0

103 lines not on this page · raw message

rdma/res.c +4 -1
index f42ae938..dbc3179e 100644
@@ -11,7 +11,7 @@ static int res_help(struct rd *rd)
 {
 	pr_out("Usage: %s resource\n", rd->filename);
 	pr_out("          resource show [DEV]\n");
-	pr_out("          resource show [qp|cm_id|pd|mr|cq]\n");
+	pr_out("          resource show [qp|cm_id|pd|mr|cq|ctx]\n");
 	pr_out("          resource show qp link [DEV/PORT]\n");
 	pr_out("          resource show qp link [DEV/PORT] [FILTER-NAME FILTER-VALUE]\n");
 	pr_out("          resource show cm_id link [DEV/PORT]\n");
@@ -22,6 +22,8 @@ static int res_help(struct rd *rd)
 	pr_out("          resource show pd dev [DEV] [FILTER-NAME FILTER-VALUE]\n");
 	pr_out("          resource show mr dev [DEV]\n");
 	pr_out("          resource show mr dev [DEV] [FILTER-NAME FILTER-VALUE]\n");
+	pr_out("          resource show ctx dev [DEV]\n");
+	pr_out("          resource show ctx dev [DEV] [FILTER-NAME FILTER-VALUE]\n");
 	return 0;
 }
 
@@ -224,6 +226,7 @@ static int res_show(struct rd *rd)
 		{ "cq",		res_cq		},
 		{ "mr",		res_mr		},
 		{ "pd",		res_pd		},
+		{ "ctx",	res_ctx		},
 		{ 0 }
 	};
 
rdma/res.h +12 -0
index e8bd02e4..a8093d15 100644
@@ -22,6 +22,8 @@ int res_cm_id_parse_cb(const struct nlmsghdr *nlh, void *data);
 int res_cm_id_idx_parse_cb(const struct nlmsghdr *nlh, void *data);
 int res_qp_parse_cb(const struct nlmsghdr *nlh, void *data);
 int res_qp_idx_parse_cb(const struct nlmsghdr *nlh, void *data);
+int res_ctx_parse_cb(const struct nlmsghdr *nlh, void *data);
+int res_ctx_idx_parse_cb(const struct nlmsghdr *nlh, void *data);
 
 static inline uint32_t res_get_command(uint32_t command, struct rd *rd)
 {
@@ -155,6 +157,16 @@ filters qp_valid_filters[MAX_NUMBER_OF_FILTERS] = {
 RES_FUNC(res_qp, RDMA_NLDEV_CMD_RES_QP_GET, qp_valid_filters, false,
 	 RDMA_NLDEV_ATTR_RES_LQPN);
 
+static const
+struct filters ctx_valid_filters[MAX_NUMBER_OF_FILTERS] = {
+	{ .name = "dev", .is_number = false },
+	{ .name = "pid", .is_number = true },
+	{ .name = "ctxn", .is_number = true, .is_doit = true },
+};
+
+RES_FUNC(res_ctx, RDMA_NLDEV_CMD_RES_CTX_GET, ctx_valid_filters, true,
+	 RDMA_NLDEV_ATTR_RES_CTXN);
+
 void print_dev(struct rd *rd, uint32_t idx, const char *name);
 void print_link(struct rd *rd, uint32_t idx, const char *name, uint32_t port,
 		struct nlattr **nla_line);
rdma/utils.c +3 -0
index 292e1808..e2c9bb6f 100644
@@ -435,6 +435,9 @@ static const enum mnl_attr_data_type nldev_policy[RDMA_NLDEV_ATTR_MAX] = {
 	[RDMA_NLDEV_ATTR_RES_LKEY] = MNL_TYPE_U32,
 	[RDMA_NLDEV_ATTR_RES_IOVA] = MNL_TYPE_U64,
 	[RDMA_NLDEV_ATTR_RES_MRLEN] = MNL_TYPE_U64,
+	[RDMA_NLDEV_ATTR_RES_CTX] = MNL_TYPE_NESTED,
+	[RDMA_NLDEV_ATTR_RES_CTX_ENTRY] = MNL_TYPE_NESTED,
+	[RDMA_NLDEV_ATTR_RES_CTXN] = MNL_TYPE_U32,
 	[RDMA_NLDEV_ATTR_NDEV_INDEX]		= MNL_TYPE_U32,
 	[RDMA_NLDEV_ATTR_NDEV_NAME]		= MNL_TYPE_NUL_STRING,
 	[RDMA_NLDEV_ATTR_DRIVER] = MNL_TYPE_NESTED,
Signature · 1 line
2.30.2
#3 lore raw

PATCH 3/3 rdma: Add SRQ resource tracking information

In reply to Leon Romanovsky

From: Neta Ostrovsky <[email protected]>

Sample output:

$ rdma res show srq
dev ibp8s0f0 srqn 0 type BASIC pdn 3 comm [ib_ipoib]
dev ibp8s0f0 srqn 4 type BASIC lqpn 125-128,130-140 pdn 9 pid 3581 comm ibv_srq_pingpon
dev ibp8s0f0 srqn 5 type BASIC lqpn 141-156 pdn 10 pid 3584 comm ibv_srq_pingpon
dev ibp8s0f0 srqn 6 type BASIC lqpn 157-172 pdn 11 pid 3590 comm ibv_srq_pingpon
dev ibp8s0f1 srqn 0 type BASIC pdn 3 comm [ib_ipoib]
dev ibp8s0f1 srqn 1 type BASIC lqpn 329-344 pdn 4 pid 3586 comm ibv_srq_pingpon
$ rdma res show srq lqpn 126-141
dev ibp8s0f0 srqn 4 type BASIC lqpn 126-128,130-140 pdn 9 pid 3581 comm ibv_srq_pingpon
dev ibp8s0f0 srqn 5 type BASIC lqpn 141 pdn 10 pid 3584 comm ibv_srq_pingpon
$ rdma res show srq lqpn 127
dev ibp8s0f0 srqn 4 type BASIC lqpn 127 pdn 9 pid 3581 comm ibv_srq_pingpon
---
 man/man8/rdma-resource.8 |   7 +-
 rdma/Makefile            |   2 +-
 rdma/res-srq.c           | 274 +++++++++++++++++++++++++++++++++++++++
 rdma/res.c               |   5 +-
 rdma/res.h               |  16 +++
 rdma/utils.c             |   5 +
 6 files changed, 306 insertions(+), 3 deletions(-)
 create mode 100644 rdma/res-srq.c
man/man8/rdma-resource.8 +6 -1
index c2102853..1035478d 100644
@@ -13,7 +13,7 @@ rdma-resource \- rdma resource configuration
 
 .ti -8
 .IR RESOURCE " := { "
-.BR cm_id " | " cq " | " mr " | " pd " | " qp " | " ctx " }"
+.BR cm_id " | " cq " | " mr " | " pd " | " qp " | " ctx " | " srq " }"
 .sp
 
 .ti -8
@@ -108,6 +108,11 @@ rdma resource show ctx ctxn 1
 Show contexts that have index equal to 1.
 .RE
 .PP
+rdma resource show srq lqpn 5-7
+.RS 4
+Show SRQs that the QPs with lqpn 5-7 are associated with.
+.RE
+.PP
 
 .SH SEE ALSO
 .BR rdma (8),
rdma/Makefile +1 -1
index 32f504fc..9154efeb 100644
@@ -7,7 +7,7 @@ ifeq ($(HAVE_MNL),y)
 CFLAGS += -I./include/uapi/
 
 RDMA_OBJ = rdma.o utils.o dev.o link.o res.o res-pd.o res-mr.o res-cq.o \
-	   res-cmid.o res-qp.o sys.o stat.o stat-mr.o res-ctx.o
+	   res-cmid.o res-qp.o sys.o stat.o stat-mr.o res-ctx.o res-srq.o
 
 TARGETS += rdma
 endif
rdma/res-srq.c new file +274 -0

274 lines not on this page · raw message

rdma/res.c +4 -1
index dbc3179e..9aae5d4b 100644
@@ -11,7 +11,7 @@ static int res_help(struct rd *rd)
 {
 	pr_out("Usage: %s resource\n", rd->filename);
 	pr_out("          resource show [DEV]\n");
-	pr_out("          resource show [qp|cm_id|pd|mr|cq|ctx]\n");
+	pr_out("          resource show [qp|cm_id|pd|mr|cq|ctx|srq]\n");
 	pr_out("          resource show qp link [DEV/PORT]\n");
 	pr_out("          resource show qp link [DEV/PORT] [FILTER-NAME FILTER-VALUE]\n");
 	pr_out("          resource show cm_id link [DEV/PORT]\n");
@@ -24,6 +24,8 @@ static int res_help(struct rd *rd)
 	pr_out("          resource show mr dev [DEV] [FILTER-NAME FILTER-VALUE]\n");
 	pr_out("          resource show ctx dev [DEV]\n");
 	pr_out("          resource show ctx dev [DEV] [FILTER-NAME FILTER-VALUE]\n");
+	pr_out("          resource show srq dev [DEV]\n");
+	pr_out("          resource show srq dev [DEV] [FILTER-NAME FILTER-VALUE]\n");
 	return 0;
 }
 
@@ -227,6 +229,7 @@ static int res_show(struct rd *rd)
 		{ "mr",		res_mr		},
 		{ "pd",		res_pd		},
 		{ "ctx",	res_ctx		},
+		{ "srq",	res_srq		},
 		{ 0 }
 	};
 
rdma/res.h +16 -0
index a8093d15..58fa6ad1 100644
@@ -24,6 +24,8 @@ int res_qp_parse_cb(const struct nlmsghdr *nlh, void *data);
 int res_qp_idx_parse_cb(const struct nlmsghdr *nlh, void *data);
 int res_ctx_parse_cb(const struct nlmsghdr *nlh, void *data);
 int res_ctx_idx_parse_cb(const struct nlmsghdr *nlh, void *data);
+int res_srq_parse_cb(const struct nlmsghdr *nlh, void *data);
+int res_srq_idx_parse_cb(const struct nlmsghdr *nlh, void *data);
 
 static inline uint32_t res_get_command(uint32_t command, struct rd *rd)
 {
@@ -167,6 +169,20 @@ struct filters ctx_valid_filters[MAX_NUMBER_OF_FILTERS] = {
 RES_FUNC(res_ctx, RDMA_NLDEV_CMD_RES_CTX_GET, ctx_valid_filters, true,
 	 RDMA_NLDEV_ATTR_RES_CTXN);
 
+static const
+struct filters srq_valid_filters[MAX_NUMBER_OF_FILTERS] = {
+	{ .name = "dev", .is_number = false },
+	{ .name = "pid", .is_number = true },
+	{ .name = "srqn", .is_number = true, .is_doit = true },
+	{ .name = "type", .is_number = false },
+	{ .name = "pdn", .is_number = true },
+	{ .name = "cqn", .is_number = true },
+	{ .name = "lqpn", .is_number = true },
+};
+
+RES_FUNC(res_srq, RDMA_NLDEV_CMD_RES_SRQ_GET, srq_valid_filters, true,
+	 RDMA_NLDEV_ATTR_RES_SRQN);
+
 void print_dev(struct rd *rd, uint32_t idx, const char *name);
 void print_link(struct rd *rd, uint32_t idx, const char *name, uint32_t port,
 		struct nlattr **nla_line);
rdma/utils.c +5 -0
index e2c9bb6f..21177b56 100644
@@ -438,6 +438,11 @@ static const enum mnl_attr_data_type nldev_policy[RDMA_NLDEV_ATTR_MAX] = {
 	[RDMA_NLDEV_ATTR_RES_CTX] = MNL_TYPE_NESTED,
 	[RDMA_NLDEV_ATTR_RES_CTX_ENTRY] = MNL_TYPE_NESTED,
 	[RDMA_NLDEV_ATTR_RES_CTXN] = MNL_TYPE_U32,
+	[RDMA_NLDEV_ATTR_RES_SRQ] = MNL_TYPE_NESTED,
+	[RDMA_NLDEV_ATTR_RES_SRQ_ENTRY] = MNL_TYPE_NESTED,
+	[RDMA_NLDEV_ATTR_RES_SRQN] = MNL_TYPE_U32,
+	[RDMA_NLDEV_ATTR_MIN_RANGE] = MNL_TYPE_U32,
+	[RDMA_NLDEV_ATTR_MAX_RANGE] = MNL_TYPE_U32,
 	[RDMA_NLDEV_ATTR_NDEV_INDEX]		= MNL_TYPE_U32,
 	[RDMA_NLDEV_ATTR_NDEV_NAME]		= MNL_TYPE_NUL_STRING,
 	[RDMA_NLDEV_ATTR_DRIVER] = MNL_TYPE_NESTED,
Signature · 1 line
2.30.2
Applied
#4 lore raw
In reply to Leon Romanovsky
Quoted 18 lines · Leon Romanovsky

From: Leon Romanovsky <[email protected]>

Hi,

This is the user space part of already accepted to the kernel series that extends RDMA netlink interface to return uverbs context and SRQ information.

The accepted kernel series can be seen here:
https://lore.kernel.org/linux-rdma/[email protected]/

Thanks

Neta Ostrovsky (2):
rdma: Update uapi headers
rdma: Add context resource tracking information
rdma: Add SRQ resource tracking information

Quoted 12 lines
 man/man8/rdma-resource.8              |  12 +-
 rdma/Makefile                         |   2 +-
 rdma/include/uapi/rdma/rdma_netlink.h |  13 ++
 rdma/res-ctx.c                        | 103 ++++++++++
 rdma/res-srq.c                        | 274 ++++++++++++++++++++++++++
 rdma/res.c                            |   8 +-
 rdma/res.h                            |  28 +++
 rdma/utils.c                          |   8 +
 8 files changed, 445 insertions(+), 3 deletions(-)
 create mode 100644 rdma/res-ctx.c
 create mode 100644 rdma/res-srq.c

applied to iproute2-next.