Hello,

I am trying to configure Openstack Ocata with support for SR-IOV on Intel X710 
NICs, but am struggling to launch any VMs.

I've followed the steps available at: 
https://docs.openstack.org/ocata/networking-guide/config-sriov.html, but am 
encountering an issue where my available hosts are filtered.


#####
Problem
#####

Launching a VM, configured using a port-id that uses "--binding:vnic_type 
direct" fails to launch.

#####
Details
#####

Following the guide available at

      https://docs.openstack.org/ocata/networking-guide/config-sriov.html

I have tried to enable the use of Virtual Function (VF) ports using SR-IOV on 
an on Intel X710 NIC. When I come to spin-up a VM using the steps documented, 
e.g.

      openstack server create --flavor m1.large --image cirros --nic 
port-id=$port_id test-sriov

the instantiation fails. In /var/log/nova-conductor.log, I can see: -

      2018-01-05 18:49:04.470 36491 WARNING nova.scheduler.utils 
[req-788817bb-4e78-4a1b-8bf5-240a20472cd8 0218d276a04e40ab806d4075671ef01b 
dd2323e3ab4f45f29b6e7840fb7c0d2c - - -] Failed to compute_task_build_instances: 
No valid host was found. There are not enough hosts available.
      Traceback (most recent call last):

      File "/usr/lib/python2.7/dist-packages/oslo_messaging/rpc/server.py", 
line 218, in inner
        return func(*args, **kwargs)

     File "/usr/lib/python2.7/dist-packages/nova/scheduler/manager.py", line 
98, in select_destinations
        dests = self.driver.select_destinations(ctxt, spec_obj)

     File 
"/usr/lib/python2.7/dist-packages/nova/scheduler/filter_scheduler.py", line 79, 
in select_destinations
        raise exception.NoValidHost(reason=reason)

      NoValidHost: No valid host was found. There are not enough hosts 
available.

               2018-01-05 18:49:04.471 36491 WARNING nova.scheduler.utils 
[req-788817bb-4e78-4a1b-8bf5-240a20472cd8 0218d276a04e40ab806d4075671ef01b 
dd2323e3ab4f45f29b6e7840fb7c0d2c - - -] [instance: 
f18454bb-ff7e-4171-8ebd-982197e353f7] Setting instance to ERROR state.

Note: NoValidHost: No valid host was found. There are not enough hosts 
available.

In /var/log/nova-scheduler.log I also see the following: -

               2018-01-05 18:49:04.371 37065 INFO nova.filters [...] Filter 
PciPassthroughFilter returned 0 hosts
      2018-01-05 18:49:04.372 37065 INFO nova.filters [...] Filtering removed 
all hosts for the request with instance ID 
'f18454bb-ff7e-4171-8ebd-982197e353f7'. Filter results: ['PciPassthroughFilter: 
(start: 2, end: 0)']

Initially, I felt this might be because the VM flavor used didn't have a 
"pci_passthrough:alias" value set. I've made sure to set my flavor like so: -

      
+----------------------------+--------------------------------------------------------------------+
      | Field                      | Value                                      
                        |
      
+----------------------------+--------------------------------------------------------------------+
      | OS-FLV-DISABLED:disabled   | False                                      
                        |
      | OS-FLV-EXT-DATA:ephemeral  | 0                                          
                        |
      | access_project_ids         | af8fadc445164950a6d7ad4f91e1e06b, 
dd2323e3ab4f45f29b6e7840fb7c0d2c |
      | disk                       | 5                                          
                        |
      | id                         | fc76fed6-0583-4c6b-908b-3c49d6cd6652       
                        |
      | name                       | m2.mini                                    
                        |
      | os-flavor-access:is_public | False                                      
                        |
      | properties                 | pci_passthrough:alias='a1:1'               
                        |
      | ram                        | 512                                        
                        |
      | rxtx_factor                | 1.0                                        
                        |
      | swap                       |                                            
                        |
      | vcpus                      | 1                                          
                        |
      
+----------------------------+--------------------------------------------------------------------+

where "alias" is set in /etc/nova/nova.conf on the controller as: -

      [pci]
      alias = { "vendor_id":"8086", "product_id":"154c", 
"device_type":"type-VF","name":"a1" }

I've checked the PCI details on my VF's, and they are as follows: -


      81:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller 
X710 for 10GbE SFP+ [8086:1572] (rev 01)
      81:00.1 Ethernet controller [0200]: Intel Corporation Ethernet Controller 
X710 for 10GbE SFP+ [8086:1572] (rev 01)
      81:02.0 Ethernet controller [0200]: Intel Corporation XL710/X710 Virtual 
Function [8086:154c] (rev 01)
      81:02.1 Ethernet controller [0200]: Intel Corporation XL710/X710 Virtual 
Function [8086:154c] (rev 01)
      81:02.2 Ethernet controller [0200]: Intel Corporation XL710/X710 Virtual 
Function [8086:154c] (rev 01)
      [and so on... 30x VFs in total]

As far as other configuration files look,

/etc/nova/nova.conf on the Compute is configured as so: -

      [pci]
      passthrough_whitelist ={ "devname": "enp129s0f0", "physical_network": 
"physnet2"}

the /etc/neutron/plugins/ml2/sriov_agent.ini on the Compute is configured to 
map my physical network to the NIC as follows: -

      [sriov_nic]
      physical_device_mappings =physnet2:enp129s0f0

and firewall disabled with: -

      [securitygroup]
      firewall_driver = neutron.agent.firewall.NoopFirewallDriver

/etc/neutron/plugins/ml2/ml2_conf.ini on the Controller has mechanism_drivers 
configures as: -

               mechanism_drivers = linuxbridge,sriovnicswitch


And lastly, /etc/nova/nova.conf on the Controller as the following filters set: 
-

               [DEFAULT]
      scheduler_default_filters =PciPassthroughFilter
      scheduler_available_filters = nova.scheduler.filters.all_filters

I've been investigating this for some time now, and am able to confirm that 
without pursuing the SR-IOV route I am able to create VLAN Provider networks on 
my NIC interface quite happily, and VMs can connect to them with no issue. Are 
there any obvious debugging routes I should investigate to try and resolve this?

Thanks for replies!

Ben

Ben Thomas
Senior Research Associate
UK 5G Testbeds and Trials - University of Bristol
Level 0 - Merchant Venturers Building
Woodland Road, Clifton, Bristol, BS8 1UB, United Kingdom
Email: ben.tho...@bristol.ac.uk
Smart Internet Lab<http://www.bristol.ac.uk/smart>

_______________________________________________
Mailing list: http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack
Post to     : openstack@lists.openstack.org
Unsubscribe : http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack

Reply via email to