* [PATCH iproute2-next 0/2] Add optional-counters binding support
@ 2025-03-19 8:25 Patrisious Haddad
2025-03-19 8:25 ` [PATCH iproute2-next 1/2] rdma: update uapi headers Patrisious Haddad
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Patrisious Haddad @ 2025-03-19 8:25 UTC (permalink / raw)
To: leon, dsahern, stephen; +Cc: Patrisious Haddad, netdev, jgg, linux-rdma
Add optional-counters binding support together with new packets/bytes
counters. Previously optional-counters were on a per link basis, this
series allows users to bind optional-counters to a specific counter,
which allows tracking optional-counter over a specific QP group.
The support is added for both binding modes, automatic and manual,
in both cases the bound optional counters are those that are currently
configured over the link when trying to bind the QP.
In addition introduce four new optional-counters :
rdma_tx_bytes, rdma_tx_packets, rdma_rx_bytes, rdma_rx_packets
That just as their name implies allow tracking RDMA egress and ingress
traffic.
This is exposed to users through the iproute2 package which needs to be
updated as well to provide the support for this feature.
Example commands:
- rdma stat set link rocep8s0f0/1 optional-counters
rdma_tx_bytes,rdma_rx_packets
Enables rdma_tx_bytes and rdma_rx_packets optional-counters over
the link.
- rdma stat qp set link rocep8s0f0/1 auto type on optional-counters on
Enabled link automatic counter binding for QPs of same type,
with optional-counter binding support.
- rdma stat qp bind link rocep8s0f0/1 lqpn 134
Manually bind QP number 134 to all available counters.
- rdma stat qp bind link rocep8s0f0/1 lqpn 134 cntn 4
Manually bind QP number 134 to counter number 4 depending on its
configured counters.
Thanks
Patrisious Haddad (2):
rdma: update uapi headers
rdma: Add optional-counter option to rdma stat bind commands
man/man8/rdma-statistic.8 | 6 ++++
rdma/include/uapi/rdma/rdma_netlink.h | 2 ++
rdma/stat.c | 50 +++++++++++++++++++++++++--
rdma/utils.c | 1 +
4 files changed, 57 insertions(+), 2 deletions(-)
--
2.47.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH iproute2-next 1/2] rdma: update uapi headers
2025-03-19 8:25 [PATCH iproute2-next 0/2] Add optional-counters binding support Patrisious Haddad
@ 2025-03-19 8:25 ` Patrisious Haddad
2025-03-19 8:25 ` [PATCH iproute2-next 2/2] rdma: Add optional-counter option to rdma stat bind commands Patrisious Haddad
2025-03-24 2:50 ` [PATCH iproute2-next 0/2] Add optional-counters binding support patchwork-bot+netdevbpf
2 siblings, 0 replies; 4+ messages in thread
From: Patrisious Haddad @ 2025-03-19 8:25 UTC (permalink / raw)
To: leon, dsahern, stephen
Cc: Patrisious Haddad, netdev, jgg, linux-rdma, Mark Bloch
Update rdma_netlink.h file upto kernel commit da3711074f52
("RDMA/core: Add support to optional-counters binding configuration")
Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
Reviewed-by: Mark Bloch <mbloch@nvidia.com>
---
rdma/include/uapi/rdma/rdma_netlink.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/rdma/include/uapi/rdma/rdma_netlink.h b/rdma/include/uapi/rdma/rdma_netlink.h
index 28404085..ec8c19ca 100644
--- a/rdma/include/uapi/rdma/rdma_netlink.h
+++ b/rdma/include/uapi/rdma/rdma_netlink.h
@@ -580,6 +580,8 @@ enum rdma_nldev_attr {
RDMA_NLDEV_ATTR_EVENT_TYPE, /* u8 */
RDMA_NLDEV_SYS_ATTR_MONITOR_MODE, /* u8 */
+
+ RDMA_NLDEV_ATTR_STAT_OPCOUNTER_ENABLED, /* u8 */
/*
* Always the end
*/
--
2.47.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH iproute2-next 2/2] rdma: Add optional-counter option to rdma stat bind commands
2025-03-19 8:25 [PATCH iproute2-next 0/2] Add optional-counters binding support Patrisious Haddad
2025-03-19 8:25 ` [PATCH iproute2-next 1/2] rdma: update uapi headers Patrisious Haddad
@ 2025-03-19 8:25 ` Patrisious Haddad
2025-03-24 2:50 ` [PATCH iproute2-next 0/2] Add optional-counters binding support patchwork-bot+netdevbpf
2 siblings, 0 replies; 4+ messages in thread
From: Patrisious Haddad @ 2025-03-19 8:25 UTC (permalink / raw)
To: leon, dsahern, stephen
Cc: Patrisious Haddad, netdev, jgg, linux-rdma, Mark Bloch
Add a new optional filter named optional-counter to commands:
rdma stat qp set link [link_name] auto
The new filter value can be either on or off and it must be the last
provided filter in the command, not providing it would be the same as off.
It indicates that when binding counters to a QP we also want the
currently enabled optional-counters on the link to be bound as well.
In addition Adjust rdma statistic man page to reflect the new
optional-counter changes.
Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
Reviewed-by: Mark Bloch <mbloch@nvidia.com>
---
man/man8/rdma-statistic.8 | 6 +++++
rdma/stat.c | 50 +++++++++++++++++++++++++++++++++++++--
rdma/utils.c | 1 +
3 files changed, 55 insertions(+), 2 deletions(-)
diff --git a/man/man8/rdma-statistic.8 b/man/man8/rdma-statistic.8
index 7dd2b02c..337e31ef 100644
--- a/man/man8/rdma-statistic.8
+++ b/man/man8/rdma-statistic.8
@@ -39,6 +39,7 @@ rdma-statistic \- RDMA statistic counter configuration
.B auto
.RI "{ " CRITERIA " | "
.BR off " }"
+.B [ optional-counters | on/off ]
.ti -8
.B rdma statistic
@@ -180,6 +181,11 @@ rdma statistic qp set link mlx5_2/1 auto type on
On device mlx5_2 port 1, for each new user QP bind it with a counter automatically. Per counter for QPs with same qp type.
.RE
.PP
+rdma statistic qp set link mlx5_2/1 auto type on optional-counters on
+.RS 4
+On device mlx5_2 port 1, for each new user QP bind it with a counter automatically. Per counter for QPs with same qp type. Whilst also binding the currently enabled optional-counters.
+.RE
+.PP
rdma statistic qp set link mlx5_2/1 auto pid on
.RS 4
On device mlx5_2 port 1, for each new user QP bind it with a counter automatically. Per counter for QPs with same pid.
diff --git a/rdma/stat.c b/rdma/stat.c
index bf78f7cc..2c1bf68e 100644
--- a/rdma/stat.c
+++ b/rdma/stat.c
@@ -7,6 +7,7 @@
#include "rdma.h"
#include "res.h"
#include "stat.h"
+#include "utils.h"
#include <inttypes.h>
static int stat_help(struct rd *rd)
@@ -62,7 +63,8 @@ static struct counter_param auto_params[] = {
{ NULL },
};
-static int prepare_auto_mode_str(uint32_t mask, char *output, int len)
+static int prepare_auto_mode_str(uint32_t mask, bool opcnt, char *output,
+ int len)
{
char s[] = "qp auto";
int i, outlen = strlen(s);
@@ -90,6 +92,10 @@ static int prepare_auto_mode_str(uint32_t mask, char *output, int len)
if (outlen + strlen(" on") >= len)
return -EINVAL;
strcat(output, " on");
+
+ strcat(output, " optional-counters ");
+ strcat(output, (opcnt) ? "on" : "off");
+
} else {
if (outlen + strlen(" off") >= len)
return -EINVAL;
@@ -104,6 +110,7 @@ static int qp_link_get_mode_parse_cb(const struct nlmsghdr *nlh, void *data)
struct nlattr *tb[RDMA_NLDEV_ATTR_MAX] = {};
uint32_t mode = 0, mask = 0;
char output[128] = {};
+ bool opcnt = false;
uint32_t idx, port;
const char *name;
@@ -126,7 +133,10 @@ static int qp_link_get_mode_parse_cb(const struct nlmsghdr *nlh, void *data)
if (!tb[RDMA_NLDEV_ATTR_STAT_AUTO_MODE_MASK])
return MNL_CB_ERROR;
mask = mnl_attr_get_u32(tb[RDMA_NLDEV_ATTR_STAT_AUTO_MODE_MASK]);
- prepare_auto_mode_str(mask, output, sizeof(output));
+ if (tb[RDMA_NLDEV_ATTR_STAT_OPCOUNTER_ENABLED])
+ opcnt = mnl_attr_get_u8(
+ tb[RDMA_NLDEV_ATTR_STAT_OPCOUNTER_ENABLED]);
+ prepare_auto_mode_str(mask, opcnt, output, sizeof(output));
} else {
snprintf(output, sizeof(output), "qp auto off");
}
@@ -351,6 +361,7 @@ static const struct filters stat_valid_filters[MAX_NUMBER_OF_FILTERS] = {
{ .name = "lqpn", .is_number = true },
{ .name = "pid", .is_number = true },
{ .name = "qp-type", .is_number = false },
+ { .name = "optional-counters", .is_number = false },
};
static int stat_qp_show_one_link(struct rd *rd)
@@ -395,9 +406,37 @@ static int stat_qp_show(struct rd *rd)
return rd_exec_cmd(rd, cmds, "parameter");
}
+static bool stat_get_on_off(struct rd *rd, const char *arg, int *ret)
+{
+ bool value = false;
+
+ if (strcmpx(rd_argv(rd), arg) != 0) {
+ *ret = -EINVAL;
+ return false;
+ }
+
+ rd_arg_inc(rd);
+
+ if (rd_is_multiarg(rd)) {
+ pr_err("The parameter %s shouldn't include range\n", arg);
+ *ret = EINVAL;
+ return false;
+ }
+
+ value = parse_on_off(arg, rd_argv(rd), ret);
+ if (*ret)
+ return false;
+
+ rd_arg_inc(rd);
+
+ return value;
+}
+
static int stat_qp_set_link_auto_sendmsg(struct rd *rd, uint32_t mask)
{
uint32_t seq;
+ bool opcnt;
+ int ret;
rd_prepare_msg(rd, RDMA_NLDEV_CMD_STAT_SET,
&seq, (NLM_F_REQUEST | NLM_F_ACK));
@@ -408,6 +447,13 @@ static int stat_qp_set_link_auto_sendmsg(struct rd *rd, uint32_t mask)
mnl_attr_put_u32(rd->nlh, RDMA_NLDEV_ATTR_STAT_MODE,
RDMA_COUNTER_MODE_AUTO);
mnl_attr_put_u32(rd->nlh, RDMA_NLDEV_ATTR_STAT_AUTO_MODE_MASK, mask);
+ if (rd_argc(rd)) {
+ opcnt = stat_get_on_off(rd, "optional-counters", &ret);
+ if (ret)
+ return ret;
+ mnl_attr_put_u8(rd->nlh, RDMA_NLDEV_ATTR_STAT_OPCOUNTER_ENABLED,
+ opcnt);
+ }
return rd_sendrecv_msg(rd, seq);
}
diff --git a/rdma/utils.c b/rdma/utils.c
index 07cb0224..87003b2c 100644
--- a/rdma/utils.c
+++ b/rdma/utils.c
@@ -479,6 +479,7 @@ static const enum mnl_attr_data_type nldev_policy[RDMA_NLDEV_ATTR_MAX] = {
[RDMA_NLDEV_ATTR_PARENT_NAME] = MNL_TYPE_STRING,
[RDMA_NLDEV_ATTR_EVENT_TYPE] = MNL_TYPE_U8,
[RDMA_NLDEV_SYS_ATTR_MONITOR_MODE] = MNL_TYPE_U8,
+ [RDMA_NLDEV_ATTR_STAT_OPCOUNTER_ENABLED] = MNL_TYPE_U8,
};
static int rd_attr_check(const struct nlattr *attr, int *typep)
--
2.47.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH iproute2-next 0/2] Add optional-counters binding support
2025-03-19 8:25 [PATCH iproute2-next 0/2] Add optional-counters binding support Patrisious Haddad
2025-03-19 8:25 ` [PATCH iproute2-next 1/2] rdma: update uapi headers Patrisious Haddad
2025-03-19 8:25 ` [PATCH iproute2-next 2/2] rdma: Add optional-counter option to rdma stat bind commands Patrisious Haddad
@ 2025-03-24 2:50 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 4+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-03-24 2:50 UTC (permalink / raw)
To: Patrisious Haddad; +Cc: leon, dsahern, stephen, netdev, jgg, linux-rdma
Hello:
This series was applied to iproute2/iproute2-next.git (main)
by David Ahern <dsahern@kernel.org>:
On Wed, 19 Mar 2025 10:25:24 +0200 you wrote:
> Add optional-counters binding support together with new packets/bytes
> counters. Previously optional-counters were on a per link basis, this
> series allows users to bind optional-counters to a specific counter,
> which allows tracking optional-counter over a specific QP group.
>
> The support is added for both binding modes, automatic and manual,
> in both cases the bound optional counters are those that are currently
> configured over the link when trying to bind the QP.
>
> [...]
Here is the summary with links:
- [iproute2-next,1/2] rdma: update uapi headers
https://git.kernel.org/pub/scm/network/iproute2/iproute2-next.git/commit/?id=85860c7dce2c
- [iproute2-next,2/2] rdma: Add optional-counter option to rdma stat bind commands
https://git.kernel.org/pub/scm/network/iproute2/iproute2-next.git/commit/?id=a03f40534f6c
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-03-24 2:49 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-19 8:25 [PATCH iproute2-next 0/2] Add optional-counters binding support Patrisious Haddad
2025-03-19 8:25 ` [PATCH iproute2-next 1/2] rdma: update uapi headers Patrisious Haddad
2025-03-19 8:25 ` [PATCH iproute2-next 2/2] rdma: Add optional-counter option to rdma stat bind commands Patrisious Haddad
2025-03-24 2:50 ` [PATCH iproute2-next 0/2] Add optional-counters binding support patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox