Overall design
1. SR-IOV NIC related Capability in Data model
Logical Node i/O Requirements
Capability Name | Capability Value | Descriptiopn |
---|---|---|
pciVendorId | PCI-SIG vendor ID for the device | |
pciDeviceId | PCI-SIG device ID for the device | |
pciNumDevices | Number of PCI devices required. | |
pciAddress | Geographic location of the PCI device via the standard PCI-SIG addressing model of Domain:Bus:device:function | |
pciDeviceLocalToNumaNode | required notRequired | Determines if I/O device affinity is required. |
Network Interface Requirements
Capability Name | Capability Value | Description |
---|---|---|
nicFeature | LSO, LRO, RSS, RDMA | Long list of NIC related items such as LSO, LRO, RSS, RDMA, etc. |
dataProcessingAccelerationLibray | Dpdk_Version | Name and version of the data processing acceleration library required. Orchestration can match any NIC that is known to be compatible with the specified library. |
interfaceType | Virtio, PCI-Passthrough, SR-IOV, E1000, RTL8139, PCNET | Network interface type |
vendorSpecificNicFeature | TBA | List of vendor specific NIC related items. |
2. Openstack Config SRIOV
We can refer to https://docs.openstack.org/neutron/pike/admin/config-sriov.html
After Openstack configs SR-IOV NIC, we will have a provider network.
- Create network and subnet:
$ openstack network create --privider-network-type vlan --provider-physical-network physnet tenant_net
$ openstack subnet create --network tenant_net --subnet-range 192.168.100.0/24 subnet
2. Get the id of the neutron network where you want the SR-IOV port to be created:
$ net_id=`neutron net-show tenant_net | grep "\ id\ " | awk '{ print $4 }'`
3. Create the SR-IOV port. We specify vnic_type=direct, but other options include normal, direct-physical, and macvtap:
$ port_id=`neutron port-create $net_id --name sriov_port --binding:vnic_type direct | grep "\ id\ " | awk '{ print $4 }'`
4. Create the VM. For the nic we specify the SR-IOV port created in step 2:
$ nova boot --flavor m1.large --image ubuntu_14.04 --nic port-id=$port_id test-sriov
Note: VF-C will execute four steps call four times to multi-cloud. SO will execute four steps just call one times to multi-cloud.
3. AAI Presentation
PUT /cloud-infrastructure/cloud-regions/cloud-region/{cloud-owner}/{cloud-region-id}/hpa-capabilities/hpa-capability/{hpa-capability-id}
hpa-capability-id="q236fd3d-0b15-11w4-81b2-6210efc6dff9",
hpa-feature=”pciePassthrough”,
architecture=”{hw_arch}",
version=”v1”,
hpa-attribute-key | hpa-attribute-value |
---|---|
pciCount | {value: 1} |
pciVendorId | {value: "15B3"} |
pciDeviceId | {value: "1003"} |
interfaceType | {value: "SR-IOV"} |
providerPhyNetwork | {value: "physnet"} |
vnicType | {value: "direct"} |
availabilityZone | {value: "sriov-zone"} |
4. ONAP Module Modify
Module Name | Modify | status | owner | comments |
---|---|---|---|---|
SDC | Add SR-IOV NIC attributes. | Completed | Alex Lianhao | |
Policy | Add SR-IOV NIC attributes. | In Progress | ||
VF-C | Add create port process. | In Progress | Haibin | |
SO | Add create port process. | In Progress | ||
OOF | Add the process for cloud region HPA capabilities | In Progess | Ruoyu | |
AAI | Nothing, we just add one hpa-attribute-key and hpa-attribute-value | Completed | - | now [A] API can support. |
ESR | Add SR-IOV NIC info to cloud extra info. | In Progress | Haibin | |
Multi-cloud | Register SR-IOV info to AAI. | In Progress | Haibin | |
VIM | Config SR-IOV NIC and create network with SR-IOV NIC. | In Progress | Haibin |
[A] PUT /cloud-infrastructure/cloud-regions/cloud-region/{cloud-owner}/{cloud-region-id}/hpa-capabilities/hpa-capability/{hpa-capability-id}
Reference
https://docs.openstack.org/neutron/pike/admin/config-sriov.html
https://builders.intel.com/docs/networkbuilders/EPA_Enablement_Guide_V2.pdf of "2.3 Support for I/O Passthrough via SR-IOV"
Supported HPA Capability Requirements(DRAFT)#LogicalNodei/ORequirements