Hi,

> -----Original Message-----
> From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of Wenfeng Liu
> Sent: Monday, January 9, 2017 10:25 AM
> To: olivier.m...@6wind.com
> Cc: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH] mempool: try to get objects from cache when the 
> mempool is single consumer and multiple producer
> 
> 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) ||


I suppose that's a good thing to do...
Might be go one step further and don't check flags at all?
if (unlikely(cache == NULL || n >= cache->size)
   goto ring_dequeue;
If people don't want to have a mempool with cache,
they can just specify it at mempool creation time.
Again cache might improve performance even for SC|SP case.
Konstantin   

>                    n >= cache->size))
>               goto ring_dequeue;
> 
> --
> 2.7.4

Reply via email to