SR-IOV

SR-IOV

Bu sayfanın amacı, OpenStack’da (OpenStack Ağ Kullanımı) kullanılabilen SR-IOV işlevselliğini nasıl etkinleştireceğinizi açıklamaktır. Bu işlevsellik ilk olarak OpenStack Juno sürümünde tanıtıldı. Bu sayfa, SR-IOV portları oluşturmak için OpenStack Networking ve OpenStack Compute’yi nasıl yapılandıracağınız konusunda bir rehber görevi görmeyi amaçlamaktadır.

Temeller

Juno’dan bu yana OpenStack’de PCI-SIG Tek Kök G / Ç Sanallaştırma ve Paylaşım (SR-IOV) işlevi bulunmaktadır. SR-IOV belirtimi, PCIe aygıtlarını sanallaştırmak için standartlaştırılmış bir mekanizmayı tanımlar. Bu mekanizma, tek bir PCIe Ethernet denetleyicisini birden çok PCIe aygıtı olarak görünecek şekilde sanal hale getirebilir. Her cihaz, bir sunucuya hipervizör ve sanal anahtar katmanını atlayarak doğrudan atanabilir. Sonuç olarak, kullanıcılar düşük gecikmeli ve yakın hat tel hızı elde edebiliyorlar.

Bu belge boyunca aşağıdaki terimler kullanılır:

Dönem Açıklama
PF Fiziksel İşlev. SR-IOV’i destekleyen fiziksel Eternet denetleyicisi.
VF Sanal Fonksiyon. Fiziksel Eternet denetleyiciden oluşturulmuş sanal PCIe aygıtı.

SR-IOV ajanı

SR-IOV ajanı, bağlantı noktalarının yönetici durumunu ayarlamanızı, bağlantı güvenliği yapılandırmanızı (sahte denetimin etkinleştirilmesini ve devre dışı bırakılmasını) ve QoS hızı sınırlamasını yapılandırmanızı sağlar. SR-IOV bağlantı noktası kullanarak her hesaplama düğümüne SR-IOV aracısını eklemelisiniz.

Not

SR-IOV ajanı Mitaka’dan önce isteğe bağlıydı ve Liberty’den önce varsayılan olarak etkinleştirilmemişti.

Not

Bağlantı noktası güvenliği ve QoS hız limit ayarlarını kontrol etme olanağı Liberty’de eklendi.

Desteklenen Eternet denetleyiciler

Aşağıdaki üreticilerin çalışmaları bilinmektedir:

  • Intel
  • Mellanox
  • QLogic

Mellanox SR-IOV Ethernet ConnectX-3/ConnectX-3 Pro cards ile ilgili daha fazla bilgi için, bakınız Mellanox: SR-IOV VFler Nasıl Yapılandırılır.

QLogic SR-IOV Ethernet kartları ile ilgili daha fazla bilgi için, bakınız SR-IOV Yapılandırması ile OpenStack Yayına alma Kullanıcı Kılavuzu.

SR-IOV arabirimleri kullanma

SR-IOV’i etkinleştirmek için aşağıdaki adımlar gereklidir:

  1. Sanal İşlevler Oluştur (Hesaplama)
  2. Nova-compute’de PCI aygıtlarını beyaz listeye al (Hesaplama)
  3. Neutron-server’ı yapılandır (Denetleyici)
  4. Nova-scheduler’ı yapılandır (Denetleyici)
  5. Neutron sriov-agent’ı etkinleştir (Hesaplama)

Ayrım için VLAN sağlayıcı ağları kullanmanızı öneririz. Böylece, SR-IOV bağlantı noktaları olmayan sunucuları ve SR-IOV portlu sunucuları tek bir ağda birleştirebilirsiniz.

Not

Bu rehber boyunca, PF olarak eth3 ve VLAN aralığı olarak yapılandırılmış sağlayıcı ağı olarak physnet2 kullanılır. Bu bağlantı noktaları farklı ortamlarda değişiklik gösterebilir.

Sanal İşlevler Oluştur (Hesaplama)

SR-IOV için kullanılacak ağ arabirimi için VF’ler oluşturun. Ayrıca, VLAN sağlayıcı ağının arayüzü olarak kullanılan ve tüm makinelerin özel ağlarına erişimi olan PF olarak eth3 kullanıyoruz.

Not

