From 009ddf9861635c8ae6f587366e1587824bc2a9c0 Mon Sep 17 00:00:00 2001 From: Dmitry Teselkin Date: Wed, 19 Oct 2016 17:35:48 +0300 Subject: [PATCH] Multiqueue support for NFV Change-Id: I898cf3a2fd1809f388d021fa3d3ce596ff860407 blueprint: multiqueue-support-nfv --- specs/11.0/multiqueue-support-nfv.rst | 271 ++++++++++++++++++++++++++ 1 file changed, 271 insertions(+) create mode 100644 specs/11.0/multiqueue-support-nfv.rst diff --git a/specs/11.0/multiqueue-support-nfv.rst b/specs/11.0/multiqueue-support-nfv.rst new file mode 100644 index 00000000..5e7a5aa2 --- /dev/null +++ b/specs/11.0/multiqueue-support-nfv.rst @@ -0,0 +1,271 @@ +.. + This work is licensed under a Creative Commons Attribution 3.0 Unported + License. + + http://creativecommons.org/licenses/by/3.0/legalcode + +==================================================== +Improve NFV workload performance with multiq support +==================================================== + +https://blueprints.launchpad.net/fuel/+spec/multiqueue-support-nfv + + +-------------------- +Problem description +-------------------- + +Today’s high-end servers have more processors, and guests running on them +often have an increasing number of vCPUs. In a single virtio-net queue, the +scale of the protocol stack in a guest is restricted, as the network +performance does not scale as the number of vCPUs increases. Guests cannot +transmit or retrieve packets in parallel, as virtio-net has only one TX and +RX queue. + +Multiqueue virtio-net provides the greatest performance benefit when: + +* Traffic packets are relatively large. + +* The guest is active on many connections at the same time, with traffic + running between guests, guest to host, or guest to an external system. + +* The number of queues is equal to the number of vCPUs. This is because + multi-queue support optimizes RX interrupt affinity and TX queue selection + in order to make a specific queue private to a specific vCPU. + +There is a spec `Libvirt: virtio-net multiqueue`_ implemented that adds +support for mutliqueue feature in OpenStack, now we need to add support +on packages level. To achieve this we need the following packages together: + +* qemu 2.5 + +* libvirt 1.3.1 + +* openvswitch 2.5 + +* dpdk 2.2 + +These packages availabe in Ubuntu 16.04 out of the box (thus MOS-10 will not +need any additional actions except QA), but need backporting in case of +Ubuntu 14.04 (which is a base system in MOS 9.x). The good thing is that +backported packages were already tested as part of optional 'NFV feature +support'. + +---------------- +Proposed changes +---------------- + +Integrate packages from 'feature/nfv' branch into main 9.0 development branch +and verify that they work as expected. + +To enable the feature from OpenStack side additional parameter should be +added to image properties, like shown below: + + ..code-block:: text + + hw_vif_multiqueue_enabled=true|false (default false) + +Currently, the number of queues will match the number of vCPUs, defined for +the instance. + +..note:: Virtio-net multiqueue should be enabled in the guest OS manually, + using ethtool. For example: + + ..code-block:: text + + ethtool -L combined #num_of_queues + + +Web UI +====== + +None + +Nailgun +======= + +None + + +Data model +---------- + +None + + +REST API +-------- + +None + + +Orchestration +============= + +None + + +RPC Protocol +------------ + +None + + +Fuel Client +=========== + +None + + +Plugins +======= + +Networking-related plugins might face issues with new packages. + + +Fuel Library +============ + +None + + +------------ +Alternatives +------------ + +There is no other way than upgrade to the packages that provide multiqueue +functionality. + + +-------------- +Upgrade impact +-------------- + +Upgrading QEMU requires every guest VM was stopped and started again (not +rebooted). + + +--------------- +Security impact +--------------- + +None + + +-------------------- +Notifications impact +-------------------- + +None + + +--------------- +End user impact +--------------- + +None + + +------------------ +Performance impact +------------------ + +Improves NFV performance. + + +----------------- +Deployment impact +----------------- + +None + + +---------------- +Developer impact +---------------- + +None + + +--------------------- +Infrastructure impact +--------------------- + +None + + +-------------------- +Documentation impact +-------------------- + +None + + +-------------- +Implementation +-------------- + +Assignee(s) +=========== + +Primary assignee: + `Dmitry Teselkin`_ + +Other contributors: + `Ivan Suzdal`_ + +Mandatory design review: + `Dmitry Klenov`_ + + +Work Items +========== + +* Move every package from 'feature/nfv' into 9.0 branch, merge and build + packages. + + +Dependencies +============ + +None + + +------------ +Testing, QA +------------ + +* Verify that new set of packages doesn't introduce any regressions. + +* Verify that vhost-user network works in OpenStack + + +Acceptance criteria +=================== + +* The following packages available in 9.2 repository: + + * qemu - 2.5 + + * libvirt - 1.3.1 + + * openvswitch - 2.5 + + * dpdk - 2.2 + + * dependencies for the packages above + +* MOS 9.2 uses updated packages by default + +* Multiqueue support with vhost user in OpenStack + + +---------- +References +---------- + +.. _`Dmitry Teselkin`: https://launchpad.net/~teselkin-d +.. _`Ivan Suzdal`: https://launchpad.net/~isuzdal +.. _`Dmitry Klenov`: https://launchpad.net/~dklenov +.. _`Vladimir Khlyunev`: https://launchpad.net/~vkhlyunev +.. _`Libvirt: virtio-net multiqueue`: https://specs.openstack.org/openstack/nova-specs/specs/liberty/implemented/libvirt-virtiomq.html