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.
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ı, 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.
Aşağıdaki üreticilerin çalışmaları bilinmektedir:
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’i etkinleştirmek için aşağıdaki adımlar gereklidir:
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.
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.
SR-IOV ve VT-d’nin BIOS’ta etkinleştirildiğinden emin olun.
Çekirdek parametrelerine, örneğin GRUB kullanarak, intel_iommu=on
ekleyerek Linux’ta IOMMU’yu etkinleştirin.
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
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
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.
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.
Değişikliklerin etki etmesi için nova-compute
servisini yeniden başlatın.
sriovnicswitch``i mekanizma sürücüsü olarak ekleyin. Her denetleyicide ``ml2_conf.ini
dosyasını düzenleyin:
mechanism_drivers = openvswitch,sriovnicswitch
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
neutron-server
servisini yeniden başlatın.
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
nova-scheduler
servisini yeniden başlatın.
SR-IOV ajanını kurun.
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
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
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.
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:
Problemi açıklayan ek bilgi için, bakınız: Sanal anahtarlama teknolojileri ve Linux köprüsü.
Her bir hesaplama düğümünde ovs_agent.ini
veya linuxbridge_agent.ini
dosyasını düzenleyin. Örneğin:
[agent]
extensions = fdb
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
Yapılandırma tamamlandığında, SR-IOV bağlantı noktaları ile sunucuları başlatabilirsiniz.
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 }'`
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 }'`
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 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:
InfiniBand etkin ağ adaptörlerini kullanın.
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.
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
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.
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.