[dpdk-dev] [PATCH v11 0/9] implement packed virtqueues

Maxime Coquelin maxime.coquelin at redhat.com
Mon Dec 3 16:34:44 CET 2018

On 12/3/18 4:29 PM, Jens Freimann wrote:
> On Mon, Dec 03, 2018 at 03:15:06PM +0100, Jens Freimann wrote:
>> This is a basic implementation of packed virtqueues as specified in the
>> Virtio 1.1 draft. A compiled version of the current draft is available
>> at https://github.com/oasis-tcs/virtio-docs.git (or as .pdf at
>> https://github.com/oasis-tcs/virtio-docs/blob/master/virtio-v1.1-packed-wd10.pdf 
>> A packed virtqueue is different from a split virtqueue in that it
>> consists of only a single descriptor ring that replaces available and
>> used ring, index and descriptor pointers.
>> Each descriptor is readable and writable and has a flags field. These 
>> flags
>> will mark if a descriptor is available or used.  To detect new 
>> available descriptors
>> even after the ring has wrapped, device and driver each have a
>> single-bit wrap counter that is flipped from 0 to 1 and vice versa 
>> every time
>> the last descriptor in the ring is used/made available.
>> With this patch set I see a slight performance drop compared to split
>> virtqueues. I tested according to
>> http://doc.dpdk.org/guides/howto/pvp_reference_benchmark.html and I see
>> a small performance drop of 3-4 percent in PVP and and similar numbers
> It's actually bigger with mergeable rx buffers turned off. I measured
> 13% less mpps with packed virtqueues.

That's interesting. I just tried Rxonly micro-benchmark, and I get 
almost same perf for mrg and non-mrg cases:
MRG ON: 14.45Mpps
MRG OFF: 14.57Mpps

> regards,
> Jens

More information about the dev mailing list