eventdev/timer: move buffer flush call

Message ID 20230412195637.450033-1-erik.g.carrillo@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Jerin Jacob
Headers
Series eventdev/timer: move buffer flush call |

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/loongarch-compilation success Compilation OK
ci/loongarch-unit-testing success Unit Testing PASS
ci/github-robot: build success github build: passed
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-unit-testing success Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-abi-testing success Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-testing success Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/intel-Functional success Functional PASS

Commit Message

Carrillo, Erik G April 12, 2023, 7:56 p.m. UTC
  The SW event timer adapter attempts to flush its event buffer on every
adapter tick. If events remain in the buffer after the attempt, another
attempt to flush won't occur until the next adapter tick, which delays
the enqueue of those events to the event device unecessarily.

Move the buffer flush call so that it happens with every invocation of
the service function, rather than on every adapter tick, to avoid the
delay.

Fixes: cc7b73ea9e3b ("eventdev: add new software timer adapter")
Cc: stable@dpdk.org

Signed-off-by: Erik Gabriel Carrillo <erik.g.carrillo@intel.com>
---
 lib/eventdev/rte_event_timer_adapter.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)
  

Comments

Jerin Jacob May 17, 2023, 2:01 p.m. UTC | #1
On Thu, Apr 13, 2023 at 1:26 AM Erik Gabriel Carrillo
<erik.g.carrillo@intel.com> wrote:
>
> The SW event timer adapter attempts to flush its event buffer on every
> adapter tick. If events remain in the buffer after the attempt, another
> attempt to flush won't occur until the next adapter tick, which delays
> the enqueue of those events to the event device unecessarily.

typo: unecessarily


Updated the git commit as follows and applied to
dpdk-next-net-eventdev/for-main. Thanks

    eventdev/timer: fix buffer flush

    The SW event timer adapter attempts to flush its event buffer on every
    adapter tick. If events remain in the buffer after the attempt, another
    attempt to flush won't occur until the next adapter tick, which delays
    the enqueue of those events to the event device unnecessarily.

    Move the buffer flush call so that it happens with every invocation of
    the service function, rather than on every adapter tick, to avoid the
    delay.

    Fixes: cc7b73ea9e3b ("eventdev: add new software timer adapter")
    Cc: stable@dpdk.org

    Signed-off-by: Erik Gabriel Carrillo <erik.g.carrillo@intel.com>

> Move the buffer flush call so that it happens with every invocation of
> the service function, rather than on every adapter tick, to avoid the
> delay.
>
> Fixes: cc7b73ea9e3b ("eventdev: add new software timer adapter")
> Cc: stable@dpdk.org
>
> Signed-off-by: Erik Gabriel Carrillo <erik.g.carrillo@intel.com>
> ---
>  lib/eventdev/rte_event_timer_adapter.c | 17 +++++++++--------
>  1 file changed, 9 insertions(+), 8 deletions(-)
>
> diff --git a/lib/eventdev/rte_event_timer_adapter.c b/lib/eventdev/rte_event_timer_adapter.c
> index 23eb1d4a7d..427c4c6287 100644
> --- a/lib/eventdev/rte_event_timer_adapter.c
> +++ b/lib/eventdev/rte_event_timer_adapter.c
> @@ -855,17 +855,18 @@ swtim_service_func(void *arg)
>                                      sw->n_expired_timers);
>                 sw->n_expired_timers = 0;
>
> -               event_buffer_flush(&sw->buffer,
> -                                  adapter->data->event_dev_id,
> -                                  adapter->data->event_port_id,
> -                                  &nb_evs_flushed,
> -                                  &nb_evs_invalid);
> -
> -               sw->stats.ev_enq_count += nb_evs_flushed;
> -               sw->stats.ev_inv_count += nb_evs_invalid;
>                 sw->stats.adapter_tick_count++;
>         }
>
> +       event_buffer_flush(&sw->buffer,
> +                          adapter->data->event_dev_id,
> +                          adapter->data->event_port_id,
> +                          &nb_evs_flushed,
> +                          &nb_evs_invalid);
> +
> +       sw->stats.ev_enq_count += nb_evs_flushed;
> +       sw->stats.ev_inv_count += nb_evs_invalid;
> +
>         rte_event_maintain(adapter->data->event_dev_id,
>                            adapter->data->event_port_id, 0);
>
> --
> 2.23.0
>
  

Patch

diff --git a/lib/eventdev/rte_event_timer_adapter.c b/lib/eventdev/rte_event_timer_adapter.c
index 23eb1d4a7d..427c4c6287 100644
--- a/lib/eventdev/rte_event_timer_adapter.c
+++ b/lib/eventdev/rte_event_timer_adapter.c
@@ -855,17 +855,18 @@  swtim_service_func(void *arg)
 				     sw->n_expired_timers);
 		sw->n_expired_timers = 0;
 
-		event_buffer_flush(&sw->buffer,
-				   adapter->data->event_dev_id,
-				   adapter->data->event_port_id,
-				   &nb_evs_flushed,
-				   &nb_evs_invalid);
-
-		sw->stats.ev_enq_count += nb_evs_flushed;
-		sw->stats.ev_inv_count += nb_evs_invalid;
 		sw->stats.adapter_tick_count++;
 	}
 
+	event_buffer_flush(&sw->buffer,
+			   adapter->data->event_dev_id,
+			   adapter->data->event_port_id,
+			   &nb_evs_flushed,
+			   &nb_evs_invalid);
+
+	sw->stats.ev_enq_count += nb_evs_flushed;
+	sw->stats.ev_inv_count += nb_evs_invalid;
+
 	rte_event_maintain(adapter->data->event_dev_id,
 			   adapter->data->event_port_id, 0);