RDMA tool driver-specific resource tracking
Subsystems (3)
v2 cover RDMA tool driver-specific resource tracking
Hello,
This series enhances the iproute2 rdma tool to include displaying driver-specific resource attributes. It is the user-space part of the kernel driver resource tracking series that has been accepted for merging into linux-4.18 [1]
If there are no additional review comments, it can now be merged, I think.
Changes since v1:
- commit log editorial fixes
- cite kernel commits that updated rdma_netlink.h in the iproute2 commit syncing this header
- reorder stack definitions ala "reverse christmas tree"
- correctly handle unknown driver attributes when printing
Changes since v0/rfc:
- changed "provider" to "driver" based on kernel side changes
- updated man pages
- removed "RFC" tag
Thanks,
Steve.
[1] https://www.spinics.net/lists/linux-rdma/msg64199.html
Steve Wise (3):
rdma: update rdma_netlink.h to get new driver attributes
rdma: print driver resource attributes
rdma: update man pages
man/man8/rdma-resource.8 | 29 ++++- man/man8/rdma.8 | 2 +- rdma/include/uapi/rdma/rdma_netlink.h | 26 +++++ rdma/rdma.c | 9 +- rdma/rdma.h | 11 ++ rdma/res.c | 30 ++---- rdma/utils.c | 196 ++++++++++++++++++++++++++++++++++ 7 files changed, 277 insertions(+), 26 deletions(-)
Signature · 1 line
1.8.3.1
PATCH v2 1/3 rdma: update rdma_netlink.h to get new driver attributes
Pull in the rdma_netlink.h changes from kernel
commits:
25a0ad85156a ("RDMA/nldev: Add explicit pad attribute") da5c85078215 ("RDMA/nldev: add driver-specific resource tracking)"
--- rdma/include/uapi/rdma/rdma_netlink.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+)
rdma/include/uapi/rdma/rdma_netlink.h +26 -0
@@ -249,10 +249,22 @@ enum rdma_nldev_command {RDMA_NLDEV_NUM_OPS }; +enum { +RDMA_NLDEV_ATTR_ENTRY_STRLEN =16 , +}; + +enum rdma_nldev_print_type { +RDMA_NLDEV_PRINT_TYPE_UNSPEC , +RDMA_NLDEV_PRINT_TYPE_HEX , +}; +enum rdma_nldev_attr {/* don't change the order or add anything between, this is ABI! */ RDMA_NLDEV_ATTR_UNSPEC , +/* Pad attribute for 64b alignment */ +RDMA_NLDEV_ATTR_PAD =RDMA_NLDEV_ATTR_UNSPEC , +/* Identifier for ib_device */ RDMA_NLDEV_ATTR_DEV_INDEX ,/* u32 */
@@ -387,6 +399,20 @@ enum rdma_nldev_attr {RDMA_NLDEV_ATTR_RES_PD_ENTRY ,/* nested table */ RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY ,/* u32 */ RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY ,/* u32 */ +/* +* driver-specific attributes. +*/ +RDMA_NLDEV_ATTR_DRIVER ,/* nested table */ +RDMA_NLDEV_ATTR_DRIVER_ENTRY ,/* nested table */ +RDMA_NLDEV_ATTR_DRIVER_STRING ,/* string */ +/* +* u8 values from enum rdma_nldev_print_type +*/ +RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE ,/* u8 */ +RDMA_NLDEV_ATTR_DRIVER_S32 ,/* s32 */ +RDMA_NLDEV_ATTR_DRIVER_U32 ,/* u32 */ +RDMA_NLDEV_ATTR_DRIVER_S64 ,/* s64 */ +RDMA_NLDEV_ATTR_DRIVER_U64 ,/* u64 */ /* * Provides logical name and index of netdevice which is
Signature · 1 line
1.8.3.1
Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes
Quoted 9 lines · Steve Wise
rdma/include/uapi/rdma/rdma_netlink.h +1
-0@@ -249,10 +249,22 @@ enum rdma_nldev_command {RDMA_NLDEV_NUM_OPS }; +enum {
rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_command { · line 262
Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +8
-0+ RDMA_NLDEV_ATTR_ENTRY_STRLEN = 16, +}; + +enum rdma_nldev_print_type { +RDMA_NLDEV_PRINT_TYPE_UNSPEC , +RDMA_NLDEV_PRINT_TYPE_HEX , +}; +enum rdma_nldev_attr {/* don't change the order or add anything between, this is ABI! */
I asked this before and did not get a response. As the comment above states with an emphasis (!) ...
rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_command { · line 267
Quoted 5 lines
rdma/include/uapi/rdma/rdma_netlink.h +3
-0RDMA_NLDEV_ATTR_UNSPEC , +/* Pad attribute for 64b alignment */ + RDMA_NLDEV_ATTR_PAD = RDMA_NLDEV_ATTR_UNSPEC, +
... are you really adding new attributes in the middle?
Quoted 11 lines
rdma/include/uapi/rdma/rdma_netlink.h +4
-0/* Identifier for ib_device */ RDMA_NLDEV_ATTR_DEV_INDEX, /* u32 */@@ -387,6 +399,20 @@ enum rdma_nldev_attr {RDMA_NLDEV_ATTR_RES_PD_ENTRY ,/* nested table */ RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY ,/* u32 */ RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY ,/* u32 */ +/* +* driver-specific attributes. +*/ + RDMA_NLDEV_ATTR_DRIVER, /* nested table */
rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 415
Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +10
-0+RDMA_NLDEV_ATTR_DRIVER_ENTRY ,/* nested table */ +RDMA_NLDEV_ATTR_DRIVER_STRING ,/* string */ +/* +* u8 values from enum rdma_nldev_print_type +*/ +RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE ,/* u8 */ +RDMA_NLDEV_ATTR_DRIVER_S32 ,/* s32 */ +RDMA_NLDEV_ATTR_DRIVER_U32 ,/* u32 */ +RDMA_NLDEV_ATTR_DRIVER_S64 ,/* s64 */ + RDMA_NLDEV_ATTR_DRIVER_U64, /* u64 */
and again here.
Quoted 4 lines
rdma/include/uapi/rdma/rdma_netlink.h +0
-0/* * Provides logical name and index of netdevice which is
Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes
Quoted 24 lines · David Ahern
Quoted 9 lines · Steve Wise
rdma/include/uapi/rdma/rdma_netlink.h +1
-0@@ -249,10 +249,22 @@ enum rdma_nldev_command {RDMA_NLDEV_NUM_OPS }; +enum {rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_command { · line 262
Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +8
-0+ RDMA_NLDEV_ATTR_ENTRY_STRLEN = 16, +}; + +enum rdma_nldev_print_type { +RDMA_NLDEV_PRINT_TYPE_UNSPEC , +RDMA_NLDEV_PRINT_TYPE_HEX , +}; +enum rdma_nldev_attr {/* don't change the order or add anything between, this is ABI! */ I asked this before and did not get a response. As the comment above states with an emphasis (!) ...
Quoted 7 lines
rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_command { · line 267
Quoted 5 lines
rdma/include/uapi/rdma/rdma_netlink.h +3
-0RDMA_NLDEV_ATTR_UNSPEC , +/* Pad attribute for 64b alignment */ + RDMA_NLDEV_ATTR_PAD = RDMA_NLDEV_ATTR_UNSPEC, +... are you really adding new attributes in the middle?
Not really. The new item is being explicitly set to the same value as the item above it. It therefore becomes two entries with the same enum value. The rest of the enum is all unchanged.
Quoted 33 lines
Quoted 11 lines
rdma/include/uapi/rdma/rdma_netlink.h +4
-0/* Identifier for ib_device */ RDMA_NLDEV_ATTR_DEV_INDEX, /* u32 */@@ -387,6 +399,20 @@ enum rdma_nldev_attr {RDMA_NLDEV_ATTR_RES_PD_ENTRY ,/* nested table */ RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY ,/* u32 */ RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY ,/* u32 */ +/* +* driver-specific attributes. +*/ + RDMA_NLDEV_ATTR_DRIVER, /* nested table */rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 415
Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +10
-0+RDMA_NLDEV_ATTR_DRIVER_ENTRY ,/* nested table */ +RDMA_NLDEV_ATTR_DRIVER_STRING ,/* string */ +/* +* u8 values from enum rdma_nldev_print_type +*/ +RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE ,/* u8 */ +RDMA_NLDEV_ATTR_DRIVER_S32 ,/* s32 */ +RDMA_NLDEV_ATTR_DRIVER_U32 ,/* u32 */ +RDMA_NLDEV_ATTR_DRIVER_S64 ,/* s64 */ + RDMA_NLDEV_ATTR_DRIVER_U64, /* u64 */and again here.
rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr {
Quoted 4 lines
rdma/include/uapi/rdma/rdma_netlink.h +0
-0/* * Provides logical name and index of netdevice which is --
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Signature · 3 lines
Doug Ledford <[email protected]> GPG KeyID: B826A3330E572FDD Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD
Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes
Quoted 33 lines · Doug Ledford
Quoted 24 lines · David Ahern
Quoted 9 lines · Steve Wise
rdma/include/uapi/rdma/rdma_netlink.h +1
-0@@ -249,10 +249,22 @@ enum rdma_nldev_command {RDMA_NLDEV_NUM_OPS }; +enum {rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_command { · line 262
Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +8
-0+ RDMA_NLDEV_ATTR_ENTRY_STRLEN = 16, +}; + +enum rdma_nldev_print_type { +RDMA_NLDEV_PRINT_TYPE_UNSPEC , +RDMA_NLDEV_PRINT_TYPE_HEX , +}; +enum rdma_nldev_attr {/* don't change the order or add anything between, this is ABI! */ I asked this before and did not get a response. As the comment above states with an emphasis (!) ...
Quoted 7 lines
rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_command { · line 267
Quoted 5 lines
rdma/include/uapi/rdma/rdma_netlink.h +3
-0RDMA_NLDEV_ATTR_UNSPEC , +/* Pad attribute for 64b alignment */ + RDMA_NLDEV_ATTR_PAD = RDMA_NLDEV_ATTR_UNSPEC, +... are you really adding new attributes in the middle?
Quoted 3 lines
Not really. The new item is being explicitly set to the same value as the item above it. It therefore becomes two entries with the same enum value. The rest of the enum is all unchanged.
sure for the above, but not the ones below.
Before this patch, this program:
$ cat a.c #include <uapi/rdma/rdma_netlink.h> #include <stdio.h>
int main(void)
{
printf("RDMA_NLDEV_ATTR_NDEV_INDEX = %d\n", RDMA_NLDEV_ATTR_NDEV_INDEX);
return 0;
}prints this:
$ ./a.out RDMA_NLDEV_ATTR_NDEV_INDEX = 50
After this patch,
$ ./a.out RDMA_NLDEV_ATTR_NDEV_INDEX = 58
Quoted 35 lines
Quoted 34 lines
Quoted 12 lines
rdma/include/uapi/rdma/rdma_netlink.h +4
-0/* Identifier for ib_device */ RDMA_NLDEV_ATTR_DEV_INDEX, /* u32 */@@ -387,6 +399,20 @@ enum rdma_nldev_attr {RDMA_NLDEV_ATTR_RES_PD_ENTRY ,/* nested table */ RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY ,/* u32 */ RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY ,/* u32 */ +/* +* driver-specific attributes. +*/ + RDMA_NLDEV_ATTR_DRIVER, /* nested table */rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 415
Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +10
-0+RDMA_NLDEV_ATTR_DRIVER_ENTRY ,/* nested table */ +RDMA_NLDEV_ATTR_DRIVER_STRING ,/* string */ +/* +* u8 values from enum rdma_nldev_print_type +*/ +RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE ,/* u8 */ +RDMA_NLDEV_ATTR_DRIVER_S32 ,/* s32 */ +RDMA_NLDEV_ATTR_DRIVER_U32 ,/* u32 */ +RDMA_NLDEV_ATTR_DRIVER_S64 ,/* s64 */ + RDMA_NLDEV_ATTR_DRIVER_U64, /* u64 */and again here.
rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr {
Quoted 4 lines
rdma/include/uapi/rdma/rdma_netlink.h +0
-0/* * Provides logical name and index of netdevice which is --
To unsubscribe from this list: send the line "unsubscribe linux-rdma" icat n the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes
Quoted 14 lines · David Ahern
sure for the above, but not the ones below.
Before this patch, this program:
$ cat a.c #include <uapi/rdma/rdma_netlink.h> #include <stdio.h>int main(void)
{ printf("RDMA_NLDEV_ATTR_NDEV_INDEX = %d\n", RDMA_NLDEV_ATTR_NDEV_INDEX); return 0; }
Quoted 7 lines
prints this:
$ ./a.out RDMA_NLDEV_ATTR_NDEV_INDEX = 50After this patch,
$ ./a.out RDMA_NLDEV_ATTR_NDEV_INDEX = 58
I just sent an incremental fix to the list under separate cover. You can squash that fix into Steve's patch and it should resolve the issue. Or Steve can respin the set. Either way.
Signature · 3 lines
Doug Ledford <[email protected]> GPG KeyID: B826A3330E572FDD Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD
Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes
Quoted 3 lines · Doug Ledford
I just sent an incremental fix to the list under separate cover. You can squash that fix into Steve's patch and it should resolve the issue. Or Steve can respin the set. Either way.
Once the patch has been committed to the upstream repo, spin a new set with the correct header update.
Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes
Quoted 7 lines · David Ahern
Quoted 3 lines · Doug Ledford
I just sent an incremental fix to the list under separate cover. You can squash that fix into Steve's patch and it should resolve the issue. Or Steve can respin the set. Either way.
Once the patch has been committed to the upstream repo, spin a new set with the correct header update.
Well, I wrote it, so it's in my repo now ;-). I just sent it to the list because that's what you do when you are writing fixup patches even if you've already committed them.
Signature · 3 lines
Doug Ledford <[email protected]> GPG KeyID: B826A3330E572FDD Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD
RE: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes
In reply to David AhernQuoted 12 lines
-----Original Message-----
From: David Ahern <[email protected]>
Sent: Tuesday, May 15, 2018 3:02 PM
To: Doug Ledford <[email protected]>; Steve Wise <[email protected]>; [email protected]
Cc: [email protected]; [email protected]; linux- [email protected]
Subject: Re: [PATCH v2 iproute2-next 1/3] rdma: updaterdma_netlink.hto get new driver attributes
Quoted 7 lines
Quoted 3 lines · Doug Ledford
I just sent an incremental fix to the list under separate cover. You can squash that fix into Steve's patch and it should resolve the issue. Or Steve can respin the set. Either way.
Once the patch has been committed to the upstream repo, spin a new set with the correct header update.
Will do!
Steve.
RE: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes
In reply to Doug LedfordQuoted 25 lines · David Ahern
Quoted 2 lines · Steve Wise
Review
Quoted 1 line
(quoted diff) +0
-0
b/rdma/include/uapi/rdma/rdma_netlink.hQuoted 21 lines
Quoted 8 lines
index 60416ed..40be0d8 100644
rdma/include/uapi/rdma/rdma_netlink.h +1
-0@@ -249,10 +249,22 @@ enum rdma_nldev_command {RDMA_NLDEV_NUM_OPS }; +enum {rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_command { · line 262
Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +8
-0+ RDMA_NLDEV_ATTR_ENTRY_STRLEN = 16, +}; + +enum rdma_nldev_print_type { +RDMA_NLDEV_PRINT_TYPE_UNSPEC , +RDMA_NLDEV_PRINT_TYPE_HEX , +}; +enum rdma_nldev_attr {/* don't change the order or add anything between, this is ABI! */ I asked this before and did not get a response. As the comment above states with an emphasis (!) ...
Sorry David, I missed your question previously. ☹
Quoted 9 lines
Quoted 8 lines
rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_command { · line 267
Quoted 6 lines
rdma/include/uapi/rdma/rdma_netlink.h +3
-0RDMA_NLDEV_ATTR_UNSPEC , +/* Pad attribute for 64b alignment */ + RDMA_NLDEV_ATTR_PAD = RDMA_NLDEV_ATTR_UNSPEC, +... are you really adding new attributes in the middle?
Quoted 3 lines
Not really. The new item is being explicitly set to the same value as the item above it. It therefore becomes two entries with the same enum value. The rest of the enum is all unchanged.
Correct.
The reason this was done was because a kernel had already been released where 64b nlattrs were being padded with 0 instead of defining an explicit pad attribute. Jason thought the kernel side should define an explicit PAD attribute and use it. To preserve the ABI we defined it but set it to 0 (aka ATTR_UNSPEC aka the first in the enum).
Quoted 17 lines
Quoted 17 lines
Quoted 17 lines
rdma/include/uapi/rdma/rdma_netlink.h +9
-0/* Identifier for ib_device */ RDMA_NLDEV_ATTR_DEV_INDEX, /* u32 */@@ -387,6 +399,20 @@ enum rdma_nldev_attr {RDMA_NLDEV_ATTR_RES_PD_ENTRY ,/* nested table */ RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY ,/* u32 */ RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY ,/* u32 */ +/* +* driver-specific attributes. +*/ +RDMA_NLDEV_ATTR_DRIVER ,/* nested table */ +RDMA_NLDEV_ATTR_DRIVER_ENTRY ,/* nested table */ +RDMA_NLDEV_ATTR_DRIVER_STRING ,/* string */ +/* +* u8 values from enum rdma_nldev_print_type + */
Quoted 8 lines
Quoted 8 lines
rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 415
Quoted 5 lines
rdma/include/uapi/rdma/rdma_netlink.h +5
-0+RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE ,/* u8 */ +RDMA_NLDEV_ATTR_DRIVER_S32 ,/* s32 */ +RDMA_NLDEV_ATTR_DRIVER_U32 ,/* u32 */ +RDMA_NLDEV_ATTR_DRIVER_S64 ,/* s64 */ + RDMA_NLDEV_ATTR_DRIVER_U64, /* u64 */and again here.
Ugh, this looks like a mistake maybe due to me rebasing and not noticing this commit added the name/index attrs.
5b2cc79de878 [email protected] RDMA/nldev: Provide netdevice name and index
Both of these are in -next to be merged upstream together.
Should I do anything?
Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes
In reply to David AhernQuoted 18 lines · David Ahern
Quoted 17 lines · Steve Wise
rdma/include/uapi/rdma/rdma_netlink.h +8
-0@@ -387,6 +399,20 @@ enum rdma_nldev_attr {RDMA_NLDEV_ATTR_RES_PD_ENTRY ,/* nested table */ RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY ,/* u32 */ RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY ,/* u32 */ +/* +* driver-specific attributes. +*/ +RDMA_NLDEV_ATTR_DRIVER ,/* nested table */ +RDMA_NLDEV_ATTR_DRIVER_ENTRY ,/* nested table */ +RDMA_NLDEV_ATTR_DRIVER_STRING ,/* string */ +/* +* u8 values from enum rdma_nldev_print_type
Quoted 8 lines
rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 415
Quoted 6 lines
rdma/include/uapi/rdma/rdma_netlink.h +6
-0+*/ +RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE ,/* u8 */ +RDMA_NLDEV_ATTR_DRIVER_S32 ,/* s32 */ +RDMA_NLDEV_ATTR_DRIVER_U32 ,/* u32 */ +RDMA_NLDEV_ATTR_DRIVER_S64 ,/* s64 */ + RDMA_NLDEV_ATTR_DRIVER_U64, /* u64 */and again here.
This chunk, however, is a problem. We'll need to fix that in the kernel and in this patch too.
Signature · 3 lines
Doug Ledford <[email protected]> GPG KeyID: B826A3330E572FDD Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD
RE: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes
Quoted 42 lines
-----Original Message-----
From: [email protected] <linux-rdma- [email protected]> On Behalf Of Doug Ledford
Sent: Tuesday, May 15, 2018 2:53 PM
To: David Ahern <[email protected]>; Steve Wise <[email protected]>; [email protected]
Cc: [email protected]; [email protected]; linux- [email protected]
Subject: Re: [PATCH v2 iproute2-next 1/3] rdma: updaterdma_netlink.hto get new driver attributesQuoted 2 lines · David Ahern
Review
Quoted 1 line · Steve Wise
(quoted diff) +0
-0
b/rdma/include/uapi/rdma/rdma_netlink.hQuoted 16 lines
Quoted 16 lines
index 60416ed..40be0d8 100644
rdma/include/uapi/rdma/rdma_netlink.h +8
-0@@ -387,6 +399,20 @@ enum rdma_nldev_attr {RDMA_NLDEV_ATTR_RES_PD_ENTRY ,/* nested table */ RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY ,/* u32 */ RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY ,/* u32 */ +/* +* driver-specific attributes. +*/ +RDMA_NLDEV_ATTR_DRIVER ,/* nested table */ +RDMA_NLDEV_ATTR_DRIVER_ENTRY ,/* nested table */ +RDMA_NLDEV_ATTR_DRIVER_STRING ,/* string */ +/* +* u8 values from enum rdma_nldev_print_type Quoted 8 lines
rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 415
Quoted 6 lines
rdma/include/uapi/rdma/rdma_netlink.h +6
-0+*/ +RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE ,/* u8 */ +RDMA_NLDEV_ATTR_DRIVER_S32 ,/* s32 */ +RDMA_NLDEV_ATTR_DRIVER_U32 ,/* u32 */ +RDMA_NLDEV_ATTR_DRIVER_S64 ,/* s64 */ + RDMA_NLDEV_ATTR_DRIVER_U64, /* u64 */and again here.
Quoted 2 lines
This chunk, however, is a problem. We'll need to fix that in the kernel and in this patch too.
I'll fix this series once I fix the kernel side. Doug, should I send a patch that basically moves the DRIVER attributes to the bottom?
Sorry about missing this!
Steve
Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes
Quoted 41 lines · Steve Wise
Quoted 41 lines
-----Original Message-----
From: [email protected] <linux-rdma- [email protected]> On Behalf Of Doug Ledford
Sent: Tuesday, May 15, 2018 2:53 PM
To: David Ahern <[email protected]>; Steve Wise <[email protected]>; [email protected]
Cc: [email protected]; [email protected]; linux- [email protected]
Subject: Re: [PATCH v2 iproute2-next 1/3] rdma: updaterdma_netlink.hto get new driver attributesQuoted 2 lines · David Ahern
Review
Quoted 1 line · Steve Wise
(quoted diff) +0
-0
b/rdma/include/uapi/rdma/rdma_netlink.hQuoted 24 lines
Quoted 12 lines
index 60416ed..40be0d8 100644
rdma/include/uapi/rdma/rdma_netlink.h +4
-0@@ -387,6 +399,20 @@ enum rdma_nldev_attr {RDMA_NLDEV_ATTR_RES_PD_ENTRY ,/* nested table */ RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY ,/* u32 */ RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY ,/* u32 */ +/* +* driver-specific attributes. +*/ + RDMA_NLDEV_ATTR_DRIVER, /* nested table */rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 415
Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +10
-0+RDMA_NLDEV_ATTR_DRIVER_ENTRY ,/* nested table */ +RDMA_NLDEV_ATTR_DRIVER_STRING ,/* string */ +/* +* u8 values from enum rdma_nldev_print_type +*/ +RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE ,/* u8 */ +RDMA_NLDEV_ATTR_DRIVER_S32 ,/* s32 */ +RDMA_NLDEV_ATTR_DRIVER_U32 ,/* u32 */ +RDMA_NLDEV_ATTR_DRIVER_S64 ,/* s64 */ + RDMA_NLDEV_ATTR_DRIVER_U64, /* u64 */and again here.
Quoted 6 lines
Quoted 2 lines
This chunk, however, is a problem. We'll need to fix that in the kernel and in this patch too.
I'll fix this series once I fix the kernel side. Doug, should I send a patch that basically moves the DRIVER attributes to the bottom?
Sorry about missing this!
I missed it too. I knew about the first hunk, but thought this one was at the end. Anyway, I've already pushed the fix to my wip/dl-for-next branch, so you can get it there now.
Signature · 3 lines
Doug Ledford <[email protected]> GPG KeyID: B826A3330E572FDD Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD
PATCH v2 2/3 rdma: print driver resource attributes
In reply to Steve WiseThis enhancement allows printing rdma device-specific state, if provided by the kernel. This is done in a generic manner, so rdma tool doesn't need to know about the details of every type of rdma device.
Driver attributes for a rdma resource are in the form of <key, [print_type], value> tuples, where the key is a string and the value can be any supported driver attribute. The print_type attribute, if present, provides a print format to use vs the standard print format for the type. For example, the default print type for a PROVIDER_S32 value is "%d ", but "0x%x " if the print_type of PRINT_TYPE_HEX is included inthe tuple.
Driver resources are only printed when the -dd flag is present. If -p is present, then the output is formatted to not exceed 80 columns, otherwise it is printed as a single row to be grep/awk friendly.
Example output:
# rdma resource show qp lqpn 1028 -dd -p
link cxgb4_0/- lqpn 1028 rqpn 0 type RC state RTS rq-psn 0 sq-psn 0 path-mig-state MIGRATED pid 0 comm [nvme_rdma]
sqid 1028 flushed 0 memsize 123968 cidx 85 pidx 85 wq_pidx 106 flush_cidx 85 in_use 0
size 386 flags 0x0 rqid 1029 memsize 16768 cidx 43 pidx 41 wq_pidx 171 msn 44 rqt_hwaddr 0x2a8a5d00
rqt_size 256 in_use 128 size 130 idx 43 wr_id 0xffff881057c03408 idx 40 wr_id 0xffff881057c033f0--- rdma/rdma.c | 9 ++- rdma/rdma.h | 11 ++++ rdma/res.c | 30 +++------ rdma/utils.c | 196 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 224 insertions(+), 22 deletions(-)
rdma/rdma.c +7 -2
@@ -129,13 +129,14 @@ int main(int argc, char **argv) { "batch", required_argument, NULL, 'b' }, { NULL, 0, NULL, 0 } }; +bool show_driver_details = false;const char *batch_file =NULL ;bool pretty_output = false;bool show_details = false;bool json_output = false;bool force = false; -char *filename;struct rd rd = {}; +char *filename;int opt;int err;
@@ -152,7 +153,10 @@ int main(int argc, char **argv) pretty_output = true;break ;case 'd' : - show_details = true; +if (show_details) + show_driver_details = true; +else + show_details = true;break ;case 'j' : json_output = true;
@@ -180,6 +184,7 @@ int main(int argc, char **argv) argv += optind; rd.show_details = show_details; + rd.show_driver_details = show_driver_details; rd.json_output = json_output; rd.pretty_output = pretty_output;
rdma/rdma.h +11 -0
@@ -55,6 +55,7 @@ struct rd {char **argv;char *filename;bool show_details; +bool show_driver_details;struct list_head dev_map_list;uint32_t dev_idx;uint32_t port_idx;
@@ -115,4 +116,14 @@ int rd_recv_msg(struct rd *rd, mnl_cb_t callback, void *data, uint32_t seq);void rd_prepare_msg (struct rd *rd,uint32_t cmd,uint32_t *seq,uint16_t flags);int rd_dev_init_cb (const struct nlmsghdr *nlh,void *data);int rd_attr_cb (const struct nlattr *attr,void *data); +int rd_attr_check (const struct nlattr *attr,int *typep); + +/* +* Print helpers +*/ +void print_driver_table (struct rd *rd,struct nlattr *tb); +void newline (struct rd *rd); +void newline_indent (struct rd *rd); +#define MAX_LINE_LENGTH 80 +#endif /* _RDMA_TOOL_H_ */
rdma/res.c +10 -20
@@ -439,10 +439,8 @@ static int res_qp_parse_cb(const struct nlmsghdr *nlh, void *data)if (nla_line[RDMA_NLDEV_ATTR_RES_PID ])free (comm); -if (rd->json_output) -jsonw_end_array (rd->jw); -else -pr_out ("\n" ); +print_driver_table (rd, nla_line[RDMA_NLDEV_ATTR_DRIVER ]); +newline (rd); }return MNL_CB_OK ; }
@@ -678,10 +676,8 @@ static int res_cm_id_parse_cb(const struct nlmsghdr *nlh, void *data)if (nla_line[RDMA_NLDEV_ATTR_RES_PID ])free (comm); -if (rd->json_output) -jsonw_end_array (rd->jw); -else -pr_out ("\n" ); +print_driver_table (rd, nla_line[RDMA_NLDEV_ATTR_DRIVER ]); +newline (rd); }return MNL_CB_OK ; }
@@ -804,10 +800,8 @@ static int res_cq_parse_cb(const struct nlmsghdr *nlh, void *data)if (nla_line[RDMA_NLDEV_ATTR_RES_PID ])free (comm); -if (rd->json_output) -jsonw_end_array (rd->jw); -else -pr_out ("\n" ); +print_driver_table (rd, nla_line[RDMA_NLDEV_ATTR_DRIVER ]); +newline (rd); }return MNL_CB_OK ; }
@@ -919,10 +913,8 @@ static int res_mr_parse_cb(const struct nlmsghdr *nlh, void *data)if (nla_line[RDMA_NLDEV_ATTR_RES_PID ])free (comm); -if (rd->json_output) -jsonw_end_array (rd->jw); -else -pr_out ("\n" ); +print_driver_table (rd, nla_line[RDMA_NLDEV_ATTR_DRIVER ]); +newline (rd); }return MNL_CB_OK ; }
@@ -1004,10 +996,8 @@ static int res_pd_parse_cb(const struct nlmsghdr *nlh, void *data)if (nla_line[RDMA_NLDEV_ATTR_RES_PID ])free (comm); -if (rd->json_output) -jsonw_end_array (rd->jw); -else -pr_out ("\n" ); +print_driver_table (rd, nla_line[RDMA_NLDEV_ATTR_DRIVER ]); +newline (rd); }return MNL_CB_OK ; }
rdma/utils.c +196 -0
213 lines not on this page · raw message
Signature · 1 line
1.8.3.1
PATCH v2 3/3 rdma: update man pages
In reply to Steve WiseUpdate the man pages for the resource attributes as well as the driver-specific attributes.
--- man/man8/rdma-resource.8 | 29 ++++++++++++++++++++++++++--- man/man8/rdma.8 | 2 +- 2 files changed, 27 insertions(+), 4 deletions(-)
man/man8/rdma-resource.8 +26 -3
@@ -7,13 +7,16 @@ rdma-resource \- rdma resource configuration .in +8 .ti -8 .B rdma -.RI "[ " OPTIONS " ]" -.B resource -.RI " { " COMMAND " | " +.RI "[ " OPTIONS " ] " RESOURCE " { " COMMAND " | " .BR help " }" .sp .ti -8 +.IR RESOURCE " := { " +.BR cm_id " | " cq " | " mr " | " pd " | " qp " }" +.sp + +.ti -8 .IR OPTIONS " := { " \fB\-j\fR[\fIson\fR] | \fB\-d\fR[\fIetails\fR] }
@@ -70,11 +73,31 @@ rdma res show qp link mlx5_4/- -d Detailed view. .RE .PP +rdma res show qp link mlx5_4/- -dd +.RS 4 +Detailed view including driver-specific details. +.RE +.PP rdma res show qp link mlx5_4/1 lqpn 0-6 .RS 4 Limit to specific Local QPNs. .RE .PP +rdma resource show cm_id dst-port 7174 +.RS 4 +Show CM_IDs with destination ip port of 7174. +.RE +.PP +rdma resource show cm_id src-addr 172.16.0.100 +.RS 4 +Show CM_IDs bound to local ip address 172.16.0.100 +.RE +.PP +rdma resource show cq pid 30489 +.RS 4 +Show CQs belonging to pid 30489 +.RE +.PP .SH SEE ALSO .BR rdma (8),
man/man8/rdma.8 +1 -1
@@ -49,7 +49,7 @@ If there were any errors during execution of the commands, the application retur .TP .BR "\-d" , " --details" -Output detailed information. +Output detailed information. Adding a second \-d includes driver-specific details. .TP .BR "\-p" , " --pretty"
Signature · 1 line
1.8.3.1