[v3] ethdev: optimize the activation of fast-path tracepoints

Message ID 20240918184502.125550-1-adel.belkhiri@gmail.com (mailing list archive)
State Accepted
Delegated to: Ferruh Yigit
Headers
Series [v3] ethdev: optimize the activation of fast-path tracepoints |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/loongarch-compilation success Compilation OK
ci/loongarch-unit-testing success Unit Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/intel-Functional success Functional PASS
ci/github-robot: build success github build: passed
ci/iol-unit-amd64-testing success Testing PASS
ci/iol-compile-amd64-testing success Testing PASS
ci/iol-unit-arm64-testing success Testing PASS
ci/iol-compile-arm64-testing success Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS RETEST #1
ci/iol-sample-apps-testing success Testing PASS RETEST #1
ci/iol-intel-Functional success Functional Testing PASS RETEST #1
ci/iol-marvell-Functional success Functional Testing PASS RETEST #1

Commit Message

Adel Belkhiri Sept. 18, 2024, 6:45 p.m. UTC
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(-)
  

Comments

Jerin Jacob Sept. 19, 2024, 4:37 p.m. UTC | #1
On Thu, Sep 19, 2024 at 12:16 AM Adel Belkhiri <adel.belkhiri@gmail.com> wrote:
>
> 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>

Acked-by: Jerin Jacob <jerinj@marvell.com>
  
Patrick Robb Sept. 20, 2024, 2:46 p.m. UTC | #2
Recheck-request: iol-marvell-Functional

putting in a ci lab retest for the failures on this series.
  
Ferruh Yigit Sept. 22, 2024, 1:07 a.m. UTC | #3
On 9/19/2024 5:37 PM, Jerin Jacob wrote:
> On Thu, Sep 19, 2024 at 12:16 AM Adel Belkhiri <adel.belkhiri@gmail.com> wrote:
>>
>> 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>
> 
> Acked-by: Jerin Jacob <jerinj@marvell.com>
>

Applied to dpdk-next-net/main, thanks.
  
Adel Belkhiri Sept. 23, 2024, 3:27 p.m. UTC | #4
Thanks to all of you. Much appreciated!

On Sat, Sep 21, 2024 at 9:07 PM Ferruh Yigit <ferruh.yigit@amd.com> wrote:

> On 9/19/2024 5:37 PM, Jerin Jacob wrote:
> > On Thu, Sep 19, 2024 at 12:16 AM Adel Belkhiri <adel.belkhiri@gmail.com>
> wrote:
> >>
> >> 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>
> >
> > Acked-by: Jerin Jacob <jerinj@marvell.com>
> >
>
> Applied to dpdk-next-net/main, thanks.
>
  

Patch

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 {