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 <NIC> 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