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>
This commit is contained in:
Pavan Nikhilesh 2018-04-10 02:30:29 +05:30 committed by Thomas Monjalon
parent ea73fed2a6
commit d1925c87d0
4 changed files with 55 additions and 2 deletions

View File

@ -99,6 +99,16 @@ The tests are run once the vdev creation is successfully complete.
--vdev="event_octeontx,self_test=1"
Enable TIMvf stats
------------------
TIMvf stats can be enabled by using this option, by default the stats are
disabled.
.. code-block:: console
--vdev="event_octeontx,timvf_stats=1"
Limitations
-----------

View File

@ -21,6 +21,7 @@
#include "timvf_evdev.h"
int otx_logtype_ssovf;
static uint8_t timvf_enable_stats;
RTE_INIT(otx_ssovf_init_log);
static void
@ -606,7 +607,8 @@ static int
ssovf_timvf_caps_get(const struct rte_eventdev *dev, uint64_t flags,
uint32_t *caps, const struct rte_event_timer_adapter_ops **ops)
{
return timvf_timer_adapter_caps_get(dev, flags, caps, ops, 0);
return timvf_timer_adapter_caps_get(dev, flags, caps, ops,
timvf_enable_stats);
}
/* Initialize and register event driver with DPDK Application */
@ -654,6 +656,7 @@ ssovf_vdev_probe(struct rte_vdev_device *vdev)
static const char *const args[] = {
SSOVF_SELFTEST_ARG,
TIMVF_ENABLE_STATS_ARG,
NULL
};
@ -681,6 +684,15 @@ ssovf_vdev_probe(struct rte_vdev_device *vdev)
rte_kvargs_free(kvlist);
return ret;
}
ret = rte_kvargs_process(kvlist,
TIMVF_ENABLE_STATS_ARG,
ssovf_selftest, &timvf_enable_stats);
if (ret != 0) {
ssovf_log_err("%s: Error in timvf stats", name);
rte_kvargs_free(kvlist);
return ret;
}
}
rte_kvargs_free(kvlist);

View File

@ -268,6 +268,29 @@ 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->ring_start_cyc;
stats->evtim_exp_count = timr->tim_arm_cnt;
stats->ev_enq_count = timr->tim_arm_cnt;
stats->adapter_tick_count = rte_reciprocal_divide_u64(bkt_cyc,
&timr->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->tim_arm_cnt = 0;
return 0;
}
static struct rte_event_timer_adapter_ops timvf_ops = {
.init = timvf_ring_create,
.uninit = timvf_ring_free,
@ -283,7 +306,12 @@ timvf_timer_adapter_caps_get(const struct rte_eventdev *dev, uint64_t flags,
{
RTE_SET_USED(dev);
RTE_SET_USED(flags);
RTE_SET_USED(enable_stats);
if (enable_stats) {
timvf_ops.stats_get = timvf_stats_get;
timvf_ops.stats_reset = timvf_stats_reset;
}
*caps = RTE_EVENT_TIMER_ADAPTER_CAP_INTERNAL_PORT;
*ops = &timvf_ops;
return -EINVAL;

View File

@ -83,6 +83,8 @@
#define timvf_read64 rte_read64_relaxed
#define timvf_write64 rte_write64_relaxed
#define TIMVF_ENABLE_STATS_ARG ("timvf_stats")
extern int otx_logtype_timvf;
static const uint16_t nb_chunk_slots = (TIM_CHUNK_SIZE / 16) - 1;
@ -145,6 +147,7 @@ struct timvf_ring {
struct tim_mem_bucket *bkt;
void *chunk_pool;
uint64_t tck_int;
volatile uint64_t tim_arm_cnt;
uint64_t tck_nsec;
void *vbar0;
void *bkt_pos;