Menggunakan fungsi SR-IOV

Menggunakan fungsi SR-IOV

Tujuan dari halaman ini adalah untuk menjelaskan cara mengaktifkan fungsi SR-IOV yang tersedia di OpenStack (menggunakan OpenStack Networking) sebagai rilis Juno. Halaman ini berfungsi sebagai pedoman bagaimana mengkonfigurasi OpenStack Networking dan OpenStack Compute untuk membuat port SR-IOV neutron.

Dasar

PCI-SIG Single Root I/O Virtualization dan Sharing (SR-IOV) mendefinisikan spesifikasi mekanisme standar untuk virtualisasi perangkat PCIe. Mekanisme ini dapat menvirtual pengontrol tunggal PCIe Ethernet untuk muncul sebagai beberapa perangkat PCIe. Anda dapat langsung menetapkan setiap perangkat PCIe virtual untuk VM, melalui hypervisor dan virtual switch layer. Akibatnya, user dapat mencapai latency rendah dan near-line wire speed.

SR-IOV dengan ethernet

Istilah berikut digunakan lebih dari dokumen:

Term Definition
PF

Fungsi fisik. Ini adalah kontroler Ethernet fisik yang mendukung SR-IOV.

VF

Virtual Fungsi. Ini adalah perangkat PCIe virtual yang dibuat dari kontroler Ethernet fisik.

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

  1. Buat Fungsi Virtual (Compute)

  2. Mendaftar perangkat PCI whitelist di nova-compute (Compute)

  3. Mengkonfigurasi neutron-server (Controller)

  4. Mengkonfigurasi nova-scheduler (Controller)

  5. Aktifkan neutron sriov-agen (Compute)

Neutron sriov-agent

Neutron sriov-agen diperlukan sejak rilis Mitaka.

Neutron sriov-agen memungkinkan Anda untuk mengatur posisi admin port dan mulai dari Liberty memungkinkan Anda untuk mengontrol keamanan port (mengaktifkan dan menonaktifkan spoof memeriksa) dan pengaturan batas tingkat QoS.

Catatan

Neutron sriov-agen itu opsional sebelum Mitaka, dan tidak diaktifkan secara default sebelum Liberty.

Known limitations

  • QoS didukung sejak Liberty, sementara itu memiliki keterbatasan. max_burst_kbps (burst over max_kbps) tidak didukung. max_kbps dibulatkan ke Mbps.

  • Security Group tidak didukung. agen hanya bekerja dengan firewall_driver = neutron.agent.firewall.NoopFirewallDriver.

  • Tidak ada integrasi OpenStack Dashboard. User perlu menggunakan CLI atau API untuk membuat port SR-IOV neutron.

  • Live migration tidak didukung untuk kasus dengan port SR-IOV.

  • ARP spoofing filtering tidak didukung sebelum Mitaka saat menggunakan sriov-agen neutron.

Contoh Environment

Kami merekomendasikan menggunakan Open vSwitch dengan VLAN sebagai segregasi. Dengan cara ini Anda dapat menggabungkan VMS biasa tanpa port SR-IOV dan instance dengan port SR-IOV pada jaringan neutron tunggal.

Catatan

Dalam panduan ini, eth3 digunakan sebagai PF dan physnet2 digunakan sebagai jaringan provider yang dikonfigurasi sebagai rentang VLAN. Anda diharapkan untuk mengubah ini sesuai dengan lingkungan Anda yang sebenarnya.

Buat Fungsi Virtual (Compute)

Pada langkah ini, buatlah VF untuk interface jaringan yang akan digunakan untuk SR-IOV. Gunakan eth3 sebagai PF, yang juga digunakan sebagai interface untuk Open vSwitch VLAN dan memiliki akses ke jaringan private dari semua mesin.

Langkah untuk membuat VFS berbeda beda antar produsen SR-IOV card Ethernet controller. Saat ini produsen berikut diketahui sedang bekerja:

  • Intel
  • Mellanox
  • QLogic

Untuk Mellanox SR-IOV Ethernet cards lihat: Mellanox: HowTo Configure SR-IOV VFs<https://community.mellanox.com/docs/DOC-1484> _

Untuk membuat VF di Ubuntu Intel SR-IOV Ethernet cards, lakukan hal berikut:

  1. Pastikan SR-IOV diaktifkan di BIOS, periksa VT-d dan pastikan itu diaktifkan. Setelah mengaktifkan VT-d, aktifkan IOMMU pada Linux dengan menambahkan intel_iommu = on ke parameter kernel. Edit file``/etc/default/grub``:

    GRUB_CMDLINE_LINUX_DEFAULT="nomdmonddf nomdmonisw intel_iommu=on
    
  2. Jalankan berikut ini jika Anda telah menambahkan parameter baru:

    # update-grub
    # reboot
    
  3. Pada setiap node komputasi, ciptakan VF melalui interface PCI SYS:

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

    Catatan

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

    Peringatan

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

    Anda dapat menentukan jumlah maksimum VF, PF dapat mendukung:

    # cat /sys/class/net/eth3/device/sriov_totalvfs
    63
    

    Jika interface turun, pastikan sudah mengatur ke up sebelum meluncurkan guest, jika tidak instance akan gagal untuk berkembang biak:

    # ip link set eth3 up
    # 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
    
  4. Sekarang memverifikasi bahwa VFVF telah dibuat (harus melihat perangkat Virtual Function):

    # lspci | grep Ethernet
    
  5. Mempertahankan VF yang telah dibuat pada saat 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 sysfs.conf tetapi untuk mengubah alasan yang tidak diketahui sysfs.conf tidak memiliki efek pada Ubuntu 14.04.

