[2/5] common/mlx5: introduce tracepoints for mlx5 drivers
Checks
Commit Message
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 <viacheslavo@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
@@ -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',
new file mode 100644
@@ -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)
+
new file mode 100644
@@ -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_ */
@@ -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;
+
local: *;
};