Add context and SRQ information to rdmatool
Subsystems (3)
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
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
@@ -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
PATCH 2/3 rdma: Add context resource tracking information
In reply to Leon RomanovskyFrom: 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
PATCH 3/3 rdma: Add SRQ resource tracking information
In reply to Leon RomanovskyFrom: 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
David Ahern
AppliedQuoted 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.