We propose to add a new VIF type to support the new QEMU vhost-user feature. vhost-user is a new QEMU feature that supports efficient Virtio-net I/O between a guest and a user-space vswitch. vhost-user is the userspace equivalent to /dev/vhost-net and is based on a Unix socket for communication instead of a kernel device file.
QEMU has a new type of network interface, vhost-user, and we want to make this available to Neutron drivers. This will support deploying high-throughput userspace vswitches for OpenStack-based NFV applications. (This is the reason that vhost-user was developed.)
This change defines nova.network.model.VIF_TYPE_VHOSTUSER.
We propose to add VIF_VHOSTUSER to Nova for creating network interfaces based on vhost-user. This VIF type would be enabled by Neutron drivers that want to assign certain ports to a userspace agent (vswitch) that is based on vhost-user.
VIF_VHOSTUSER is to be implemented by extending the Libvirt driver. Libvirt support for vhost-user is currently under review and we expect it to be merged in time for Juno. We see that upstream Libvirt support for vhost-user is a dependency for merging the VIF_VHOSTUSER implementation into Nova.
Intel DPDK has a separate mechanism for accessing vhost from userspace, based on replacing /dev/vhost-net with a FUSE-based device file that traps ioctls into userspace. However, vhost-user is the new standard way to achieve this and is upstream in QEMU.
Data model impact¶
REST API impact¶
Other end user impact¶
vhost-user will make OpenStack compatible with vswitches supporting N x 10G Virtio-net workloads.
Other deployer impact¶
VIF_VHOSTUSER does not have to be enabled by the deployer. Neutron drivers will automatically enable VIF_VHOSTUSER via port binding if this is the appropriate choice for the agent on the compute host.
VIF_VHOSTUSER will require a version of QEMU with vhost-user support, which is currently upstream and will be released in QEMU 2.1.
VIF_VHOSTUSER will also require a version of Libvirt with vhost-user support.
- Primary assignee:
Luke Gorrie <lukego>
- Other contributors:
Add vhost-user support to the Libvirt driver.
Add VIF_VHOSTUSER support to Nova.
Libvirt must add support for vhost-user. Current patch under review: http://www.redhat.com/archives/libvir-list/2014-July/msg00111.html
VIF_VHOSTUSER will enable the Neutron driver for Snabb NFV: https://blueprints.launchpad.net/neutron/+spec/snabb-nfv-mech-driver http://snabb.co/nfv.html http://github.com/SnabbCo/snabbswitch
VIF_VHOSTUSER will be Tempest-tested by the planned 3rd party CI integration for the Snabb NFV mech driver.
No documentation changes for Nova are anticipated. VIF_VHOSTUSER will be automatically enabled by Neutron where appropriate.
Snabb NFV (initial vswitch supporting vhost-user): http://snabb.co/nfv.html
Deutsche Telekom TeraStream project (initial user of VIF_VHOSTUSER): http://blog.ipspace.net/2013/11/deutsche-telekom-terastream-designed.html
Discussion from NFV BoF (Atlanta) etherpad: https://etherpad.openstack.org/p/juno-nfv-bof