SR-IOV

SR-IOV

Tujuan dari halaman ini adalah untuk menjelaskan cara mengaktifkan fungsi SR-IOV yang tersedia di OpenStack (menggunakan OpenStack Networking). Fungsi ini pertama kali diperkenalkan di rilis OpenStack Juno. Halaman ini bermaksud untuk membantu sebagai panduan untuk mengetahui cara bagaimana mengkonfigurasi OpenStack Networking dan OpenStack Compute untuk membuat port SR-IOV.

Dasar

PCI-SIG Single Root I/O Virtualization dan Sharing (SR-IOV) secara fungsional tersedia dalam OpenStack sejak rilis Juno. Spesifikasi SR-IOV mendefinisikan mekanisme standar untuk virtualisasi perangkat PCIe. Mekanisme ini dapat virtualisasi PCIe Ethernet controller tunggal akan terlihat sebagai beberapa perangkat PCIe. Setiap perangkat dapat langsung ditugaskan ke sebuah instance, denganmelewati hypervisor dan virtual switch layer. Akibatnya, pengguna dapat mencapai latency rendah dan kecepatan kawat near-line.

Istilah berikut digunakan di seluruh dokumen ini:

Term Definition
PF Physical Function. Physical Ethernet controller yang mendukung SR-IOV.
VF Virtual Function. Perangkat PCIe virtual yang terbuat dari physical Ethernet controller.

Agen SR-IOV

Agen SR-IOV memungkinkan Anda untuk mengatur kondisi admin port, mengkonfigurasi keamanan port (mengaktifkan dan menonaktifkan pengecekan spoof), dan mengkonfigurasi pembatasan tingkat QoS. Anda harus menyertakan agen SR-IOV pada setiap node komputasi menggunakan port SR-IOV.

Catatan

Agen SR-IOV sebagai opsional sebelum Mitaka, dan tidak diaktifkan secara default sebelum Liberty.

Catatan

Kemampuan untuk mengontrol pengaturan batas keamanan port dan tingkat QoS ditambahkan di Liberty.

Ethernet controller yang didukung

Produsen berikut diketahui bekerja:

  • Intel
  • Mellanox
  • QLogic

Untuk informasi tentang Mellanox SR-IOV Ethernet ConnectX-3/ConnectX-3 Pro cards, lihat Mellanox: How To Configure SR-IOV VFs.

Untuk informasi tentang QLogic SR-IOV Ethernet cards, lihat User’s Guide OpenStack Deployment with SR-IOV Configuration.

Penggunaan SR-IOV interface

Untuk mengaktifkan SR-IOV, langkah-langkah berikut ini diperlukan:

  1. BuatlahVirtual Functions (Compute)
  2. Daftarlah (whitelist) perangkat PCI di nova-compute (Compute)
  3. Lakukan konfigurasi neutron-server (Controller)
  4. Lakukan konfigurasi nova-scheduler (Controller)
  5. Aktifkan neutron sriov-agent (Compute)

Kami merekomendasikan penggunaan jaringan provider VLAN untuk pemisahan. Dengan cara ini Anda dapat menggabungkan instance tanpa port SR-IOV dan instance dengan port SR-IOV pada jaringan tunggal.

Catatan

Dalam panduan ini, eth3 digunakan sebagai PF dan physnet2 digunakan sebagai jaringan penyedia yang dikonfigurasi sebagai rentang VLAN. Port ini dapat bervariasi dalam lingkungan yang berbeda.

BuatlahVirtual Functions (Compute)

Buat VF untuk antarmuka jaringan yang akan digunakan untuk SR-IOV. Kami menggunakan eth3 sebagai PF, yang juga digunakan sebagai antarmuka untuk jaringan penyedia VLAN dan memiliki akses ke jaringan private dari semua mesin.

Catatan

Langkah-langkah rinci bagaimana untuk membuat VF menggunakan kartu Mellanox ConnectX-4 dan kartu Intel SR-IOV Ethernet atau yang lebih baru pada sistem Intel. Langkah inimungkin berbeda untuk konfigurasi hardware yang berbeda.

  1. Pastikan SR-IOV dan VT-d diaktifkan di BIOS.

  2. Aktifkan IOMMU di Linux dengan menambahkan intel_iommu = on dengan parameter kernel, misalnya, menggunakan GRUB.

  3. Pada setiap node komputasi, buatlah VF melalui antarmuka PCI SYS:

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

    Catatan

    Pada beberapa perangkat PCI, amati bahwa ketika mengubah jumlah VF dimana Anda menerima kesalahan Device or resource busy. Dalam hal ini, Anda harus terlebih dahulu menetapkan sriov_numvfs ke 0, kemudian set ke nilai baru Anda.

    Peringatan

    Atau, Anda dapat membuat VF dengan melewatkan max_vfs ke modul kernel dari antarmuka jaringan Anda. Namun, parameter max_vfs telah usang, sehingga interface PCI SYS menjadi metode yang disukai.

    You can determine the maximum number of VFs a PF can support:

    # cat /sys/class/net/eth3/device/sriov_totalvfs
    63
    
  4. Pastikan bahwa VF telah dibuat dan dalam keadaan up:

    # 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
    

    Jika interface turun, aturlah mereka ke up sebelum meluncurkan guest (tamu), jika instance akan gagal berkembangan (spawn):

    # ip link set eth3 up
    
  5. Pertahankan VF yang dibuat ketika reboot:

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

    Catatan

    Cara yang disarankan untuk membuat pengaturan PCI SYS persisten adalah melalui alat sysfsutils. Namun, ini tidak tersedia secara default pada banyak distribusi utama.

