Konfigurieren der Single-Root-E/A-Virtualisierung (SR-IOV)
Übersicht: SR-IOV konfigurieren
Contrail Networking unterstützt Single Root I/O Virtualization (SR-IOV) auf Ubuntu-Systemen und auch auf Red Hat Enterprise Linux (RHEL)-Betriebssystemen.
SR-IOV ist eine Schnittstellenerweiterung der PCI-Express-Spezifikation (PCIe). SR-IOV ermöglicht einem Gerät, z. B. einem Netzwerkadapter, den separaten Zugriff auf seine Ressourcen durch verschiedene Hardwarefunktionen.
Beispielsweise enthält die DPDK-Bibliothek (Data Plane Development Kit) Treiber, die im Benutzerbereich für mehrere Netzwerkschnittstellenkarten (NICs) ausgeführt werden. Wenn die Anwendung jedoch in einer virtuellen Maschine (VM) ausgeführt wird, wird die physische Netzwerkkarte nur angezeigt, wenn SR-IOV auf der Netzwerkkarte aktiviert ist.
In diesem Thema erfahren Sie, wie Sie SR-IOV mit Ihrem Contrail Networking-System konfigurieren.
Aktivieren von ASPM im BIOS
Um SR-IOV verwenden zu können, muss die aktive Energieverwaltung (ASPM) für PCI-Express-Geräte (PCIe) aktiviert sein. Aktivieren Sie ASPM im System-BIOS.
Möglicherweise muss das BIOS Ihres Systems auf eine Version aktualisiert werden, die ASPM aktivieren kann.
Konfigurieren von SR-IOV mit dem Ansible Deployer
Sie müssen die folgenden Aufgaben ausführen, um SR-IOV auf einem System zu aktivieren.
Aktivieren Sie die Intel Input/Output Memory Management Unit (IOMMU) unter Linux.
Aktivieren Sie die erforderliche Anzahl virtueller Funktionen (VFs) auf der ausgewählten Netzwerkkarte.
Konfigurieren Sie die Namen der physischen Netzwerke, deren VMs mit den VFs verbunden werden können.
Starten Sie Nova Compute neu.
service nova-compute restart
Konfigurieren Sie einen Nova Scheduler-Filter basierend auf der neuen PCI-Konfiguration, wie im folgenden Beispiel gezeigt:
/etc/nova/nova.conf [default] scheduler_default_filters = PciPassthroughFilter scheduler_available_filters = nova.scheduler.filters.all_filters scheduler_available_filters = nova.scheduler.filters.pci_passthrough_filter.PciPassthroughFilter
Starten Sie Nova Scheduler neu.
service nova-scheduler restart
Die oben genannten Aufgaben werden vom Ansible Deployer-Playbook übernommen. Die Clustermitglieder und ihre Konfigurationsparameter werden in der Datei instances.yaml angegeben, die sich im Verzeichnis config im ansible-deployer-Repository befindet.
Die Compute-Instanzen, die sich im SR-IOV-Modus befinden, sollten über eine SR-IOV-Konfiguration verfügen. Der folgende instance.yaml-Codeausschnitt zeigt eine Beispiel-Instance-Definition.
instances: bms1: provider: bms ip: ip-address roles: openstack: bms2: provider: bms ip:ip-address roles: config_database: config: control: analytics_database: analytics: webui: bms3: provider: bms ip: ip-address roles: openstack_compute: vrouter: SRIOV: true SRIOV_VF: 3 SRIOV_PHYSICAL_INTERFACE: eno1 SRIOV_PHYS_NET: physnet1
Konfigurieren von SR-IOV mit Helm
Sie müssen die folgenden Aufgaben ausführen, um SR-IOV auf einem System zu aktivieren.
Aktivieren Sie die Intel Input/Output Memory Management Unit (IOMMU) unter Linux.
Aktivieren Sie die erforderliche Anzahl virtueller Funktionen (VFs) auf der ausgewählten Netzwerkkarte.
Konfigurieren Sie die Namen der physischen Netzwerke, deren VMs mit den VFs verbunden werden können.
Starten Sie Nova Compute neu.
service nova-compute restart
Konfigurieren Sie einen Nova Scheduler-Filter basierend auf der neuen PCI-Konfiguration, wie im folgenden Beispiel gezeigt:
/etc/nova/nova.conf [default] scheduler_default_filters = PciPassthroughFilter scheduler_available_filters = nova.scheduler.filters.all_filters scheduler_available_filters = nova.scheduler.filters.pci_passthrough_filter.PciPassthroughFilter
Starten Sie Nova Scheduler neu.
service nova-scheduler restart
Die oben genannten Aufgaben werden von den Helm-Charts übernommen. Die Clustermitglieder und ihre Konfigurationsparameter werden in der multinode-inventory-Datei angegeben, die sich im config-Verzeichnis des openstack-helm-infra-Repositorys befindet.
Für Helm müssen die Konfiguration und die umgebungsspezifischen Parameter von SR-IOV an drei verschiedenen Stellen aktualisiert werden:
Die Compute-Instanz muss als contrail-vrouter-sriov festgelegt werden.
Das Folgende ist beispielsweise ein Ausschnitt aus der Datei tools/gate/devel/multinode-inventory.yaml im openstack-helm-infra-Repository.
all: children: primary: hosts: node1: ansible_port: 22 ansible_host: host-ip-address ansible_user: ubuntu ansible_ssh_private_key_file: /home/ubuntu/.ssh/insecure.pem ansible_ssh_extra_args: -o StrictHostKeyChecking=no nodes: children: openstack-compute: children: contrail-vrouter-sriov: #compute instance set to contrail-vrouter-sriov hosts: node7: ansible_port: 22 ansible_host: host-ip-address ansible_user: ubuntu ansible_ssh_private_key_file: /home/ubuntu/.ssh/insecure.pem ansible_ssh_extra_args: -o StrictHostKeyChecking=no
Contrail-vrouter-sriov muss entsprechend gekennzeichnet werden.
Das Folgende ist beispielsweise ein Ausschnitt aus der Datei tools/gate/devel/multinode-vars.yaml im Repository openstack-helm-infra.
nodes: labels: primary: - name: openstack-helm-node-class value: primary all: - name: openstack-helm-node-class value: general contrail-controller: - name: opencontrail.org/controller value: enabled openstack-compute: - name: openstack-compute-node value: enabled contrail-vrouter-dpdk: - name: opencontrail.org/vrouter-dpdk value: enabled contrail-vrouter-sriov: # label as contrail-vrouter-sriov - name: vrouter-sriov value: enabled
Die SR-IOV-Konfigurationsparameter müssen in der Datei contrail-vrouter/values.yaml aktualisiert werden.
Im Folgenden finden Sie einen Ausschnitt aus der Datei contrail-vrouter/values.yaml im Repository contrail-helm-deployer.
contrail_env_vrouter_kernel: AGENT_MODE: kernel contrail_env_vrouter_sriov: SRIOV: true per_compute_info: node_name: k8snode1 SRIOV_VF: 10 SRIOV_PHYSICAL_INTERFACE: enp129s0f1 SRIOV_PHYS_NET: physnet1
Starten virtueller SR-IOV-Maschinen
Nachdem Sie sichergestellt haben, dass SR-IOV-Funktionen auf Ihrem System aktiviert sind, verwenden Sie eines der folgenden Verfahren, um ein virtuelles Netzwerk zu erstellen, von dem aus eine SR-IOV-VM gestartet werden kann, entweder über die Contrail-Webbenutzeroberfläche oder die CLI. Beide Methoden sind enthalten.
- Verwenden der Contrail-Web-Benutzeroberfläche zum Aktivieren und Starten einer virtuellen SR-IOV-Maschine
- Verwenden der CLI zum Aktivieren und Starten virtueller SR-IOV-Maschinen
Verwenden der Contrail-Web-Benutzeroberfläche zum Aktivieren und Starten einer virtuellen SR-IOV-Maschine
So verwenden Sie die Contrail-Web-Benutzeroberfläche zum Aktivieren und Starten einer SR-IOV-VM:
Erstellen Sie unter Configure > Networking > Networks ein virtuelles Netzwerk mit aktiviertem SR-IOV. Stellen Sie sicher, dass das virtuelle Netzwerk mit einem angeschlossenen Subnetz erstellt wird. Aktivieren Sie im Abschnitt "Erweitert" das Kontrollkästchen " Anbieternetzwerk" und geben Sie das physische Netzwerk an, das bereits für SR-IOV aktiviert ist (in
testbed.py
odernova.conf
), sowie seine VLAN-ID. Siehe Abbildung 1.Abbildung 1: Netzwerkbearbeiten
Erstellen Sie im virtuellen Netzwerk einen Neutron-Port (Konfigurieren > Netzwerk->-Ports), und definieren Sie im Abschnitt Portbindung den Schlüsselwert SR-IOV und den Wert direct. Siehe Abbildung 2.
Abbildung 2: Porterstellen
Verwenden Sie mithilfe der UUID des von Ihnen erstellten Neutron-Ports den
nova boot
Befehl, um die VM von diesem Port aus zu starten.nova boot --flavor m1.large --image <image name> --nic port-id=<uuid of above port> <vm name>
Verwenden der CLI zum Aktivieren und Starten virtueller SR-IOV-Maschinen
So verwenden Sie die CLI zum Aktivieren und Starten einer SR-IOV-VM:
Erstellen Sie ein virtuelles Netzwerk mit aktiviertem SR-IOV. Geben Sie das physische Netzwerk an, das bereits für SR-IOV aktiviert ist (in
testbed.py
odernova.conf
), und dessen VLAN-ID.Das folgende Beispiel wird mit der VLAN-ID 100 erstellt
vn1
und ist Teil vonphysnet1
:neutron net-create --provider:physical_network=physnet1 --provider:segmentation_id=100 vn1
Erstellen Sie ein Subnetz in vn1.
neutron subnet-create vn1 a.b.c.0/24
Erstellen Sie im virtuellen Netzwerk einen Neutron-Port im Subnetz mit dem Bindungstyp direct.
neutron port-create --fixed-ip subnet_id=<subnet uuid>,ip_address=<IP address from above subnet> --name <name of port> <vn uuid> --binding:vnic_type direct
Verwenden Sie mithilfe der UUID des erstellten Neutron-Ports den
nova boot
Befehl, um die VM von diesem Port aus zu starten.nova boot --flavor m1.large --image <image name> --nic port-id=<uuid of above port> <vm name>
Melden Sie sich bei der VM an, und überprüfen Sie, ob der Ethernet-Controller VF ist, indem Sie den
lspci
Befehl zum Auflisten der PCI-Busse verwenden.Der VF, der mit dem VLAN konfiguriert wird, kann mit dem
ip link
Befehl beobachtet werden.