Skip to content

Commit 3202ea6

Browse files
DmytroLinkinSaeed Mahameed
authored andcommitted
net/mlx5: E-switch, Add QoS tracepoints
Add tracepoints to log QoS enabling/disabling/configuration for vports and rate groups. Signed-off-by: Dmytro Linkin <dlinkin@nvidia.com> Reviewed-by: Huy Nguyen <huyn@nvidia.com> Reviewed-by: Mark Bloch <mbloch@nvidia.com> Reviewed-by: Saeed Mahameed <saeedm@nvidia.com>
1 parent 0fe132e commit 3202ea6

File tree

3 files changed

+179
-1
lines changed

3 files changed

+179
-1
lines changed

Documentation/networking/device_drivers/ethernet/mellanox/mlx5.rst

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -656,3 +656,47 @@ Bridge offloads tracepoints:
656656
$ cat /sys/kernel/debug/tracing/trace
657657
...
658658
ip-5387 [000] ...1 573713: mlx5_esw_bridge_vport_cleanup: vport_num=1
659+
660+
Eswitch QoS tracepoints:
661+
662+
- mlx5_esw_vport_qos_create: trace creation of transmit scheduler arbiter for vport::
663+
664+
$ echo mlx5:mlx5_esw_vport_qos_create >> /sys/kernel/debug/tracing/set_event
665+
$ cat /sys/kernel/debug/tracing/trace
666+
...
667+
<...>-23496 [018] .... 73136.838831: mlx5_esw_vport_qos_create: (0000:82:00.0) vport=2 tsar_ix=4 bw_share=0, max_rate=0 group=000000007b576bb3
668+
669+
- mlx5_esw_vport_qos_config: trace configuration of transmit scheduler arbiter for vport::
670+
671+
$ echo mlx5:mlx5_esw_vport_qos_config >> /sys/kernel/debug/tracing/set_event
672+
$ cat /sys/kernel/debug/tracing/trace
673+
...
674+
<...>-26548 [023] .... 75754.223823: mlx5_esw_vport_qos_config: (0000:82:00.0) vport=1 tsar_ix=3 bw_share=34, max_rate=10000 group=000000007b576bb3
675+
676+
- mlx5_esw_vport_qos_destroy: trace deletion of transmit scheduler arbiter for vport::
677+
678+
$ echo mlx5:mlx5_esw_vport_qos_destroy >> /sys/kernel/debug/tracing/set_event
679+
$ cat /sys/kernel/debug/tracing/trace
680+
...
681+
<...>-27418 [004] .... 76546.680901: mlx5_esw_vport_qos_destroy: (0000:82:00.0) vport=1 tsar_ix=3
682+
683+
- mlx5_esw_group_qos_create: trace creation of transmit scheduler arbiter for rate group::
684+
685+
$ echo mlx5:mlx5_esw_group_qos_create >> /sys/kernel/debug/tracing/set_event
686+
$ cat /sys/kernel/debug/tracing/trace
687+
...
688+
<...>-26578 [008] .... 75776.022112: mlx5_esw_group_qos_create: (0000:82:00.0) group=000000008dac63ea tsar_ix=5
689+
690+
- mlx5_esw_group_qos_config: trace configuration of transmit scheduler arbiter for rate group::
691+
692+
$ echo mlx5:mlx5_esw_group_qos_config >> /sys/kernel/debug/tracing/set_event
693+
$ cat /sys/kernel/debug/tracing/trace
694+
...
695+
<...>-27303 [020] .... 76461.455356: mlx5_esw_group_qos_config: (0000:82:00.0) group=000000008dac63ea tsar_ix=5 bw_share=100 max_rate=20000
696+
697+
- mlx5_esw_group_qos_destroy: trace deletion of transmit scheduler arbiter for group::
698+
699+
$ echo mlx5:mlx5_esw_group_qos_destroy >> /sys/kernel/debug/tracing/set_event
700+
$ cat /sys/kernel/debug/tracing/trace
701+
...
702+
<...>-27418 [006] .... 76547.187258: mlx5_esw_group_qos_destroy: (0000:82:00.0) group=000000007b576bb3 tsar_ix=1
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
2+
/* Copyright (c) 2021, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */
3+
4+
#undef TRACE_SYSTEM
5+
#define TRACE_SYSTEM mlx5
6+
7+
#if !defined(_MLX5_ESW_TP_) || defined(TRACE_HEADER_MULTI_READ)
8+
#define _MLX5_ESW_TP_
9+
10+
#include <linux/tracepoint.h>
11+
#include "eswitch.h"
12+
13+
TRACE_EVENT(mlx5_esw_vport_qos_destroy,
14+
TP_PROTO(const struct mlx5_vport *vport),
15+
TP_ARGS(vport),
16+
TP_STRUCT__entry(__string(devname, dev_name(vport->dev->device))
17+
__field(unsigned short, vport_id)
18+
__field(unsigned int, tsar_ix)
19+
),
20+
TP_fast_assign(__assign_str(devname, dev_name(vport->dev->device));
21+
__entry->vport_id = vport->vport;
22+
__entry->tsar_ix = vport->qos.esw_tsar_ix;
23+
),
24+
TP_printk("(%s) vport=%hu tsar_ix=%u\n",
25+
__get_str(devname), __entry->vport_id, __entry->tsar_ix
26+
)
27+
);
28+
29+
DECLARE_EVENT_CLASS(mlx5_esw_vport_qos_template,
30+
TP_PROTO(const struct mlx5_vport *vport, u32 bw_share, u32 max_rate),
31+
TP_ARGS(vport, bw_share, max_rate),
32+
TP_STRUCT__entry(__string(devname, dev_name(vport->dev->device))
33+
__field(unsigned short, vport_id)
34+
__field(unsigned int, tsar_ix)
35+
__field(unsigned int, bw_share)
36+
__field(unsigned int, max_rate)
37+
__field(void *, group)
38+
),
39+
TP_fast_assign(__assign_str(devname, dev_name(vport->dev->device));
40+
__entry->vport_id = vport->vport;
41+
__entry->tsar_ix = vport->qos.esw_tsar_ix;
42+
__entry->bw_share = bw_share;
43+
__entry->max_rate = max_rate;
44+
__entry->group = vport->qos.group;
45+
),
46+
TP_printk("(%s) vport=%hu tsar_ix=%u bw_share=%u, max_rate=%u group=%p\n",
47+
__get_str(devname), __entry->vport_id, __entry->tsar_ix,
48+
__entry->bw_share, __entry->max_rate, __entry->group
49+
)
50+
);
51+
52+
DEFINE_EVENT(mlx5_esw_vport_qos_template, mlx5_esw_vport_qos_create,
53+
TP_PROTO(const struct mlx5_vport *vport, u32 bw_share, u32 max_rate),
54+
TP_ARGS(vport, bw_share, max_rate)
55+
);
56+
57+
DEFINE_EVENT(mlx5_esw_vport_qos_template, mlx5_esw_vport_qos_config,
58+
TP_PROTO(const struct mlx5_vport *vport, u32 bw_share, u32 max_rate),
59+
TP_ARGS(vport, bw_share, max_rate)
60+
);
61+
62+
DECLARE_EVENT_CLASS(mlx5_esw_group_qos_template,
63+
TP_PROTO(const struct mlx5_core_dev *dev,
64+
const struct mlx5_esw_rate_group *group,
65+
unsigned int tsar_ix),
66+
TP_ARGS(dev, group, tsar_ix),
67+
TP_STRUCT__entry(__string(devname, dev_name(dev->device))
68+
__field(const void *, group)
69+
__field(unsigned int, tsar_ix)
70+
),
71+
TP_fast_assign(__assign_str(devname, dev_name(dev->device));
72+
__entry->group = group;
73+
__entry->tsar_ix = tsar_ix;
74+
),
75+
TP_printk("(%s) group=%p tsar_ix=%u\n",
76+
__get_str(devname), __entry->group, __entry->tsar_ix
77+
)
78+
);
79+
80+
DEFINE_EVENT(mlx5_esw_group_qos_template, mlx5_esw_group_qos_create,
81+
TP_PROTO(const struct mlx5_core_dev *dev,
82+
const struct mlx5_esw_rate_group *group,
83+
unsigned int tsar_ix),
84+
TP_ARGS(dev, group, tsar_ix)
85+
);
86+
87+
DEFINE_EVENT(mlx5_esw_group_qos_template, mlx5_esw_group_qos_destroy,
88+
TP_PROTO(const struct mlx5_core_dev *dev,
89+
const struct mlx5_esw_rate_group *group,
90+
unsigned int tsar_ix),
91+
TP_ARGS(dev, group, tsar_ix)
92+
);
93+
94+
TRACE_EVENT(mlx5_esw_group_qos_config,
95+
TP_PROTO(const struct mlx5_core_dev *dev,
96+
const struct mlx5_esw_rate_group *group,
97+
unsigned int tsar_ix, u32 bw_share, u32 max_rate),
98+
TP_ARGS(dev, group, tsar_ix, bw_share, max_rate),
99+
TP_STRUCT__entry(__string(devname, dev_name(dev->device))
100+
__field(const void *, group)
101+
__field(unsigned int, tsar_ix)
102+
__field(unsigned int, bw_share)
103+
__field(unsigned int, max_rate)
104+
),
105+
TP_fast_assign(__assign_str(devname, dev_name(dev->device));
106+
__entry->group = group;
107+
__entry->tsar_ix = tsar_ix;
108+
__entry->bw_share = bw_share;
109+
__entry->max_rate = max_rate;
110+
),
111+
TP_printk("(%s) group=%p tsar_ix=%u bw_share=%u max_rate=%u\n",
112+
__get_str(devname), __entry->group, __entry->tsar_ix,
113+
__entry->bw_share, __entry->max_rate
114+
)
115+
);
116+
#endif /* _MLX5_ESW_TP_ */
117+
118+
/* This part must be outside protection */
119+
#undef TRACE_INCLUDE_PATH
120+
#define TRACE_INCLUDE_PATH esw/diag
121+
#undef TRACE_INCLUDE_FILE
122+
#define TRACE_INCLUDE_FILE qos_tracepoint
123+
#include <trace/define_trace.h>

drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#include "eswitch.h"
55
#include "esw/qos.h"
66
#include "en/port.h"
7+
#define CREATE_TRACE_POINTS
8+
#include "diag/qos_tracepoint.h"
79

810
/* Minimum supported BW share value by the HW is 1 Mbit/sec */
911
#define MLX5_MIN_BW_SHARE 1
@@ -54,6 +56,8 @@ static int esw_qos_group_config(struct mlx5_eswitch *esw, struct mlx5_esw_rate_g
5456
if (err)
5557
NL_SET_ERR_MSG_MOD(extack, "E-Switch modify group TSAR element failed");
5658

59+
trace_mlx5_esw_group_qos_config(dev, group, group->tsar_ix, bw_share, max_rate);
60+
5761
return err;
5862
}
5963

@@ -89,6 +93,8 @@ static int esw_qos_vport_config(struct mlx5_eswitch *esw,
8993
return err;
9094
}
9195

96+
trace_mlx5_esw_vport_qos_config(vport, bw_share, max_rate);
97+
9298
return 0;
9399
}
94100

@@ -461,6 +467,7 @@ esw_qos_create_rate_group(struct mlx5_eswitch *esw, struct netlink_ext_ack *exta
461467
goto err_min_rate;
462468
}
463469
}
470+
trace_mlx5_esw_group_qos_create(esw->dev, group, group->tsar_ix);
464471

