Create VIF_VHOSTUSER

https://blueprints.launchpad.net/nova/+spec/vif-vhostuser

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.

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 NFV applications. (This is the reason that vhost-user was developed.)

Proposed change

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.

Alternatives

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

None.

REST API impact

None.

Security impact

None.

Notifications impact

None.

Other end user impact

None.

Performance 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.

Developer impact

None.

Implementation

Assignee(s)

Primary assignee:

Luke Gorrie <lukego>

Other contributors:

m.paolino

Work Items

  • Add vhost-user support to the Libvirt driver.

  • Add VIF_VHOSTUSER support to Nova.

Dependencies

Testing

VIF_VHOSTUSER will be Tempest-tested by the planned 3rd party CI integration for the Snabb NFV mech driver.

Documentation Impact

No documentation changes for Nova are anticipated. VIF_VHOSTUSER will be automatically enabled by Neutron where appropriate.

References