From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f175.google.com (mail-pf0-f175.google.com [209.85.192.175]) by dpdk.org (Postfix) with ESMTP id CF9DA8D8D for ; Fri, 18 Dec 2015 06:01:08 +0100 (CET) Received: by mail-pf0-f175.google.com with SMTP id v86so42662924pfa.2 for ; Thu, 17 Dec 2015 21:01:08 -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=hKAPfhrFSb9a8Tjtsgy7UBwRN8mt2wvCUx7qfNT+7Kg=; b=L8t5Hj7bfomdOWwkrfJKz4N1LYYPeEa9j4FprSrZEKJm/YYdBbhgDE7Rxnubf6RfOn Kp+HsM4cFPKMyJjZyh33n3hv/6PEZWf0qgFugPm2xHOE+/wciNkAjIL248tAOBBMiT1K e7pVjzPVI4LkBea7vkFVD4Mx2ZOVdDbmMoIOyZEsfSo6wVDwnfIx2vhy4eOAdF5jAkDO nBWHA+MwMCvJ4reLTGuPuEYGuYPiJSnpO5YxHI4/dfJ5RL8bZ8jYvUYB7+ZRHhGNak4T Gy5Ir7aPMgqqfRdMM7GHJ3qlkLEhLhWktTL2aVJ68JId7Ij1uG2gdZe6reHYD7r7Hexo UYuw== 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=hKAPfhrFSb9a8Tjtsgy7UBwRN8mt2wvCUx7qfNT+7Kg=; b=PHALbNc4KRl/k1z6zYYc4Lc+uFIG8Ny6svgQ5IQ5ki9zOhfmhXtRmK4xM1KfiWHADj UYcExSLbjOcCcVPle9rsCVfGgdSDOjI+VtJogjjq5KC1Jyi1TMBwAvqRD+4n+wk+sRu3 Wf69Q0I2mttRMtY6KFN0kvtpPZxIOrT348JZkNgLUnt4ZchWVxFP96xoEYliXfDdU67A f30h8nHls/qsNbdt3YBxd2rHv0phTZs3Tu/q1uLJabhZQQDhdS10ItlpvRWZzE8KLRnA Fd64UbROUKQ2mFqdjXHGc/ZsgensgernIoZ7VfWMs1RbFSA10JH4ladT1yQoLSTjnoRi FpVA== X-Gm-Message-State: ALoCoQmXpyTeGAbHG/u/sLj3UbSo+E74nWOnJ2FCgQeedIdHWBrXjZFnzGEzRfwfJhCefpqerTcSly9Yyd/SndBt+jFlbKq+Sw== X-Received: by 10.98.67.148 with SMTP id l20mr2324143pfi.109.1450414868155; Thu, 17 Dec 2015 21:01:08 -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 x10sm14620623pfa.14.2015.12.17.21.01.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 17 Dec 2015 21:01:08 -0800 (PST) Date: Thu, 17 Dec 2015 21:01:14 -0800 From: Stephen Hemminger To: Huawei Xie Message-ID: <20151217210114.534a7561@xeon-e3> In-Reply-To: <1450055682-51953-2-git-send-email-huawei.xie@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> 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 05:01:09 -0000 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.