attaching interface with q35 machine type fails with "No mode available PCI slots"
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
tripleo |
Fix Released
|
Undecided
|
Martin Schuppert |
Bug Description
Using q35 machine type, tempest.
tempest.
Details: Failed to attach network adapter device to 483cfa3d-
Seen in a 1 controller 1 compute ML2/OVS with VXLAN tunnels deployment
Digging in nova logs shows:
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
2019-05-31 21:18:22.391 7 ERROR nova.virt.
tl;dr — The immediate "fix" is to make TripleO configure the
default allows hotplugging only _one_ PCIe device.
Long
----
(*) Firstly, the Tempest test[1],
test_
to hot-plug *three* network interfaces:
[...]
try:
iface = self._test_
[...]
iface = self._test_
iface = self._test_
ifs.append(iface)
[...]
(*) We're here using 'q35' machine type, which by default allows only a
*single* PCIe device to be hotplugged. And Nova currently sets
'num_
but as the previous point showed, the test is hot-plugging _3_
interfaces.
And as the libvirt document[2] states: "If you plan to hotplug more
than a single PCI Express device, you should add a suitable number
of pcie-root-port controllers when defining the guest".
(*) But the next question is: "Why does the test work with 'pc'
machine type, then?" It works because, with 'pc' (or 'i440fx'),
"each of the 31 slots (from 0x01 to 0x1f) on the pci-root controller
is hotplug capable and can accept a legacy PCI device"[3].
[1] https:/
[2] https:/
[3] https:/
Next Steps
----------
- Immediately, make TripleO increment the no. of 'num_pcie_ports' to 16.
- Long-term, write-up a spec-less Blueprint for allowing this via
flavor and image metadata property (e.g. "hw_num_
Changed in tripleo: | |
assignee: | nobody → Martin Schuppert (mschuppert) |
Fix proposed to branch: master /review. opendev. org/663261
Review: https:/