[06/11] net/sfc: optimize getting number of SW stats
Checks
Commit Message
From: Ivan Ilchenko <ivan.ilchenko@oktetlabs.ru>
Optimize getting number of SW stats by caching the
value during device configure since it's the only
place it may change.
Signed-off-by: Ivan Ilchenko <ivan.ilchenko@oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
---
drivers/net/sfc/sfc.h | 2 ++
drivers/net/sfc/sfc_sw_stats.c | 14 ++++----------
2 files changed, 6 insertions(+), 10 deletions(-)
@@ -218,6 +218,8 @@ struct sfc_counter_rxq {
};
struct sfc_sw_stats {
+ /* Number extended statistics provided by SW stats */
+ unsigned int xstats_count;
uint64_t *reset_vals;
rte_spinlock_t queues_bitmap_lock;
@@ -329,17 +329,8 @@ sfc_sw_xstat_get_values_by_id(struct sfc_adapter *sa,
unsigned int
sfc_sw_xstats_get_nb_supported(struct sfc_adapter *sa)
{
- unsigned int nb_supported = 0;
- unsigned int i;
-
SFC_ASSERT(sfc_adapter_is_locked(sa));
-
- for (i = 0; i < RTE_DIM(sfc_sw_stats_descr); i++) {
- nb_supported += sfc_sw_xstat_get_nb_supported(sa,
- &sfc_sw_stats_descr[i]);
- }
-
- return nb_supported;
+ return sa->sw_stats.xstats_count;
}
void
@@ -506,6 +497,7 @@ sfc_sw_xstats_configure(struct sfc_adapter *sa)
for (i = 0; i < RTE_DIM(sfc_sw_stats_descr); i++)
nb_supported += sfc_sw_xstat_get_nb_supported(sa,
&sfc_sw_stats_descr[i]);
+ sa->sw_stats.xstats_count = nb_supported;
*reset_vals = rte_realloc(*reset_vals,
nb_supported * sizeof(**reset_vals), 0);
@@ -559,6 +551,7 @@ sfc_sw_xstats_alloc_queues_bitmap(struct sfc_adapter *sa)
int
sfc_sw_xstats_init(struct sfc_adapter *sa)
{
+ sa->sw_stats.xstats_count = 0;
sa->sw_stats.reset_vals = NULL;
return sfc_sw_xstats_alloc_queues_bitmap(sa);
@@ -570,4 +563,5 @@ sfc_sw_xstats_close(struct sfc_adapter *sa)
sfc_sw_xstats_free_queues_bitmap(sa);
rte_free(sa->sw_stats.reset_vals);
sa->sw_stats.reset_vals = NULL;
+ sa->sw_stats.xstats_count = 0;
}