On Thu, Apr 20, 2023 at 3:38 PM Viacheslav Ovsiienko <viachesl...@nvidia.com> wrote: > > There is an intention to engage DPDK tracing capabilities > for mlx5 PMDs monitoring and profiling in various modes. > The patch introduces tracepoints for the Tx datapath in > the ethernet device driver. > > Signed-off-by: Viacheslav Ovsiienko <viachesl...@nvidia.com> > --- > drivers/common/mlx5/meson.build | 1 + > drivers/common/mlx5/mlx5_trace.c | 25 +++++++++++ > drivers/common/mlx5/mlx5_trace.h | 72 ++++++++++++++++++++++++++++++++ > drivers/common/mlx5/version.map | 8 ++++ > 4 files changed, 106 insertions(+) > create mode 100644 drivers/common/mlx5/mlx5_trace.c > create mode 100644 drivers/common/mlx5/mlx5_trace.h > > diff --git a/drivers/common/mlx5/meson.build b/drivers/common/mlx5/meson.build > index 9dc809f192..e074ffb140 100644 > --- a/drivers/common/mlx5/meson.build > +++ b/drivers/common/mlx5/meson.build > @@ -19,6 +19,7 @@ sources += files( > 'mlx5_common_mp.c', > 'mlx5_common_mr.c', > 'mlx5_malloc.c', > + 'mlx5_trace.c', > 'mlx5_common_pci.c', > 'mlx5_common_devx.c', > 'mlx5_common_utils.c', > diff --git a/drivers/common/mlx5/mlx5_trace.c > b/drivers/common/mlx5/mlx5_trace.c > new file mode 100644 > index 0000000000..b9f14413ad > --- /dev/null > +++ b/drivers/common/mlx5/mlx5_trace.c > @@ -0,0 +1,25 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright (c) 2022 NVIDIA Corporation & Affiliates > + */ > + > +#include <rte_trace_point_register.h> > +#include <mlx5_trace.h> > + > +RTE_TRACE_POINT_REGISTER(rte_pmd_mlx5_trace_tx_entry, > + pmd.net.mlx5.tx.entry) > + > +RTE_TRACE_POINT_REGISTER(rte_pmd_mlx5_trace_tx_exit, > + pmd.net.mlx5.tx.exit) > + > +RTE_TRACE_POINT_REGISTER(rte_pmd_mlx5_trace_tx_wqe, > + pmd.net.mlx5.tx.wqe) > + > +RTE_TRACE_POINT_REGISTER(rte_pmd_mlx5_trace_tx_wait, > + pmd.net.mlx5.tx.wait) > + > +RTE_TRACE_POINT_REGISTER(rte_pmd_mlx5_trace_tx_push, > + pmd.net.mlx5.tx.push) > + > +RTE_TRACE_POINT_REGISTER(rte_pmd_mlx5_trace_tx_complete, > + pmd.net.mlx5.tx.complete) > + > diff --git a/drivers/common/mlx5/mlx5_trace.h > b/drivers/common/mlx5/mlx5_trace.h > new file mode 100644 > index 0000000000..57512e654f > --- /dev/null > +++ b/drivers/common/mlx5/mlx5_trace.h > @@ -0,0 +1,72 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright (c) 2022 NVIDIA Corporation & Affiliates > + */ > + > +#ifndef RTE_PMD_MLX5_TRACE_H_ > +#define RTE_PMD_MLX5_TRACE_H_ > + > +/** > + * @file > + * > + * API for mlx5 PMD trace support > + */ > + > +#ifdef __cplusplus > +extern "C" { > +#endif > + > +#include <mlx5_prm.h> > +#include <rte_mbuf.h> > +#include <rte_trace_point.h> > + > +RTE_TRACE_POINT_FP( > + rte_pmd_mlx5_trace_tx_entry, > + RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t queue_id), > + rte_trace_point_emit_u16(port_id); > + rte_trace_point_emit_u16(queue_id); > +) > + > +RTE_TRACE_POINT_FP( > + rte_pmd_mlx5_trace_tx_exit, > + RTE_TRACE_POINT_ARGS(uint16_t nb_sent, uint16_t nb_req), > + rte_trace_point_emit_u16(nb_sent); > + rte_trace_point_emit_u16(nb_req); > +) > + > +RTE_TRACE_POINT_FP( > + rte_pmd_mlx5_trace_tx_wqe, > + RTE_TRACE_POINT_ARGS(uint32_t opcode), > + rte_trace_point_emit_u32(opcode); > +) > + > +RTE_TRACE_POINT_FP( > + rte_pmd_mlx5_trace_tx_wait, > + RTE_TRACE_POINT_ARGS(uint64_t ts), > + rte_trace_point_emit_u64(ts); > +) > + > + > +RTE_TRACE_POINT_FP( > + rte_pmd_mlx5_trace_tx_push, > + RTE_TRACE_POINT_ARGS(const struct rte_mbuf *mbuf, uint16_t wqe_id), > + rte_trace_point_emit_ptr(mbuf); > + rte_trace_point_emit_u32(mbuf->pkt_len); > + rte_trace_point_emit_u16(mbuf->nb_segs); > + rte_trace_point_emit_u16(wqe_id); > +) > + > +RTE_TRACE_POINT_FP( > + rte_pmd_mlx5_trace_tx_complete, > + RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t queue_id, > + uint16_t wqe_id, uint64_t ts), > + rte_trace_point_emit_u16(port_id); > + rte_trace_point_emit_u16(queue_id); > + rte_trace_point_emit_u64(ts); > + rte_trace_point_emit_u16(wqe_id); > +) > + > +#ifdef __cplusplus > +} > +#endif > + > +#endif /* RTE_PMD_MLX5_TRACE_H_ */ > diff --git a/drivers/common/mlx5/version.map b/drivers/common/mlx5/version.map > index e05e1aa8c5..d0ec8571e6 100644 > --- a/drivers/common/mlx5/version.map > +++ b/drivers/common/mlx5/version.map > @@ -158,5 +158,13 @@ INTERNAL { > > mlx5_os_interrupt_handler_create; # WINDOWS_NO_EXPORT > mlx5_os_interrupt_handler_destroy; # WINDOWS_NO_EXPORT > + > + __rte_pmd_mlx5_trace_tx_entry; > + __rte_pmd_mlx5_trace_tx_exit; > + __rte_pmd_mlx5_trace_tx_wqe; > + __rte_pmd_mlx5_trace_tx_wait; > + __rte_pmd_mlx5_trace_tx_push; > + __rte_pmd_mlx5_trace_tx_complete;
No need to expose these symbols. It is getting removed from rest of DPDK. Application can do rte_trace_lookup() to get this address. > + > local: *; > }; > -- > 2.18.1 >