From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 6A0748D3A for ; Thu, 17 Dec 2015 16:42:28 +0100 (CET) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP; 17 Dec 2015 07:42:23 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.20,441,1444719600"; d="scan'208";a="875761375" Received: from irsmsx104.ger.corp.intel.com ([163.33.3.159]) by fmsmga002.fm.intel.com with ESMTP; 17 Dec 2015 07:42:23 -0800 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.203]) by IRSMSX104.ger.corp.intel.com ([169.254.5.138]) with mapi id 14.03.0248.002; Thu, 17 Dec 2015 15:42:19 +0000 From: "Ananyev, Konstantin" To: Yuanhan Liu , "Xie, Huawei" Thread-Topic: [dpdk-dev] [PATCH v2 1/2] mbuf: provide rte_pktmbuf_alloc_bulk API Thread-Index: AQHROJXwMJn/XbColE2lafusN+Vn/p7PUIIQ Date: Thu, 17 Dec 2015 15:42:19 +0000 Message-ID: <2601191342CEEE43887BDE71AB97725836AD484A@irsmsx105.ger.corp.intel.com> References: <1450049754-33635-1-git-send-email-huawei.xie@intel.com> <1450055682-51953-1-git-send-email-huawei.xie@intel.com> <1450055682-51953-2-git-send-email-huawei.xie@intel.com> <20151217064106.GY29571@yliu-dev.sh.intel.com> In-Reply-To: <20151217064106.GY29571@yliu-dev.sh.intel.com> Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [163.33.239.182] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] [PATCH v2 1/2] mbuf: provide rte_pktmbuf_alloc_bulk API X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 17 Dec 2015 15:42:29 -0000 > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Yuanhan Liu > Sent: Thursday, December 17, 2015 6:41 AM > To: Xie, Huawei > Cc: dev@dpdk.org > Subject: Re: [dpdk-dev] [PATCH v2 1/2] mbuf: provide rte_pktmbuf_alloc_bu= lk API >=20 > On Mon, Dec 14, 2015 at 09:14:41AM +0800, Huawei Xie wrote: > > v2 changes: > > unroll the loop a bit to help the performance > > > > rte_pktmbuf_alloc_bulk allocates a bulk of packet mbufs. > > > > There is related thread about this bulk API. > > http://dpdk.org/dev/patchwork/patch/4718/ > > Thanks to Konstantin's loop unrolling. > > > > Signed-off-by: Gerald Rogers > > Signed-off-by: Huawei Xie > > Acked-by: Konstantin Ananyev > > --- > > lib/librte_mbuf/rte_mbuf.h | 50 ++++++++++++++++++++++++++++++++++++++= ++++++++ > > 1 file changed, 50 insertions(+) > > > > diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h > > index f234ac9..4e209e0 100644 > > --- a/lib/librte_mbuf/rte_mbuf.h > > +++ b/lib/librte_mbuf/rte_mbuf.h > > @@ -1336,6 +1336,56 @@ static inline struct rte_mbuf *rte_pktmbuf_alloc= (struct rte_mempool *mp) > > } > > > > /** > > + * Allocate a bulk of mbufs, initialize refcnt and reset the fields to= default > > + * values. > > + * > > + * @param pool > > + * The mempool from which mbufs are allocated. > > + * @param mbufs > > + * Array of pointers to mbufs > > + * @param count > > + * Array size > > + * @return > > + * - 0: Success > > + */ > > +static inline int rte_pktmbuf_alloc_bulk(struct rte_mempool *pool, > > + struct rte_mbuf **mbufs, unsigned count) >=20 > It violates the coding style a bit. >=20 > > +{ > > + unsigned idx =3D 0; > > + int rc; > > + > > + rc =3D rte_mempool_get_bulk(pool, (void **)mbufs, count); > > + if (unlikely(rc)) > > + return rc; > > + > > + switch (count % 4) { > > + while (idx !=3D count) { >=20 > Well, that's an awkward trick, putting while between switch and case. >=20 > How about moving the whole switch block ahead, and use goto? >=20 > switch (count % 4) { > case 3: > goto __3; > break; > case 2: > goto __2; > break; > ... >=20 > } >=20 > It basically generates same instructions, yet it improves the > readability a bit. I am personally not a big fun of gotos, unless it is totally unavoidable. I think switch/while construction is pretty obvious these days. For me the original variant looks cleaner, so my vote would be to stick wit= h it. Konstantin >=20 > --yliu >=20 > > + case 0: > > + RTE_MBUF_ASSERT(rte_mbuf_refcnt_read(mbufs[idx]) =3D=3D 0); > > + rte_mbuf_refcnt_set(mbufs[idx], 1); > > + rte_pktmbuf_reset(mbufs[idx]); > > + idx++; > > + case 3: > > + RTE_MBUF_ASSERT(rte_mbuf_refcnt_read(mbufs[idx]) =3D=3D 0); > > + rte_mbuf_refcnt_set(mbufs[idx], 1); > > + rte_pktmbuf_reset(mbufs[idx]); > > + idx++; > > + case 2: > > + RTE_MBUF_ASSERT(rte_mbuf_refcnt_read(mbufs[idx]) =3D=3D 0); > > + rte_mbuf_refcnt_set(mbufs[idx], 1); > > + rte_pktmbuf_reset(mbufs[idx]); > > + idx++; > > + case 1: > > + RTE_MBUF_ASSERT(rte_mbuf_refcnt_read(mbufs[idx]) =3D=3D 0); > > + rte_mbuf_refcnt_set(mbufs[idx], 1); > > + rte_pktmbuf_reset(mbufs[idx]); > > + idx++; > > + } > > + } > > + return 0; > > +} > > + > > +/** > > * Attach packet mbuf to another packet mbuf. > > * > > * After attachment we refer the mbuf we attached as 'indirect', > > -- > > 1.8.1.4