Adımlar, bir Intel sisteminde Mellanox ConnectX-4 ve daha yeni/Intel SR-IOV Ethernet kartlarını kullanarak VF’lerin nasıl oluşturulacağını açıklar. Adımlar, farklı donanım yapılandırmaları için farklılık gösterebilir.

  1. SR-IOV ve VT-d’nin BIOS’ta etkinleştirildiğinden emin olun.

  2. Çekirdek parametrelerine, örneğin GRUB kullanarak, intel_iommu=on ekleyerek Linux’ta IOMMU’yu etkinleştirin.

  3. Her hesaplama düğümünde, PCI SYS arayüzü vasıtasıyla VF’leri oluşturun:

    # echo '8' > /sys/class/net/eth3/device/sriov_numvfs
    

    Not

    Bazı PCI aygıtlarında, VF miktarını değiştirirken Cihaz veya kaynak meşgul hatası alırsınız. Bu durumda, öncelikle sriov_numvfs 0 olarak ayarlamanız ve daha sonra yeni değerinize ayarlamanız gerekir.

    Uyarı

    Alternatif olarak, ağ arabiriminizin çekirdek modülüne `` max_vfs`` vererek VF’ler oluşturabilirsiniz. Bununla birlikte, max_vfs parametresi kullanımdan kaldırılmıştır, bu nedenle PCI SYS arayüzü tercih edilen yöntemdir.

    Bir PF’nin destekleyebileceği maksimum VF sayısını belirleyebilirsiniz:

    # cat /sys/class/net/eth3/device/sriov_totalvfs
    63
    
  4. VF’lerin oluşturulduğunu ve ayakta durumda olduğunu doğrulayın:

    # lspci | grep Ethernet
    82:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
    82:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
    82:10.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    82:10.2 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    82:10.4 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    82:10.6 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    82:11.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    82:11.2 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    82:11.4 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    82:11.6 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    
    # ip link show eth3
    8: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
       link/ether a0:36:9f:8f:3f:b8 brd ff:ff:ff:ff:ff:ff
       vf 0 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 1 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 2 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 4 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 5 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 6 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 7 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
    

    Arabirimler kapalıysa, bir konuk başlatmadan önce bunları ayakta olarak ayarlayın, aksi halde sunucu oluşturulamayacaktır:

    # ip link set eth3 up
    
  5. Yeniden başlatıldığında kalıcı olacak şekilde oluşturulan VFler:

    # echo "echo '7' > /sys/class/net/eth3/device/sriov_numvfs" >> /etc/rc.local
    

    Not

    PCI SYS ayarlarını kalıcı kılmak için önerilen yol sysfsutils aracıdır. Ancak, bu, birçok ana dağıtımda varsayılan olarak kullanılamaz.

Beyaz liste PCI aygıtları nova-compute (Hesaplama)

  1. nova-compute servisinin hangi PCI aygıtlarını kullanabileceğini yapılandır. nova.conf dosyasını düzenle:

    [default]
    pci_passthrough_whitelist = { "devname": "eth3", "physical_network": "physnet2"}
    

    Bu, Hesaplama servisine, eth3‘e ait tüm VF’lerin sunuculara bağlanmasına ve sağlayıcı ağı ``physnet2``ye ait olmasına izin verildiğini bildirir.

    Alternatif olarak, pci_passthrough_whitelist parametresi de beyaz listeyi şu şekilde desteklemektedir:

    • PCI adresi: Adres, lspci ile aynı sözdizimini kullanır ve herhangi bir şey eşleştirmek için bir yıldız (*) kullanılabilir.

      pci_passthrough_whitelist = { "address": "[[[[<domain>]:]<bus>]:][<slot>][.[<function>]]", "physical_network": "physnet2" }
      

      Örneğin, herhangi bir alana, 0a, 00 numaralı yuvaya ve tüm işlevlere uyacak şekilde:

      pci_passthrough_whitelist = { "address": "*:0a:00.*", "physical_network": "physnet2" }
      
    • PCI vendor_id ve product_id Linux yardımcı programı lspci tarafından görüntülenir.

      pci_passthrough_whitelist = { "vendor_id": "<id>", "product_id": "<id>", "physical_network": "physnet2" }
      

    PCI adresi veya devname ile tanımlanan cihaz SR-IOV PF’ye karşılık gelirse, PF altındaki tüm VF’ler girişi eşleştirir. Her bir ana makine için birden fazla pci_passthrough_whitelist girişi desteklenir.

  2. Değişikliklerin etki etmesi için nova-compute servisini yeniden başlatın.

