Proposed F19 Feature: Multiqueue virtio-net

Jaroslav Reznik jreznik at redhat.com
Tue Jan 29 15:06:58 UTC 2013


= Features/MQ virtio net =
https://fedoraproject.org/wiki/Features/MQ_virtio_net

Feature owner(s): Jason Wang <jasowang at redhat.com> 

Multiqueue virtio-net provides an approach that scales the network performance 
as the increasing of the number of vcpus by allowing them to transfer packets 
through more than one virtqueue pairs. 

== Detailed description ==
Today's high-end server have more processors, guests running on them tend have 
an increasing number of vcpus. The scale of the protocol stack in guest in 
restricted because of the single queue virtio-net:

* The network performance does not scale as the number of vcpus increasing: 
Guest can not transmit or retrieve packets in parallel as virtio-net have only 
one TX and RX, virtio-net drivers must be synchronized before sending and 
receiving packets. Even through there's software technology to spread the 
loads into different processor such as RFS, such kind of method is only for 
transmission and is really expensive in guest as they depends on IPI which may 
brings extra overhead in virtualized environment.
* Multiqueue nic were more common used and is well supported by linux kernel, 
but current virtual nic can not utilize the multi queue support: the tap and 
virtio-net backend must serialize the co-current transmission/receiving 
request comes from different cpus. 

In order the remove those bottlenecks, we must allow the paralleled packet 
processing by introducing multi queue support for both back-end and guest 
drivers. Ideally, we may let the packet handing be done by processors in 
parallel without interleaving and scale the network performance as the number 
of vcpus increasing.

The following parts were changed to parallize the packet processing:

* tuntap: convert the driver to multiqueue by allowing multiple socket/fd to 
be attached to the device, each socket/fd exposed by the device could be 
treated as a queue.
* qemu:
 * net: Add multiple queue infrastructure to qemu
 * let qemu can create multiple vhost threads for a virtio-net device
 * userspace multiple queue virtio-net
* guest driver: let the driver can use multiple virtqueues to do packet 
sending/receiving.


More information about the devel-announce mailing list