Tujuan dari halaman ini adalah untuk menjelaskan cara mengaktifkan SR-IOV secara fungsional yang tersedia di OpenStack (menggunakan OpenStack Networking) sebagai rilis Juno. Hal ini dimaksudkan sebagai panduan server bagaimana mengkonfigurasi OpenStack Networking dan OpenStack Compute untuk membuat port SR-IOV.
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 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.
Produsen berikut diketahui bekerja:
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.
Untuk mengaktifkan SR-IOV, langkah-langkah berikut ini diperlukan:
BuatlahVirtual Functions (Compute)
Daftarlah (whitelist) perangkat PCI di nova-compute (Compute)
Lakukan konfigurasi neutron-server (Controller)
Lakukan konfigurasi nova-scheduler (Controller)
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.
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.
Pastikan SR-IOV dan VT-d diaktifkan di BIOS.
Aktifkan IOMMU di Linux dengan menambahkan intel_iommu = on
dengan parameter kernel, misalnya, menggunakan GRUB.
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
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
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.
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.
Restart layanan nova-compute
agar perubahan berlaku.
Tambahkan sriovnicswitch
sebagai driver mekanisme. Edit file ml2_conf.ini
pada setiap controller:
mechanism_drivers = openvswitch,sriovnicswitch
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
Restart layanan neutron-server
.
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
Restart layanan nova-scheduler
.
Instal agen SR-IOV.
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
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
Mengaktifkan layanan neutron sriov-agent.
Jika menginstal dari source, Anda harus mengkonfigurasi file daemon untuk sistem init secara manual.
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.
Edit file ovs_agent.ini
atau linuxbridge_agent.ini
pada setiap node komputasi. Sebagai contoh:
[agent]
extensions = fdb
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
Setelah konfigurasi selesai, Anda dapat meluncurkan instance dengan port SR-IOV.
Dapatkan id
dari jaringan dimana Anda ingin port SR-IOV yang akan dibuat:
$ net_id=`neutron net-show net04 | grep "\ id\ " | awk '{ print $4 }'`
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 }'`
Buat instance. Tentukan port SR-IOV yang akan dibuat pada dua langkah untuk NIC:
$ nova boot --flavor m1.large --image ubuntu_14.04 --nic port-id=$port_id test-sriov
Catatan
Ada dua cara untuk menghubungkan VF ke sebuah instance. Anda dapat membuat port SR-IOV atau menggunakan pci_alias
dalam pelayanan Compute. Untuk informasi lebih lanjut tentang menggunakan pci_alias
, merujuk pada nova-api configuration.
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:
Gunakan InfiniBand yang diaktifkan adapter jaringan.
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.
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
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.
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.