net/sfc: optimize getting number of SW stats

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>
This commit is contained in:
Ivan Ilchenko 2021-09-28 14:29:07 +03:00 committed by Ferruh Yigit
parent fc66e84d6d
commit c704e5df3d
2 changed files with 6 additions and 10 deletions

View File

@ -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;

View File

@ -329,17 +329,8 @@ unlock:
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 @@ fail:
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;
}