Files
nova-specs/specs/kilo/implemented/libvirt_vif_vhostuser.rst
Michael Still 547a3fa4fa Mark specs implemented in kilo as implemented
Just move implemented specs to the right place.

Change-Id: Ia09ed6aceb9e9874e07c740d2fe94ce1b88af9f7
2015-03-23 11:27:10 +11:00

178 lines
4.8 KiB
ReStructuredText

..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
============================================
Add VIF_VHOSTUSER vif type to libvirt driver
============================================
https://blueprints.launchpad.net/nova/+spec/libvirt-vif-vhost-user
We propose to add a new VIF type to support the new QEMU vhost-user
interface in libvirt dirver. 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.
Problem description
===================
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 applications.
There are two types of vSwitches that can use vhost-user
interface, a generic vhost-user vSwitch and ovs based one, both types
should be supported.
Use Cases
---------
This change will allow running userspace vSwitches using vhost-user
interface. Both generic vhost-user vSwitches and OVS based vSwtiches
will be supported.
Project Priority
----------------
No
Proposed change
===============
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 by using portbindings extension and setting the
vif_type to VIF_VHOSTUSER. To support both generic and ovs based
vSwitches additional information will be passed in vif_details.
For ovs based vSwitches plug/unplug methods will create/remove
an ovs port if 'vhost_user_ovs_plug' is set to True in the vif_details.
VIF_VHOSTUSER driver will allow Neutron mechanism drivers to specify
if qemu should work in server or client mode. Mechanism drivers
could pass 'vhost_user_mode' in vif_details to specify the mode.
The name of the socket will be the same as ID of the Neutron port.
For ovs based vSwitches name of the socket will be the same as name
of the ovs port.
Alternatives
------------
In Juno cycle there were two initiatives to support userspace vhost user
in Nova. One was based on vhost-user interface in Qemu the other was based
on DPDK implementation. Since DPDK is moving to support vhost-user only one
driver is needed.
Alternatively a mechanism for plugging in vif libvirt driver could be used
to support
vhost-user in libvirt driver. Such mechanism is proposed here:
https://blueprints.launchpad.net/nova/+spec/libvirt-vif-driver-plugin
Data model impact
-----------------
None.
REST API impact
---------------
None.
Security impact
---------------
None.
Notifications impact
--------------------
None.
Other end user impact
---------------------
None.
Performance Impact
------------------
Use of VIF_VHOSTUSER will have no inpact on Openstack performance.
Use of userspace vSwitch with vhost-user will improve guest network perforamce.
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.
Developer impact
----------------
None.
Implementation
==============
Assignee(s)
-----------
Primary assignee:
Przemyslaw Czesnowicz <pczesno>
Work Items
----------
* Add VIF_VHOSTUSER support to Nova.
Dependencies
============
An ml2 dpdk ovs driver is being proposed for Neutron.
This feature doesn't directly depend on it.
This feature depends on bp/virt-driver-large-pages.
Testing
=======
VIF_VHOSTUSER will be tested by 3rd party CI for the DPDK Ovs mech driver.
Documentation Impact
====================
No documentation changes for Nova are anticipated. VIF_VHOSTUSER will
be automatically enabled by Neutron where appropriate.
References
==========
* vhost-user:
http://www.virtualopensystems.com/en/solutions/guides/snabbswitch-qemu/
* Snabb NFV (initial vswitch supporting vhost-user): http://snabb.co/nfv.html
* Juno spec for VIF_VHOSTUSER:
https://review.openstack.org/#/c/96138/
* Juno spec for dpdkvhost
https://review.openstack.org/#/c/95805/4/specs/juno/libvirt-ovs-use-usvhost.rst
* Neutron dpdk-ovs mechanism driver
https://blueprints.launchpad.net/neutron/+spec/ml2-dpdk-ovs-mechanism-driver
* Blueprint for vif plugin mechanism.
https://blueprints.launchpad.net/nova/+spec/libvirt-vif-driver-plugin
* Blueprint for Hugepage support
https://blueprints.launchpad.net/nova/+spec/virt-driver-large-pages