We put objects to cache when the mempool is multiple producer, however the 
cache will not be used when it is single consumer.
With this patch we can get objects from cache when the single consumer is 
happen to be one of the producers, and this improves performance.

Signed-off-by: Wenfeng Liu <li...@arraynetworks.com.cn>
---
 lib/librte_mempool/rte_mempool.h | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lib/librte_mempool/rte_mempool.h b/lib/librte_mempool/rte_mempool.h
index d315d42..4ab5a95 100644
--- a/lib/librte_mempool/rte_mempool.h
+++ b/lib/librte_mempool/rte_mempool.h
@@ -1250,8 +1250,9 @@ __mempool_generic_get(struct rte_mempool *mp, void 
**obj_table,
        uint32_t index, len;
        void **cache_objs;
 
-       /* No cache provided or single consumer */
-       if (unlikely(cache == NULL || flags & MEMPOOL_F_SC_GET ||
+       /* No cache provided or single consumer and single producer */
+       if (unlikely(cache == NULL ||
+                    (flags & MEMPOOL_F_SC_GET) && (flags & MEMPOOL_F_SP_PUT) ||
                     n >= cache->size))
                goto ring_dequeue;
 
-- 
2.7.4

Reply via email to