Neutron-server’ı yapılandır (Denetleyici)

  1. sriovnicswitch``i mekanizma sürücüsü olarak ekleyin. Her denetleyicide ``ml2_conf.ini dosyasını düzenleyin:

    mechanism_drivers = openvswitch,sriovnicswitch
    
  2. neutron-server servisine parametre olarak ml2_conf_sriov.ini dosyasını ekleyin. SR-IOV yapılandırma dosyasını yüklemek için neutron-server servisini yapılandırmak için uygun başlatma komut dosyasını düzenleyin:

    --config-file /etc/neutron/neutron.conf
    --config-file /etc/neutron/plugin.ini
    --config-file /etc/neutron/plugins/ml2/ml2_conf_sriov.ini
    
  3. neutron-server servisini yeniden başlatın.

Nova-scheduler’ı yapılandır (Denetleyici)

  1. Varsayılan olarak PciPassthroughFilter işlevini etkinleştirmek için nova-scheduler hizmetini çalıştıran her denetleyici düğümünde, scheduler_default_filters``e ``PciPassthroughFilter ekleyin. Ayrıca, Hesaplama servisi tarafından sağlanan tüm filtreleri etkinleştirmek için, nova.conf içindeki `` [DEFAULT] `` bölümünün scheduler_available_filters parametresinin all_filters olarak ayarlanmasını sağlayın.

    [DEFAULT]
    scheduler_default_filters = RetryFilter, AvailabilityZoneFilter, RamFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, ServerGroupAntiAffinityFilter, ServerGroupAffinityFilter, PciPassthroughFilter
    scheduler_available_filters = nova.scheduler.filters.all_filters
    
  2. nova-scheduler servisini yeniden başlatın.

Neutron sriov-agent’ı etkinleştir (Hesaplama)

  1. SR-IOV ajanını kurun.

  2. Her hesaplama düğümü üzerinde sriov_agent.ini dosyasını düzenleyin. Örneğin:

    [securitygroup]
    firewall_driver = neutron.agent.firewall.NoopFirewallDriver
    
    [sriov_nic]
    physical_device_mappings = physnet2:eth3
    exclude_devices =
    

    Not

    physical_device_mappings parametresi fiziksel ağlar ve NIC’ler arasında 1-1 haritalama olarak sınırlandırılmamıştır. Bu, aynı fiziksel ağın birden fazla NIC’e eşlenmesini sağlar. Örneğin physnet2, eth3 ve eth4‘e bağlıysa, physnet2:eth3,physnet2:eth4 geçerli bir seçenektir.

    exclude_devices parametresi boş olduğundan, eth3 ile ilişkili tüm VF’ler ajan tarafından yapılandırılabilir. Belirli VF’leri hariç tutmak için bunları exclude_devices parametresine aşağıdaki gibi ekleyin:

    exclude_devices = eth1:0000:07:00.2;0000:07:00.3,eth2:0000:05:00.1;0000:05:00.2
    
  3. Neutron sriov ajanının başarılı bir şekilde çalıştığından emin olun:

    # neutron-sriov-nic-agent \
      --config-file /etc/neutron/neutron.conf \
      --config-file /etc/neutron/plugins/ml2/sriov_agent.ini
    
  4. Neutron sriov-agent servisini etkinleştir.

    Kaynaktan yükleme yapıyorsanız, init sistemi için bir arka plan dosyasını elle yapılandırmanız gerekir.

(Seçimli) FDB L2 ajan uzantısı

Yönlendirmeli Veri Tabanı (FDB) nüfusu, OVS aracısı veya Linux köprüsüne yönelik bir L2 aracı uzantısıdır. Amacı normal port kullanarak mevcut sunucu için FDB tablosunu güncellemektir. Bu, SR-IOV sunucuları ile normal sunucular arasındaki iletişimi sağlar. FDB nüfus uzantısı kullanım durumları şunlardır:

  • Doğrudan bağlantı noktası ve normal bağlantı noktası sunucuları aynı hesaplama düğümüne aittir.
  • Yüzen IP adresini ve ağ düğümünü kullanan doğrudan bağlantı noktası sunucusu aynı ana bilgisayarda bulunur.

Problemi açıklayan ek bilgi için, bakınız: Sanal anahtarlama teknolojileri ve Linux köprüsü.

  1. Her bir hesaplama düğümünde ovs_agent.ini veya linuxbridge_agent.ini dosyasını düzenleyin. Örneğin:

    [agent]
    extensions = fdb
    
  2. FDB bölümünü ve shared_physical_device_mappings parametresini ekleyin. Bu parametre, her fiziksel bağlantı noktasını fiziksel ağ adına eşler. Her fiziksel ağ birkaç bağlantı noktasına eşlenebilir:

    [FDB]
    shared_physical_device_mappings = physnet1:p1p1, physnet1:p1p2
    

