Overall design
1. SR-IOV NIC related Capability in Data model
This is refer to Supported HPA Capability Requirements(DRAFT)#LogicalNodei/ORequirements
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
Openstack configuration:
- NIC configuration refer to https://docs.openstack.org/neutron/pike/admin/config-sriov.html
- Create availability zone and host aggregate.
$ nova aggregate-create sriov-direct
$ nova aggregate-set-metadata sriov-direct sriov-nic=true
$ openstack flavor create m1.tiny --id auto --ram 512 --disk 20 --vcpus 2
$ openstack flavor set m1.tiny --property pci_passthrough:alias=intel-15B3-1003:2
$ openstack flavor set m1.tiny --property aggregate_instance_extra_specs:sriov-nic=true
After Openstack configs SR-IOV NIC, we will have a provider network.
- Create network and subnet:
$ openstack network create --provider-network-type vlan --provider-physical-network physnet --provider-segmentation_id 101 provider_net
$ openstack subnet create --network provider_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 provider_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.tiny --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"} |
4. ONAP Module Modify
Module Name | Modification | 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}
4.1 VF-C Modification
- When it create network, VF-C will get provider network including network_type, physical_network and segmentation_id from AAI pass it Multi-cloud .
- When we create port , we need pass vnic type to multi-cloud. so we don't modify it.
4.2 Multi-cloud Modification
https://developer.openstack.org/api-ref/network/v2/
- Multi-cloud need to get provider network information and modify all provider network information for the request of submitting to VIM.
- Multi-cloud don't modify VF-C request, just pass to VIMs, so we don't modify it.
4.3 SO Modification
Please Marcus Williams helps to update it.
4.4 OOF Modification
As we known OOF just check /cloud-infrastructure/cloud-regions/cloud-region/{cloud-owner}/{cloud-region-id}/flavors/flavor/{flavor-id}/hpa-capabilities
Now, we need OOF also check and match /cloud-infrastructure/cloud-regions/cloud-region/{cloud-owner}/{cloud-region-id}/hpa-capabilities/hpa-capability/{hpa-capability-id}
Seond, we need to add some attributes in the response returning to SO and VF-C like below.
"transactionId":"xxx-xxx-xxxx",
"requestId":"yyy-yyy-yyyy",
"requestStatus":"completed",
"statusMessage":"",
"solutions":{
"placementSolutions":[
[ { "resourceModuleName":"vG",
"serviceResourceId":"<copy from Req.>",
"solution":{
"identifierType":"cloudRegionId",
"identifiers":[ "DLLSTX1A“ ] },
"assignmentInfo":[
{ "key":"locationId",
"value":"DLLSTX1A“ },
{ "key":"locationType",
"value":"openstack-cloud“ },
{ "key":"vimId",
"value":"rackspace_DLLSTX1A" },
{ "key":"flavors",
"value":{
"flavorLabel1xxx":"vimFlavorxxx",
"flavorLabel2xxx":"vimFlavorxxx" }}
{ "key": "SRIOV-NIC"
"value":{
"interfaceType": "SR-IOV",
"providerPhyNetwork": "physnet",
"vnicType": "direct",
}
] } ] ],
}
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