[dpdk-dev] [PATCH] mempool: try to get objects from cache when the mempool is single consumer and multiple producer

Wenfeng Liu liuwf at arraynetworks.com.cn
Mon Jan 9 11:24:47 CET 2017


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 <liuwf at 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



More information about the dev mailing list