From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Hunt, David" Subject: Re: [PATCH v8 1/3] mempool: support external mempool operations Date: Tue, 7 Jun 2016 10:25:48 +0100 Message-ID: <5756931C.70805@intel.com> References: <1464874043-67467-1-git-send-email-david.hunt@intel.com> <1464965906-108927-1-git-send-email-david.hunt@intel.com> <1464965906-108927-2-git-send-email-david.hunt@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Cc: "olivier.matz@6wind.com" , "viktorin@rehivetech.com" , "jerin.jacob@caviumnetworks.com" To: Shreyansh Jain , "dev@dpdk.org" Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 28A6C95FD for ; Tue, 7 Jun 2016 11:25:51 +0200 (CEST) In-Reply-To: List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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) > > >> +MEMPOOL_REGISTER_OPS(ops_mp_mc); >> +MEMPOOL_REGISTER_OPS(ops_sp_sc); >> +MEMPOOL_REGISTER_OPS(ops_mp_sc); >> +MEMPOOL_REGISTER_OPS(ops_sp_mc); > > > 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. > >> + /* >> + * 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.