Untuk QLogic SR-IOV Ethernet cards lihat: User’s Guide OpenStack Deployment with SR-IOV Configuration

Daftarlah perangkat PCI whitelist nova-compute (Compute)

Tunjukan nova-compute dimana perangkat pci yang diizinkan untuk melewati. Edit file nova.conf:

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

Ini memberitahu nova bahwa semua VF memilik eth3 yang diizinkan untuk melewati ke VM dan memilik physnet2 jaringan provider neutron. Restart layanan nova-compute agar perubahan berlaku.

Ini Alternatif, parameter pci_passthrough_whitelist juga mendukung whitelisting by:

  • 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" }
    
    # Example match any domain, bus 0a, slot 00, all function
    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.

Mengkonfigurasi neutron-server (Controller)

  1. Tambahkan sriovnicswitch sebagai driver mekanisme, edit file ml2_conf.ini:

    mechanism_drivers = openvswitch,sriovnicswitch
    
  2. Temukan vendor_id dan product_id dalam VFs Anda dengan logging ke compute node Anda dengan VF yang dibuat sebelumnya:

    # lspci -nn | grep -i ethernet
    87:00.0 Ethernet controller [0200]: Intel Corporation 82599 10 Gigabit Dual Port Backplane Connection [8086:10f8] (rev 01)
    87:10.1 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01)
    87:10.3 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01)
    
  3. Update ml2_conf_sriov.ini pada setiap kontroler. Dalam kasus kami vendor_id adalah `` 8086`` dan product_id adalah 10ed. Memberitahu neutron dimana vendor_id dan `` product_id`` dari VF yang didukung.

    supported_pci_vendor_devs = 8086:10ed
    
  4. Tambahkan ml2_conf_sriov.ini yang baru dikonfigurasi sebagai parameter untuk daemon neutron-server. Edit script inisialisasi yang tepat untuk mengkonfigurasi layanan neutron-server untuk memuat file konfigurasi SRIOV:

    --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugin.ini
    --config-file /etc/neutron/plugins/ml2/ml2_conf_sriov.ini
    
  5. Supaya perubahan berlaku, restart layanan neutron-server.

Mengkonfigurasi nova-scheduler (Controller)

  1. Pada setiap controller node menjalankan layanan nova-scheduler, tambahkan `` PciPassthroughFilter`` ke parameter scheduler_default_filters dan tambahkan baris baru untuk parameter scheduler_available_filters di bawah bagian `` [DEFAULT] `` dalam nova.conf:

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

Aktifkan neutron sriov-agen (Compute)

  1. Pada setiap compute node, edit file sriov_agent.ini:

    [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 physnet dan NIC. Hal ini memungkinkan Anda untuk memetakan physnet 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 mengecualikan VF tertentu, tambahkannya 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
    
  2. Uji apakah sriov-agent neutron berjalan sukses:

    # neutron-sriov-nic-agent --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/sriov_agent.ini
    
  3. Aktifkan layanan sriov-agen neutron.

Buat instance dengan port SR-IOV

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

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

    $ net_id=`neutron net-show net04 | grep "\ id\ " | awk '{ print $4 }'`
    
  2. Buat port SR-IOV. Kita tentukan vnic_type=direct, tetapi perhatikan 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 VM. Untuk nic kita tentukan port SR-IOV yang dibuat pada langkah 2:

    $ nova boot --flavor m1.large --image ubuntu_14.04 --nic port-id=$port_id test-sriov
    

    Catatan

    Ada dua cara untuk melampirkan VF sebuah instance. Anda dapat membuat neutron SR-IOV port atau menggunakan pci_alias di nova. Untuk informasi lebih lanjut tentang menggunakan pci_alias, merujuk pada nova-api configuration.

SR-IOV dengan InfiniBand

Dukungan untuk SR-IOV dengan InfiniBand memungkinkan Virtual PCI device (VF) untuk langsung dipetakan ke guest, yang membuka 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 fungsi jaringan. Hal ini berlaku bahkan ketika melakukan jaringan sederhana dari dua mesin tanpa switch dan kartu terpasang di back-to-back. Manajer subnet diperlukan untuk link kartu supaya 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 budak yang akan mengambil alih ketika manajer tuan subnet gagal.

  3. Instal utilitas ``ebrctl``pada node komputasi.

    Periksa ebrctl terdaftar di suatu tempat /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 di bagian ``[Filter] ``.

    [Filters]
    ebrctl: CommandFilter, ebrctl, root
    
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.