event/octeontx2: reduce chunk pool memory usage
authorPavan Nikhilesh <pbhagavatula@marvell.com>
Tue, 23 Mar 2021 08:44:37 +0000 (14:14 +0530)
committerJerin Jacob <jerinj@marvell.com>
Mon, 12 Apr 2021 07:23:34 +0000 (09:23 +0200)
Reduce amount of memory used by chunk pool when the mempool used
is OCTEONTX2 NPA.
Previously, the number of chunks configured when NPA is used is
equal to the number of timers requested plus the number of buckets
and if the max timeout is long enough w.r.t. resolution requested
there will a large number of buckets which would cause high memory
usage.
Reduce the number of chunks when NPA is used to the number of timers
requested as buckets that are processed chunk lists are automatically
freed.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
drivers/event/octeontx2/otx2_tim_evdev.c
drivers/event/octeontx2/otx2_tim_evdev.h

index 0bbba48..688f6b8 100644 (file)
@@ -92,6 +92,8 @@ tim_chnk_pool_create(struct otx2_tim_ring *tim_ring,
        if (cache_sz > RTE_MEMPOOL_CACHE_MAX_SIZE)
                cache_sz = RTE_MEMPOOL_CACHE_MAX_SIZE;
 
+       cache_sz = cache_sz != 0 ? cache_sz : 2;
+       tim_ring->nb_chunks += (cache_sz * rte_lcore_count());
        if (!tim_ring->disable_npa) {
                tim_ring->chunk_pool = rte_mempool_create_empty(pool_name,
                                tim_ring->nb_chunks, tim_ring->chunk_sz,
@@ -286,16 +288,15 @@ otx2_tim_ring_create(struct rte_event_timer_adapter *adptr)
                }
        }
 
-       tim_ring->nb_chunks = tim_ring->nb_timers / OTX2_TIM_NB_CHUNK_SLOTS(
-                                                       tim_ring->chunk_sz);
-       tim_ring->nb_chunk_slots = OTX2_TIM_NB_CHUNK_SLOTS(tim_ring->chunk_sz);
-
-       if (tim_ring->disable_npa)
+       if (tim_ring->disable_npa) {
+               tim_ring->nb_chunks =
+                       tim_ring->nb_timers /
+                       OTX2_TIM_NB_CHUNK_SLOTS(tim_ring->chunk_sz);
                tim_ring->nb_chunks = tim_ring->nb_chunks * tim_ring->nb_bkts;
-       else
-               tim_ring->nb_chunks = tim_ring->nb_chunks + tim_ring->nb_bkts;
-
-       /* Create buckets. */
+       } else {
+               tim_ring->nb_chunks = tim_ring->nb_timers;
+       }
+       tim_ring->nb_chunk_slots = OTX2_TIM_NB_CHUNK_SLOTS(tim_ring->chunk_sz);
        tim_ring->bkt = rte_zmalloc("otx2_tim_bucket", (tim_ring->nb_bkts) *
                                    sizeof(struct otx2_tim_bkt),
                                    RTE_CACHE_LINE_SIZE);
index e9cefea..2492252 100644 (file)
@@ -70,7 +70,7 @@
 #define OTX2_TIM_MAX_BURST             (RTE_CACHE_LINE_SIZE / \
                                                OTX2_TIM_CHUNK_ALIGNMENT)
 #define OTX2_TIM_NB_CHUNK_SLOTS(sz)    (((sz) / OTX2_TIM_CHUNK_ALIGNMENT) - 1)
-#define OTX2_TIM_MIN_CHUNK_SLOTS       (0x1)
+#define OTX2_TIM_MIN_CHUNK_SLOTS       (0x8)
 #define OTX2_TIM_MAX_CHUNK_SLOTS       (0x1FFE)
 #define OTX2_TIM_MIN_TMO_TKS           (256)