https://blueprints.launchpad.net/fuel/+spec/support-dpdk
In order to get as close to wire-line speed as possible for virtual machines, we want to install and utilize OVS with DPDK on some compute nodes.
DPDK-backed OpenVSwitch and vhostuser features are fully merged in OpenStack Mitaka. With this set of features operator could achieve a boost to the networking performance, and unlike SR-IOV, operator can still control traffic via OpenFlow rules.
Enabling DPDK requires:
On Nodes tab, in Interfaces configuration screen for every interface or bond should be checkbutton to enable DPDK on network interface. It will be shown only if interface is DPDK-capable:
For bond, it will be shown only if all bonded interfaces are DPDK-capable:
Only Private network with VLAN segmentation could be placed on DPDK enabled interface or bond.
If no networks is placed on DPDK interface, that means that no changes should be done in deployment.
These validations should be done both on UI and in API.
The nailgun-agent should collect and send information information about PCI-ID of NIC. This information should be passed to nailgun in the next format
{
"meta": {
"interfaces": [
{
"pci_id": String,
"numa_node": Number
}
]
}
The nailgun will compare PCI-ID against hardcoded into openstack.yaml list of supported hardware. List of supported hardware should also сontains dpdk driver name for every PCI-ID, that used in network scheme
dpdk_hw:
igb_uio: [8086:1010, 8086:1012, ... ]
<dpdk_driver>: <LIST OF PCI-IDS>
Next DPDK-related information is stored in interface_properties field of NodeNICInterface:
DPDK availability should be calculated for node when it’s added to environment.
Data model for interface_properties should look like this
[
{
"interface_properties" : {
"dpdk" : {
"enabled": Boolean or null,
"available": Boolean
},
"pci_id": String,
"numa_node": Number
}
}
]
For bond interface, only dpdk dict is needed.
When operator configures interface as DPDK to use it for Private network, astute.yaml will be extended as following
Node-level parameter enabled will enable DPDK in OpenVSwitch on node. Other parameters should be defined and provided by HugePages and NUMA/CPU pinning features
dpdk:
enabled: True
ovs_core_mask: 0x4
ovs_pmd_core_mask: 0x6
ovs_socket_mem: 128,128,128,128
Network transformations should include vendor specific attrubute datapath_type: netdev to br-prv bridge:
network_scheme:
transformations:
- action: add-br
name: br-prv
provider: ovs
vendor_specific:
datapath_type: netdev
Interface should be added using add-port action with provider dpdkovs directly into OVS br-prv bridge:
network_scheme:
transformations:
- action: add-port
name: enp1s0f0
bridge: br-prv
provider: dpdkovs
Bond should be added using add-bond action with provider dpdkovs directly into OVS br-prv bridge:
network_scheme:
transformations:
- action: add-bond
bridge: br-prv
provider: dpdkovs
bond_properties:
mode: balance-rr
interfaces:
- enp1s0f0
- enp1s0f1
name: bond0
New vendor specific attribute dpdk_driver should be added from hardcoded list of supported hardware (described above):
network_scheme:
interfaces:
enp1s0f0:
vendor_specific:
bus_info: '0000:01:00.0'
driver: ixgbe
dpdk_driver: uio_igb
Only payload for interfaces and node agent API handlers will be changed as described in Nailgun-agent and Data model sections.
User will able to modify DPDK enablement on interface and network assignment it with fuel node –network –download/–upload because of REST API payload changes. No changes required in client.
None
Fuel library will consume data from astute.yaml.
To achieve the same networking performance SR-IOV could be used. Comparing to it, DPDK allows to use experimental Security Groups engine.
None
None
None
User interface impact is described in Web UI section.
Performance penalties are not expected.
This feature will require to use VLAN segmentation and dedicated DPDK capable network interface for Private network.
None
This feature will be tested on virtual environment.
TBD
This feature depends on HugePages and NUMA/CPU pinning features.
User should be able to deploy compute nodes with network interface in DPDK mode, and boot a VM with vhostuser and HugePages enabled.