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 EAFE32BC9 for ; Fri, 4 Mar 2016 03:15:30 +0100 (CET) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga102.fm.intel.com with ESMTP; 03 Mar 2016 18:15:30 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.22,534,1449561600"; d="scan'208";a="926491286" Received: from yliu-dev.sh.intel.com (HELO yliu-dev) ([10.239.66.49]) by orsmga002.jf.intel.com with ESMTP; 03 Mar 2016 18:15:28 -0800 Date: Fri, 4 Mar 2016 10:17:05 +0800 From: Yuanhan Liu To: "Xie, Huawei" Message-ID: <20160304021705.GT14300@yliu-dev.sh.intel.com> References: <1449122773-25510-1-git-send-email-yuanhan.liu@linux.intel.com> <1455803352-5518-1-git-send-email-yuanhan.liu@linux.intel.com> <1455803352-5518-2-git-send-email-yuanhan.liu@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) Cc: "Michael S. Tsirkin" , "dev@dpdk.org" , Victor Kaplansky Subject: Re: [dpdk-dev] [PATCH v2 1/7] vhost: refactor rte_vhost_dequeue_burst 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, 04 Mar 2016 02:15:31 -0000 On Thu, Mar 03, 2016 at 04:30:42PM +0000, Xie, Huawei wrote: > On 2/18/2016 9:48 PM, Yuanhan Liu wrote: > > + mbuf_avail = 0; > > + mbuf_offset = 0; > > + while (desc_avail || (desc->flags & VRING_DESC_F_NEXT) != 0) { > > + /* This desc reachs to its end, get the next one */ > > + if (desc_avail == 0) { > > + desc = &vq->desc[desc->next]; > > + > > + desc_addr = gpa_to_vva(dev, desc->addr); > > + rte_prefetch0((void *)(uintptr_t)desc_addr); > > + > > + desc_offset = 0; > > + desc_avail = desc->len; > > + > > + PRINT_PACKET(dev, (uintptr_t)desc_addr, desc->len, 0); > > + } > > + > > + /* > > + * This mbuf reachs to its end, get a new one > > + * to hold more data. > > + */ > > + if (mbuf_avail == 0) { > > + cur = rte_pktmbuf_alloc(mbuf_pool); > > + if (unlikely(!cur)) { > > + RTE_LOG(ERR, VHOST_DATA, "Failed to " > > + "allocate memory for mbuf.\n"); > > + if (head) > > + rte_pktmbuf_free(head); > > + return NULL; > > + } > > We could always allocate the head mbuf before the loop, then we save the > following branch and make the code more streamlined. > It reminds me that this change prevents the possibility of mbuf bulk > allocation, one solution is we pass the head mbuf from an additional > parameter. Yep, that's also something I have thought of. > Btw, put unlikely before the check of mbuf_avail and checks elsewhere. I don't think so. It would benifit for the small packets. What if, however, when TSO or jumbo frame is enabled that we have big packets? --yliu