Distribute PCI Requests Across Multiple Devices


PCI requests are provisioned in a list based fashion. In SR-IOV networking devices, a set of candidate virtual functions can span multiple physical functions and physical ports. Distributing single and multiple device requests across multiple physical functions provides:

  • Better load distribution across available links.

  • Provides L2 redundancy when multiple devices are allocated on behalf of a single guest.

Problem description

Simple queue based device selection for PCI SR-IOV devices does not distribute load across physical connections nor does it permit guests to achieve L2 redundancy by requesting multiple SR-IOV based ports.

Use Cases

On systems where there is a physical function per physical network and creating an Openstack instance with multiple SR-IOV ports, spreading the port allocation across candidate physical functions provides more even device and link utilization as well as allowing guests to take advantage of L2 redundant links for bonding, etc.

Proposed change

The proposed change alters the PCI device request scheduling for PCI SR-IOV to to distribute consumption of VFs evenly across available multiple physical functions for the same associated label.

Distribution happens in best-effort fashion, so even if PCI request cannot be supported in a distributed fashion, but still could be satisfied by the current queue based allocation schema, a guest will be booted.


There are no alternatives that directly satisfy distribution of requests for more even utilization. Ensuring multiple SR-IOV device requests for a guest span multiple physical links could employ additional port detail information but would still require PCI request scheduling changes.

Link optimization could be improved by providing scheduling based on available throughput, However, this does not satisfy the physical link redundancy use case. Also, it would only work where throughput details are actually provided by the underlying device.

Data model impact

The current model should be sufficient as it contains the required bookkeeping.

REST API impact


Security impact


Notifications impact


Other end user impact


Performance Impact

There is an increase in complexity in scheduling guest creation that may increase the amount of time taken to schedule guests that are connected to multiple PCI similar SR-IOV devices. It has no effect on other cases.

Other deployer impact


Developer impact





Roman Bogorodskiy <rbogorodskiy@mirantis.com>

Work Items

  • Alter PCI device selection logic to support distribution across multiple PCI roots (physical functions)

  • Extend PCI request API to support multiple device requests.

  • Modify scheduler code to employ the new API.




The changes to the selection logic are testable through unit testing, as is the extension to the PCI request API.

Additionally, it’s intended to cover this feature with functional tests as well.

Documentation Impact