SR-IOV bağlantı noktalarıyla sunucuları başlatmak

Yapılandırma tamamlandığında, SR-IOV bağlantı noktaları ile sunucuları başlatabilirsiniz.

  1. SR-IOV bağlantı noktasının oluşturulmasını istediğiniz ağın ``id``sini alalım:

    $ net_id=`neutron net-show net04 | grep "\ id\ " | awk '{ print $4 }'`
    
  2. SR-IOV bağlantı noktası oluşturun. vnic_type=direct burada kullanılır, ancak diğer seçenekler normal, direct-physical ve macvtap içerir:

    $ port_id=`neutron port-create $net_id --name sriov_port --binding:vnic_type direct | grep "\ id\ " | awk '{ print $4 }'`
    
  3. Sunucuyu oluştur. NIC için ikinci adımda oluşturulan SR-IOV bağlantı noktasını belirtin:

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

    Not

    VF’leri bir sunucuya bağlamak için iki yol vardır. Bir SR-IOV bağlantı noktası oluşturabilir veya Hesaplama servisindeki pci_alias ı kullanabilirsiniz. ``pci_alias``ın kullanımı hakkında daha fazla bilgi için nova-api yapılandırması <https://docs.openstack.org/admin-guide/compute-pci-passthrough.html#configure-nova-api-controller> __.

InfiniBand ile SR-IOV

InfiniBand ile SR-IOV desteği, bir Virtual PCI aygıtının (VF) doğrudan konukla eşleştirilmesini sağlar ve böylece RDMA (uzaktan doğrudan bellek erişimi) gibi daha gelişmiş performans ve gelişmiş özellikler elde edilebilir. Bu özelliği kullanmak için şunları yapmanız gerekir:

  1. InfiniBand etkin ağ adaptörlerini kullanın.

  2. InfiniBand çatısını etkinleştirmek için InfiniBand alt ağ yöneticilerini çalıştırın.

    Tüm InfiniBand ağlarının, ağın çalışması için çalışan bir alt ağ yöneticisi olmalıdır. Bu anahtarsız iki makine basit bir ağ yaparken bile gerçeğe uygundur ve kartlar sırt sırta takılıdır. Kartlardaki bağlantıların ortaya çıkması için bir alt ağ yöneticisi gerekiyor. Birden fazla alt ağ yöneticisine sahip olmak mümkündür. Bu durumda, bunlardan biri efendi, diğerleri ise ana alt ağ yöneticisi başarısız olduğunda devralacak bir köle gibi davranır.

  3. Hesap düğümlerine ebrctl yardımcı programını kurun.

    ebrctl``nin ``/etc/nova/rootwrap.d/* dizininde bir yerde listelendiğini kontrol edin:

    $ grep 'ebrctl' /etc/nova/rootwrap.d/*
    

    Eğer ebrctl ana paket dosyalardan herhangi birinde görünmezse, /etc/nova/rootwrap.d/compute.filters dosyasına [Filters] böülümüne bunu ekleyin.

    [Filters]
    ebrctl: CommandFilter, ebrctl, root
    

Bilinen sınırlamalar

  • Hizmet Kalitesi’ni (QoS) kullanırken, max_burst_kbps (max_kbps üzerinde patlama) desteklenmez. Buna ek olarak, max_kbps, Mbps’ye yuvarlanır.

  • Güvenlik grupları SR-IOV kullanılırken desteklenmez, bu nedenle güvenlik duvarı sürücüsü devre dışı bırakılmış olmalıdır. Bu, neutron.conf dosyasında yapılabilir.

    [securitygroup]
    firewall_driver = neutron.agent.firewall.NoopFirewallDriver
    
  • SR-IOV, OpenStack Panel’e (horizon) entegre edilmedi. Kullanıcılar, SR-IOV arabirimini yapılandırmak için CLI veya API kullanmak zorundadır.

  • Canlı geçiş, SR-IOV bağlantı noktalı örnekler için desteklenmez.

    Not

    SR-IOV özellikleri satıcıya bağlı olarak belirli bir NIC sürücüsü sürümü gerektirebilir. Örneğin, Intel NIC’ler, ixgbe 4.4.6 veya daha üst sürümü ve ixgbevf 3.2.2 veya daha üst sürümü gerektirir.

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.