Daftarlah (whitelist) perangkat PCI nova-compute (Compute)

  1. Lakukan konfigurasi dimana perangkat PCI layanan nova-compute dapat menggunakannya. Edit file nova.conf:

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

    Ini memberitahu layanan Compute dimana semua VF milik eth3 diizinkan untuk dilewatkan ke instance dan menjadi milik jaringan penyedia physnet2.

    Atau dengan parameter pci_passthrough_whitelist juga mendukung daftar putih (whitelisting):

    • Alamat PCI: alamat menggunakan sintaks yang sama seperti dalam lspci dan tanda bintang (*) dapat digunakan untuk mencocokkan apa pun.

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

      Misalnya, untuk mencocokkan domain apapun, bus 0a, slot 00, dan semua fungsi:

      pci_passthrough_whitelist = { "address": "*:0a:00.*", "physical_network": "physnet2" }
      
    • PCI vendor_id dan product_id seperti yang ditampilkan oleh utilitas Linux lspci.

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

    Jika perangkat didefinisikan oleh alamat PCI atau devname sesuai dengan SR-IOV PF, semua VF bawah PF akan cocok dengan entri. Beberapa entri pci_passthrough_whitelist per host didukungnya.

  2. Restart layanan nova-compute agar perubahan berlaku.

Lakukan konfigurasi neutron-server (Controller)

  1. Tambahkan sriovnicswitch sebagai driver mekanisme. Edit file ml2_conf.ini pada setiap controller:

    mechanism_drivers = openvswitch,sriovnicswitch
    
  2. Tambahkan file ml2_conf_sriov.ini sebagai parameter untuk layanan neutron-server. Edit script inisialisasi yang tepat untuk mengkonfigurasi layanan neutron-server untuk memuat file konfigurasi SR-IOV:

    --config-file /etc/neutron/neutron.conf
    --config-file /etc/neutron/plugin.ini
    --config-file /etc/neutron/plugins/ml2/ml2_conf_sriov.ini
    
  3. Restart layanan neutron-server.

Lakukan konfigurasi nova-scheduler (Controller)

  1. Pada setiap controller node yang menjalankan layanan nova-scheduler, tambahkan PciPassthroughFilter ke scheduler_default_filters untuk mengaktifkan PciPassthroughFilter secara default. Juga memastikan parameter scheduler_available_filters bawah bagian [DEFAULT] `` dalam ``nova.conf diatur ke all_filters untuk mengaktifkan semua filter yang disediakan oleh layanan Compute.

    [DEFAULT]
    scheduler_default_filters = RetryFilter, AvailabilityZoneFilter, RamFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, ServerGroupAntiAffinityFilter, ServerGroupAffinityFilter, PciPassthroughFilter
    scheduler_available_filters = nova.scheduler.filters.all_filters
    
  2. Restart layanan nova-scheduler.

Aktifkan neutron sriov-agent (Compute)

  1. Instal agen SR-IOV.

  2. Edit file sriov_agent.ini pada setiap node komputasi. Sebagai contoh:

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

    Catatan

    Parameter physical_device_mappings tidak terbatas menjadi pemetaan 1-1 antara jaringan fisik dan NIC. Hal ini memungkinkan Anda untuk memetakan jaringan fisik yang sama untuk lebih dari satu NIC. Misalnya, jika physnet2 terhubung ke eth3 dan eth4, maka physnet2: eth3, physnet2: eth4 adalah pilihan yang valid.

    Parameter exclude_devices kosong, oleh karena itu, semua VF terkait dengan eth3 dapat dikonfigurasi oleh agen. Untuk mengeluarkan VF tertentu, tambahkan VF ke parameter exclude_devices sebagai berikut:

    exclude_devices = eth1:0000:07:00.2;0000:07:00.3,eth2:0000:05:00.1;0000:05:00.2
    
  3. Pastikan neutron sriov-agetn berjalan sukses:

    # neutron-sriov-nic-agent \
      --config-file /etc/neutron/neutron.conf \
      --config-file /etc/neutron/plugins/ml2/sriov_agent.ini
    
  4. Mengaktifkan layanan neutron sriov-agent.

    Jika menginstal dari source, Anda harus mengkonfigurasi file daemon untuk sistem init secara manual.

