From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f181.google.com (mail-pf0-f181.google.com [209.85.192.181]) by dpdk.org (Postfix) with ESMTP id C5E625A86 for ; Fri, 18 Dec 2015 18:31:59 +0100 (CET) Received: by mail-pf0-f181.google.com with SMTP id o64so52111730pfb.3 for ; Fri, 18 Dec 2015 09:31:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:in-reply-to:references :mime-version:content-type:content-transfer-encoding; bh=hFT4Rm1a155Lh+5k2qlZzCuYZaGf8PSOgIuF3q2pVeY=; b=vo00K4i2HxiyIGn0MFXT50gz/jEn4j4LJkgqHKeqbNAD/1WE2a7zkf3zTNjDwM241G QsCPPmdXZSYB5MOIrJhm2zbfAtqId0Oc+HBSLzGKhOwpaevujTGMBxqOZOiPdXax9dY2 ScIuErmZgH71kqOIUjB8yLLkDXMTikgT8ugmlMYDYCUP4BIH+OiG5JTi7E1OqndNZRIw BS+3rw7DgX3HoaubALpzCPtDEKQDXZGa/SlHW2c1uoKZWVBHDWMt/WGoyE2JIepTol7P ej86pygJeGx0wHeqTTdQZVcjw/9UtG1rMqzNdGm3gGTtjketLu54vjsNObmJJi2egd0y Y3Rw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:in-reply-to :references:mime-version:content-type:content-transfer-encoding; bh=hFT4Rm1a155Lh+5k2qlZzCuYZaGf8PSOgIuF3q2pVeY=; b=DLpjCCOagS9S1jF2FDYStCZvtg/rLYKn67WfIyO30YhLBJ1eGssVJu4kDmWrMiKRe7 ieJ1FB49kIgEsGYdsjXLnZN6rO8J8lIh6NtZxDbJOnACysow7PyCs48vDXN+UZWyh2Up ZTnTnew+G5hkIHWpx1UMQPc9RwIGADShvbHRL4li9IVG1/a7HLOgpxUGMTL4kk5IoUj/ 79Muu855wiPl3MB1OfKdyblThY44WXi22IyeP5sGyFDNJOMzJ16o51gYBZyAiYPOv+TO 906AnxLGt+edk0O/uX57ZJ41tA2twxgVVGmk65XvUb4RFugAv+yaZH5kLugmiotgqbRy 9gYA== X-Gm-Message-State: ALoCoQkZgD4ItKp/7za6pyF5kbpG/EzDvXCo/doih11H1Eiwji6RPjXkv1KR+4oXddroOFU1I9RjzokaCmxncsVxDvVDWDdOxQ== X-Received: by 10.98.14.217 with SMTP id 86mr7044713pfo.101.1450459919031; Fri, 18 Dec 2015 09:31:59 -0800 (PST) Received: from xeon-e3 (static-50-53-82-155.bvtn.or.frontiernet.net. [50.53.82.155]) by smtp.gmail.com with ESMTPSA id by2sm23562968pab.20.2015.12.18.09.31.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 18 Dec 2015 09:31:58 -0800 (PST) Date: Fri, 18 Dec 2015 09:32:06 -0800 From: Stephen Hemminger To: "Ananyev, Konstantin" Message-ID: <20151218093206.35e2e3e4@xeon-e3> In-Reply-To: <2601191342CEEE43887BDE71AB97725836AD5AEB@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> <20151217210114.534a7561@xeon-e3> <2601191342CEEE43887BDE71AB97725836AD5AEB@irsmsx105.ger.corp.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit 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: Fri, 18 Dec 2015 17:32:00 -0000 On Fri, 18 Dec 2015 10:44:02 +0000 "Ananyev, Konstantin" wrote: > > > > -----Original Message----- > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Stephen Hemminger > > Sent: Friday, December 18, 2015 5:01 AM > > To: Xie, Huawei > > Cc: dev@dpdk.org > > Subject: Re: [dpdk-dev] [PATCH v2 1/2] mbuf: provide rte_pktmbuf_alloc_bulk API > > > > On Mon, 14 Dec 2015 09:14:41 +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) > > > +{ > > > + unsigned idx = 0; > > > + int rc; > > > + > > > + rc = rte_mempool_get_bulk(pool, (void **)mbufs, count); > > > + if (unlikely(rc)) > > > + return rc; > > > + > > > + switch (count % 4) { > > > + while (idx != count) { > > > + case 0: > > > + RTE_MBUF_ASSERT(rte_mbuf_refcnt_read(mbufs[idx]) == 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]) == 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]) == 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]) == 0); > > > + rte_mbuf_refcnt_set(mbufs[idx], 1); > > > + rte_pktmbuf_reset(mbufs[idx]); > > > + idx++; > > > + } > > > + } > > > + return 0; > > > +} > > > > This is weird. Why not just use Duff's device in a more normal manner. > > But it is a sort of Duff's method. > Not sure what looks weird to you here? > while () {} instead of do {} while();? > Konstantin > > > It is unusual to have cases not associated with block of the switch. Unusual to me means, "not used commonly in most code". Since you are jumping into the loop, might make more sense as a do { } while()