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
>

Reply via email to