Message ID | 20181203141515.28368-1-jfreimann@redhat.com (mailing list archive) |
---|---|
Headers | show |
Series | implement packed virtqueues | expand |
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. regards, Jens
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