[dpdk-dev] [PATCH v2 1/7] vhost: refactor rte_vhost_dequeue_burst

Xie, Huawei huawei.xie at intel.com
Mon Mar 7 03:32:46 CET 2016


On 3/4/2016 10:15 AM, Yuanhan Liu wrote:
> 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?

Prefer to favor the path that packet could fit in one mbuf.

Btw, not specially to this, return "m = copy_desc_to_mbuf(dev, vq,
desc_indexes[i], mbuf_pool)", failure case is unlikely to happen, so add
unlikely for the check if (m == NULL) there. Please check all branches
elsewhere.

> 	--yliu
>



More information about the dev mailing list