[dpdk-dev,v3,05/12] event/octeontx: add event timer stats get and reset

Message ID 20180403150514.24201-6-pbhagavatula@caviumnetworks.com (mailing list archive)
State Changes Requested, archived
Delegated to: Jerin Jacob
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail apply patch file failure

Commit Message

Pavan Nikhilesh April 3, 2018, 3:05 p.m. UTC
  Add functions to get and reset event timer adapter stats.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
---
 drivers/event/octeontx/timvf_evdev.c | 26 ++++++++++++++++++++++++++
 drivers/event/octeontx/timvf_evdev.h |  1 +
 2 files changed, 27 insertions(+)
  

Comments

Carrillo, Erik G April 4, 2018, 1:59 a.m. UTC | #1
> -----Original Message-----
> From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com]
> Sent: Tuesday, April 3, 2018 10:05 AM
> To: jerin.jacob@caviumnetworks.com;
> santosh.shukla@caviumnetworks.com; Carrillo, Erik G
> <erik.g.carrillo@intel.com>
> Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> Subject: [dpdk-dev] [PATCH v3 05/12] event/octeontx: add event timer stats
> get and reset
> 
> Add functions to get and reset event timer adapter stats.
> 
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> ---

<...snipped...>

> --- a/drivers/event/octeontx/timvf_evdev.h
> +++ b/drivers/event/octeontx/timvf_evdev.h
> @@ -145,6 +145,7 @@ struct timvf_meta {
>  	struct tim_mem_bucket *bkt;
>  	void *chunk_pool;
>  	uint64_t tck_int;
> +	volatile uint64_t tim_arm_cnt;
 
It seems like the count could be incorrect if multiple threads arm timers concurrently.  Is that the case?

Thanks,
Gabriel

>  };
> 
>  struct timvf_ring {
> --
> 2.16.3
  
Jerin Jacob April 8, 2018, 7:52 a.m. UTC | #2
-----Original Message-----
> Date: Tue,  3 Apr 2018 20:35:07 +0530
> From: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> To: jerin.jacob@caviumnetworks.com, santosh.shukla@caviumnetworks.com,
>  erik.g.carrillo@intel.com
> Cc: dev@dpdk.org, Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> Subject: [dpdk-dev] [PATCH v3 05/12] event/octeontx: add event timer stats
>  get and reset
> X-Mailer: git-send-email 2.16.3
> 
> Add functions to get and reset event timer adapter stats.
> 
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> ---
>  drivers/event/octeontx/timvf_evdev.c | 26 ++++++++++++++++++++++++++
>  drivers/event/octeontx/timvf_evdev.h |  1 +
>  2 files changed, 27 insertions(+)
> 
> diff --git a/drivers/event/octeontx/timvf_evdev.c b/drivers/event/octeontx/timvf_evdev.c
> index ccf724115..4db10cdd0 100644
> --- a/drivers/event/octeontx/timvf_evdev.c
> +++ b/drivers/event/octeontx/timvf_evdev.c
> @@ -281,12 +281,38 @@ timvf_ring_free(struct rte_event_timer_adapter *adptr)
>  	return 0;
>  }
>  
> +
> +static int
> +timvf_stats_get(const struct rte_event_timer_adapter *adapter,
> +		struct rte_event_timer_adapter_stats *stats)
> +{
> +	struct timvf_ring *timr = adapter->data->adapter_priv;
> +	uint64_t bkt_cyc = rte_rdtsc() - timr->meta.ring_start_cyc;
> +
> +	stats->evtim_exp_count = timr->meta.tim_arm_cnt;
> +	stats->ev_enq_count = timr->meta.tim_arm_cnt;

We are updating the these counts in fastpath. Right? As an optimization,
may be we could take the arguments from vdev to choose to enable "stats" at
runtime by making it two function pointers. By default it can be disabled.
  

Patch

diff --git a/drivers/event/octeontx/timvf_evdev.c b/drivers/event/octeontx/timvf_evdev.c
index ccf724115..4db10cdd0 100644
--- a/drivers/event/octeontx/timvf_evdev.c
+++ b/drivers/event/octeontx/timvf_evdev.c
@@ -281,12 +281,38 @@  timvf_ring_free(struct rte_event_timer_adapter *adptr)
 	return 0;
 }
 
+
+static int
+timvf_stats_get(const struct rte_event_timer_adapter *adapter,
+		struct rte_event_timer_adapter_stats *stats)
+{
+	struct timvf_ring *timr = adapter->data->adapter_priv;
+	uint64_t bkt_cyc = rte_rdtsc() - timr->meta.ring_start_cyc;
+
+	stats->evtim_exp_count = timr->meta.tim_arm_cnt;
+	stats->ev_enq_count = timr->meta.tim_arm_cnt;
+	stats->adapter_tick_count = rte_reciprocal_divide_u64(bkt_cyc,
+				&timr->meta.fast_div);
+	return 0;
+}
+
+static int
+timvf_stats_reset(const struct rte_event_timer_adapter *adapter)
+{
+	struct timvf_ring *timr = adapter->data->adapter_priv;
+
+	timr->meta.tim_arm_cnt = 0;
+	return 0;
+}
+
 static struct rte_event_timer_adapter_ops timvf_ops = {
 		.init		= timvf_ring_create,
 		.uninit		= timvf_ring_free,
 		.start		= timvf_ring_start,
 		.stop		= timvf_ring_stop,
 		.get_info	= timvf_ring_info_get,
+		.stats_get	= timvf_stats_get,
+		.stats_reset	= timvf_stats_reset,
 };
 
 int
diff --git a/drivers/event/octeontx/timvf_evdev.h b/drivers/event/octeontx/timvf_evdev.h
index e155b6ce2..e98ab631a 100644
--- a/drivers/event/octeontx/timvf_evdev.h
+++ b/drivers/event/octeontx/timvf_evdev.h
@@ -145,6 +145,7 @@  struct timvf_meta {
 	struct tim_mem_bucket *bkt;
 	void *chunk_pool;
 	uint64_t tck_int;
+	volatile uint64_t tim_arm_cnt;
 };
 
 struct timvf_ring {