(Optional) FDB L2 agent extension

Populasi Forwarding DataBase (FDB) adalah L2 agent extension untuk OVS agent atau Linux bridge. Tujuannya adalah untuk memperbarui tabel FDB pada instance yang ada menggunakan port normal. Hal ini mengaktifkan komunikasi antara instance SR-IOV dan instance normal. Use case ekstensi populasi FDB adalah:

  • Instance port langsung dan instance port yang normal berada pada node komputasi yang sama.
  • Instance port langsung yang menggunakan alamat IP mengambang dan node jaringan terletak pada host yang sama.

Untuk informasi tambahan menjelaskan masalah ini, lihat: Virtual switching technologies and Linux bridge.

  1. Edit file ovs_agent.ini atau linuxbridge_agent.ini pada setiap node komputasi. Sebagai contoh:

    [agent]
    extensions = fdb
    
  2. Tambahkan bagian FDB dan parameter shared_physical_device_mappings. Parameter ini memetakan setiap port fisik untuk nama jaringan fisik. Setiap jaringan fisik dapat dipetakan ke beberapa port:

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

Peluncuran instance dengan port SR-IOV

Setelah konfigurasi selesai, Anda dapat meluncurkan instance dengan port SR-IOV.

  1. Dapatkan id dari jaringan dimana Anda ingin port SR-IOV yang akan dibuat:

    $ net_id=`neutron net-show net04 | grep "\ id\ " | awk '{ print $4 }'`
    
  2. Buat port SR-IOV. vnic_type=direct digunakan di sini, tapi pilihan lain termasuk normal, direct-physical, dan macvtap:

    $ port_id=`neutron port-create $net_id --name sriov_port --binding:vnic_type direct | grep "\ id\ " | awk '{ print $4 }'`
    
  3. Buat instance. Tentukan port SR-IOV yang akan dibuat pada dua langkah untuk NIC:

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

    Catatan

    Ada dua cara untuk menghubungkan VFS ke sebuah instance. Anda dapat membuat port SR-IOV atau menggunakan pci_alias dalam pelayanan Compute. Untuk informasi lebih lanjut tentang menggunakan pci_alias, mengacu pada nova-api configuration.

SR-IOV dengan InfiniBand

Dukungan untuk SR-IOV dengan InfiniBand memungkinkan perangkat Virtual PCI (VF) untuk langsung dipetakan ke guest, yang memungkinkan kinerja yang lebih tinggi dan fitur-fitur canggih seperti RDMA (remote direct memory access). Untuk menggunakan fitur ini, Anda harus:

  1. Gunakan InfiniBand yang diaktifkan adapter jaringan.

  2. Jalankan manajer subnet InfiniBand untuk mengaktifkan InfiniBand fabric.

    Semua jaringan InfiniBand harus memiliki manajer subnet yang menjalankan jaringan supaya berfungsi. Hal ini berlaku bahkan ketika melakukan jaringan sederhana dari dua mesin tanpa switch dan kartu terpasang (plugged) di back-to-back. Seorang manajer subnet diperlukan untuk link di kartu untuk bangkit. Hal ini dimungkinkan untuk memiliki lebih dari satu manajer subnet. Dalam hal ini, salah satu dari mereka akan bertindak sebagai master, dan lain akan bertindak sebagai slave yang akan mengambil alih ketika manajer subnet master gagal.

  3. Instal utilitas ebrctl pada node komputasi.

    Cek bahwa ebrctl terdaftar di suatu tempat di /etc/nova/rootwrap.d/*:

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

    JIka ebrctl tidak muncul dalam salah satu file rootwrap, tambahkan ini ke file /etc/nova/rootwrap.d/compute.filters dalam bagian [Filters].

    [Filters]
    ebrctl: CommandFilter, ebrctl, root
    

Keterbatasan dikenal

  • Ketika penggunaan Quality of Service (QoS), max_burst_kbps (meledak lebih max_kbps) tidak didukung. Sebagai tambahan, max_kbps dibulatkan ke Mbps.

  • Kelompok keamanan tidak didukung saat penggunaa SR-IOV, dengan demikian, driver firewall harus dinonaktifkan. Hal ini dapat dilakukan dalam file neutron.conf.

    [securitygroup]
    firewall_driver = neutron.agent.firewall.NoopFirewallDriver
    
  • SR-IOV tidak terintegrasi ke dalam OpenStack Dashboard (horizon). Pengguna harus menggunakan CLI atau API untuk mengkonfigurasi antarmuka SR-IOV.

  • Migrasi langsung (live) tidak didukung untuk instance dengan port SR-IOV.

    Catatan

    Fitur-IOV SR mungkin memerlukan versi driver NIC tertentu, tergantung pada vendor. Intel NIC, misalnya, memerlukan ixgbe versi 4.4.6 atau lebih besar, dan ixgbevf versi 3.2.2 atau lebih besar.

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.