From: Adel Belkhiri <adel.belkhiri@gmail.com>
To: Thomas Monjalon <thomas@monjalon.net>,
Ferruh Yigit <ferruh.yigit@amd.com>,
Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Cc: dev@dpdk.org, Adel Belkhiri <adel.belkhiri@polymtl.ca>
Subject: [PATCH v3] ethdev: optimize the activation of fast-path tracepoints
Date: Wed, 18 Sep 2024 14:45:02 -0400 [thread overview]
Message-ID: <20240918184502.125550-1-adel.belkhiri@gmail.com> (raw)
In-Reply-To: <20240913175828.21640-1-adel.belkhiri@gmail.com>
From: Adel Belkhiri <adel.belkhiri@polymtl.ca>
Split the tracepoints rte_ethdev_trace_rx_burst and
rte_eth_trace_call_rx_callbacks into two separate ones
for empty and non-empty calls to avoid saturating
quickly the trace buffer.
Signed-off-by: Adel Belkhiri <adel.belkhiri@polymtl.ca>
---
.mailmap | 1 +
doc/guides/rel_notes/release_24_11.rst | 2 ++
lib/ethdev/ethdev_private.c | 8 ++++++--
lib/ethdev/ethdev_trace_points.c | 14 ++++++++++----
lib/ethdev/rte_ethdev.h | 5 ++++-
lib/ethdev/rte_ethdev_trace_fp.h | 23 +++++++++++++++++++++--
lib/ethdev/version.map | 7 ++++++-
7 files changed, 50 insertions(+), 10 deletions(-)
diff --git a/.mailmap b/.mailmap
index 4a508bafad..e86241dced 100644
--- a/.mailmap
+++ b/.mailmap
@@ -16,6 +16,7 @@ Abraham Tovar <abrahamx.tovar@intel.com>
Adam Bynes <adambynes@outlook.com>
Adam Dybkowski <adamx.dybkowski@intel.com>
Adam Ludkiewicz <adam.ludkiewicz@intel.com>
+Adel Belkhiri <adel.belkhiri@polymtl.ca>
Adham Masarwah <adham@nvidia.com> <adham@mellanox.com>
Adrian Moreno <amorenoz@redhat.com>
Adrian Pielech <adrian.pielech@intel.com>
diff --git a/doc/guides/rel_notes/release_24_11.rst b/doc/guides/rel_notes/release_24_11.rst
index 0ff70d9057..b7c3ac4054 100644
--- a/doc/guides/rel_notes/release_24_11.rst
+++ b/doc/guides/rel_notes/release_24_11.rst
@@ -68,6 +68,8 @@ Removed Items
Also, make sure to start the actual text at the margin.
=======================================================
+* ethdev: Removed the __rte_ethdev_trace_rx_burst symbol, as the corresponding
+ tracepoint was split into two separate ones for empty and non-empty calls.
API Changes
-----------
diff --git a/lib/ethdev/ethdev_private.c b/lib/ethdev/ethdev_private.c
index 626524558a..eed8c78747 100644
--- a/lib/ethdev/ethdev_private.c
+++ b/lib/ethdev/ethdev_private.c
@@ -298,8 +298,12 @@ rte_eth_call_rx_callbacks(uint16_t port_id, uint16_t queue_id,
cb = cb->next;
}
- rte_eth_trace_call_rx_callbacks(port_id, queue_id, (void **)rx_pkts,
- nb_rx, nb_pkts);
+ if (unlikely(nb_rx))
+ rte_eth_trace_call_rx_callbacks_nonempty(port_id, queue_id, (void **)rx_pkts,
+ nb_rx, nb_pkts);
+ else
+ rte_eth_trace_call_rx_callbacks_empty(port_id, queue_id, (void **)rx_pkts,
+ nb_pkts);
return nb_rx;
}
diff --git a/lib/ethdev/ethdev_trace_points.c b/lib/ethdev/ethdev_trace_points.c
index 99e04f5893..6ecbee289b 100644
--- a/lib/ethdev/ethdev_trace_points.c
+++ b/lib/ethdev/ethdev_trace_points.c
@@ -25,14 +25,20 @@ RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_stop,
RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_close,
lib.ethdev.close)
-RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_rx_burst,
- lib.ethdev.rx.burst)
+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_rx_burst_empty,
+ lib.ethdev.rx.burst.empty)
+
+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_rx_burst_nonempty,
+ lib.ethdev.rx.burst.nonempty)
RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_tx_burst,
lib.ethdev.tx.burst)
-RTE_TRACE_POINT_REGISTER(rte_eth_trace_call_rx_callbacks,
- lib.ethdev.call_rx_callbacks)
+RTE_TRACE_POINT_REGISTER(rte_eth_trace_call_rx_callbacks_empty,
+ lib.ethdev.call_rx_callbacks.empty)
+
+RTE_TRACE_POINT_REGISTER(rte_eth_trace_call_rx_callbacks_nonempty,
+ lib.ethdev.call_rx_callbacks.nonempty)
RTE_TRACE_POINT_REGISTER(rte_eth_trace_call_tx_callbacks,
lib.ethdev.call_tx_callbacks)
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index 548fada1c7..eef254c463 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -6132,7 +6132,10 @@ rte_eth_rx_burst(uint16_t port_id, uint16_t queue_id,
}
#endif
- rte_ethdev_trace_rx_burst(port_id, queue_id, (void **)rx_pkts, nb_rx);
+ if (unlikely(nb_rx))
+ rte_ethdev_trace_rx_burst_nonempty(port_id, queue_id, (void **)rx_pkts, nb_rx);
+ else
+ rte_ethdev_trace_rx_burst_empty(port_id, queue_id, (void **)rx_pkts);
return nb_rx;
}
diff --git a/lib/ethdev/rte_ethdev_trace_fp.h b/lib/ethdev/rte_ethdev_trace_fp.h
index 40b6e4756b..d23865996a 100644
--- a/lib/ethdev/rte_ethdev_trace_fp.h
+++ b/lib/ethdev/rte_ethdev_trace_fp.h
@@ -18,7 +18,16 @@ extern "C" {
#include <rte_trace_point.h>
RTE_TRACE_POINT_FP(
- rte_ethdev_trace_rx_burst,
+ rte_ethdev_trace_rx_burst_empty,
+ RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t queue_id,
+ void **pkt_tbl),
+ rte_trace_point_emit_u16(port_id);
+ rte_trace_point_emit_u16(queue_id);
+ rte_trace_point_emit_ptr(pkt_tbl);
+)
+
+RTE_TRACE_POINT_FP(
+ rte_ethdev_trace_rx_burst_nonempty,
RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t queue_id,
void **pkt_tbl, uint16_t nb_rx),
rte_trace_point_emit_u16(port_id);
@@ -38,7 +47,17 @@ RTE_TRACE_POINT_FP(
)
RTE_TRACE_POINT_FP(
- rte_eth_trace_call_rx_callbacks,
+ rte_eth_trace_call_rx_callbacks_empty,
+ RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t queue_id,
+ void **rx_pkts, uint16_t nb_pkts),
+ rte_trace_point_emit_u16(port_id);
+ rte_trace_point_emit_u16(queue_id);
+ rte_trace_point_emit_ptr(rx_pkts);
+ rte_trace_point_emit_u16(nb_pkts);
+)
+
+RTE_TRACE_POINT_FP(
+ rte_eth_trace_call_rx_callbacks_nonempty,
RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t queue_id,
void **rx_pkts, uint16_t nb_rx, uint16_t nb_pkts),
rte_trace_point_emit_u16(port_id);
diff --git a/lib/ethdev/version.map b/lib/ethdev/version.map
index 1669055ca5..f6aca95069 100644
--- a/lib/ethdev/version.map
+++ b/lib/ethdev/version.map
@@ -207,7 +207,6 @@ EXPERIMENTAL {
rte_flow_dev_dump;
# added in 20.05
- __rte_ethdev_trace_rx_burst;
__rte_ethdev_trace_tx_burst;
rte_flow_get_aged_flows;
@@ -325,6 +324,12 @@ EXPERIMENTAL {
rte_flow_template_table_resizable;
rte_flow_template_table_resize;
rte_flow_template_table_resize_complete;
+
+ # added in 24.11
+ __rte_ethdev_trace_rx_burst_empty;
+ __rte_ethdev_trace_rx_burst_nonempty;
+ __rte_eth_trace_call_rx_callbacks_empty;
+ __rte_eth_trace_call_rx_callbacks_nonempty;
};
INTERNAL {
--
2.34.1
next prev parent reply other threads:[~2024-09-18 18:46 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-13 17:58 [PATCH] ethdev: optimize " Adel Belkhiri
2024-09-13 19:47 ` Morten Brørup
2024-09-16 8:25 ` Jerin Jacob
2024-09-16 8:31 ` David Marchand
2024-09-16 8:45 ` Jerin Jacob
2024-09-18 18:45 ` Adel Belkhiri [this message]
2024-09-19 16:37 ` [PATCH v3] ethdev: optimize the " Jerin Jacob
2024-09-22 1:07 ` Ferruh Yigit
2024-09-23 15:27 ` Adel Belkhiri
2024-09-20 14:46 ` Patrick Robb
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240918184502.125550-1-adel.belkhiri@gmail.com \
--to=adel.belkhiri@gmail.com \
--cc=adel.belkhiri@polymtl.ca \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@amd.com \
--cc=thomas@monjalon.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).