465472
return group;
466473

@@ -496,6 +503,7 @@ static int esw_qos_destroy_rate_group(struct mlx5_eswitch *esw,
496503
if (err)
497504
NL_SET_ERR_MSG_MOD(extack, "E-Switch destroy TSAR_ID failed");
498505

506+
trace_mlx5_esw_group_qos_destroy(esw->dev, group, group->tsar_ix);
499507
kfree(group);
500508
return err;
501509
}
@@ -613,8 +621,10 @@ int mlx5_esw_qos_vport_enable(struct mlx5_eswitch *esw, struct mlx5_vport *vport
613621
vport->qos.group = esw->qos.group0;
614622

615623
err = esw_qos_vport_create_sched_element(esw, vport, max_rate, bw_share);
616-
if (!err)
624+
if (!err) {
617625
vport->qos.enabled = true;
626+
trace_mlx5_esw_vport_qos_create(vport, bw_share, max_rate);
627+
}
618628

619629
return err;
620630
}
@@ -637,6 +647,7 @@ void mlx5_esw_qos_vport_disable(struct mlx5_eswitch *esw, struct mlx5_vport *vpo
637647
vport->vport, err);
638648

639649
vport->qos.enabled = false;
650+
trace_mlx5_esw_vport_qos_destroy(vport);
640651
}
641652

642653
int mlx5_esw_qos_modify_vport_rate(struct mlx5_eswitch *esw, u16 vport_num, u32 rate_mbps)

0 commit comments

Comments
 (0)