Hi Shreyansh,

On 6/6/2016 3:38 PM, Shreyansh Jain wrote:
> Hi,
>
> (Apologies for overly-eager email sent on this thread earlier. Will be more 
> careful in future).
>
> This is more of a question/clarification than a comment. (And I have taken 
> only some snippets from original mail to keep it cleaner)
>
> <snip>
>> +MEMPOOL_REGISTER_OPS(ops_mp_mc);
>> +MEMPOOL_REGISTER_OPS(ops_sp_sc);
>> +MEMPOOL_REGISTER_OPS(ops_mp_sc);
>> +MEMPOOL_REGISTER_OPS(ops_sp_mc);
> <snip>
>
>  From the above what I understand is that multiple packet pool handlers can 
> be created.
>
> I have a use-case where application has multiple pools but only the packet 
> pool is hardware backed. Using the hardware for general buffer requirements 
> would prove costly.
>  From what I understand from the patch, selection of the pool is based on the 
> flags below.

The flags are only used to select one of the default handlers for 
backward compatibility through
the rte_mempool_create call. If you wish to use a mempool handler that 
is not one of the
defaults, (i.e. a new hardware handler), you would use the 
rte_create_mempool_empty
followed by the rte_mempool_set_ops_byname call.
So, for the external handlers, you create and empty mempool, then set 
the operations (ops)
for that particular mempool.

> <snip>
>> +    /*
>> +     * Since we have 4 combinations of the SP/SC/MP/MC examine the flags to
>> +     * set the correct index into the table of ops structs.
>> +     */
>> +    if (flags & (MEMPOOL_F_SP_PUT | MEMPOOL_F_SC_GET))
>> +            rte_mempool_set_ops_byname(mp, "ring_sp_sc");
>> +    else if (flags & MEMPOOL_F_SP_PUT)
>> +            rte_mempool_set_ops_byname(mp, "ring_sp_mc");
>> +    else if (flags & MEMPOOL_F_SC_GET)
>> +            rte_mempool_set_ops_byname(mp, "ring_mp_sc");
>> +    else
>> +            rte_mempool_set_ops_byname(mp, "ring_mp_mc");
>> +
> Is there any way I can achieve the above use case of multiple pools which can 
> be selected by an application - something like a run-time toggle/flag?
>
> -
> Shreyansh

Yes, you can create multiple pools, some using the default handlers, and 
some using external handlers.
There is an example of this in the autotests (app/test/test_mempool.c). 
This test creates multiple
mempools, of which one is a custom malloc based mempool handler. The 
test puts and gets mbufs
to/from each mempool all in the same application.

Regards,
Dave.




Reply via email to