SRIOV-Einführung, VF-Passthrough-Konfiguration und Leistungstest der Paketweiterleitungsrate Inhaltsverzeichnis
1. Einführung in SRIOV ▷ Engpass der herkömmlichen Methode: Die herkömmliche Methode der Netzwerkkarte von Qemu besteht darin, eine Tap-Netzwerkkarte zum Überbrücken der Brücke des Hosts zu verwenden. Allerdings ist die Leistung sehr schlecht, insbesondere die Paketweiterleitungsrate ist sehr niedrig, was es schwierig macht, Szenarien mit hohen Leistungsanforderungen zu erfüllen. Der Hauptgrund für die schlechte Leistung ist, dass der Pfad zu lang ist und durch zu viele Kernelgeräte führt. Der grundlegende Grund ist, dass der Linux/Unix-Kernel selbst nicht für hohe Leistung ausgelegt ist. Linux/Unix eignet sich eher für Kontrollebenen als für Weiterleitungsebenen. Zunächst wird das Fazit des Leistungstests gegeben. Im Vergleich zur herkömmlichen Tap+Bridge-Lösung weist SRIOV VF Pass-Through eine verbesserte Leistung auf: ▷ Paketweiterleitungsrate erhöht: 677% 2. Umgebungsbeschreibung Modell: Dell PowerEdge R620 3. Aktivieren Sie SRIOV Aktivieren Sie SRIOV im BIOS, wie in der Abbildung gezeigt Hinweis: Auch wenn globales SRIOV im BIOS aktiviert ist, kann die Netzwerkkarte weiterhin als normale Netzwerkkarte verwendet werden Sie müssen VT-d im BIOS aktivieren Grub-Konfiguration iommu iommu=pt intel_iommu=ein 4. VF generieren # Starten Sie die Netzwerkkarte IP Link Set p1p1 up # Zeigen Sie die PCI-Nummer von pf lshw -c network -businfo an # Zeigen Sie die Anzahl der von der Netzwerkkarte unterstützten VFS an cat /sys/bus/pci/devices/0000:41:00.0/sriov_totalvfs # VF generieren, es wird empfohlen, Start-Echo 63 > /sys/bus/pci/devices/0000:41:00.0/sriov_numvfs hinzuzufügen. Hinweis: Wenn der VF-Treiber des Hosts nicht blockiert ist, müssen Sie nach der Generierung des VF eine Weile warten, bis alle benannten Netzwerkkarten auf dem Host angezeigt werden (andernfalls werden Ihnen eine Reihe von ethX-Netzwerkkarten angezeigt). Je mehr VFS vorhanden sind, desto länger ist die Wartezeit. Bei 63 VFS dauert es etwa 10 Sekunden. 5. VF-Durchgang Wenn qemu von libvirt verwaltet wird, gibt es drei Konfigurationsmethoden: ▷ Methode 1 (Schnittstelle): Im Gerätebereich hinzufügen <Schnittstellentyp='Hostdev' verwaltet='Ja'> <mac-Adresse='52:54:00:ad:ef:8d'/> <Quelle> <Adresstyp='pci' Domäne='0x0000' Bus='0x41' Steckplatz='0x10' Funktion='0x0'/> </Quelle> <vlan> <tag id='4010'/> </vlan> </Schnittstelle> Die Adresse in <source> oben kann beispielsweise gemäß "lshw -c network -businfo" konfiguriert werden. pci@0000:41:10.0 p1p1_0 ▷ Methode 2 (Hostdev): Im Gerätebereich hinzufügen <hostdev-Modus='Subsystem' Typ='PCI' verwaltet='Ja'> <Quelle> <Adresse Domäne='0x0000' Bus='0x41' Steckplatz='0x10' Funktion='0x0'/> </Quelle> </hostdev> Die Adresse in <source> oben wird auch gemäß „lshw -c network -businfo“ konfiguriert. ▷ Methode 3 (Nettopool) Definieren Sie für jede PF-Netzwerkkarte einen Net-Pool, d. h. bearbeiten Sie jeweils eine XML-Datei. Hier wird nur ein PF angezeigt, editiere sriov-int.xml <Netzwerk> <name>sriov-int</name> <Weiterleitungsmodus='Hostdev' verwaltet='Ja'> <pf dev='p1p1'/> </weiter> </Netzwerk> Zum libvirt-Netpool hinzufügen, aktivieren und so einrichten, dass es beim Booten startet virsh net-define sriov-int.xml virsh net-start sriov-int virsh net-autostart sriov-int Obwohl net-autostart konfiguriert ist, funktioniert es nicht, da beim Starten der physischen Maschine libvirt häufig vor der Generierung von vf gestartet wird (vorausgesetzt, vf wird in rc.local generiert) und net-pool (sriov-int) nach der Generierung von vf gestartet werden sollte. Daher wird empfohlen, den folgenden Inhalt in rc.local hinzuzufügen, um den Start sicherzustellen IP-Verbindung einrichten, P1P2 einrichten echo 63 > /sys/bus/pci/devices/0000:41:00.0/sriov_numvfs virsh net-start sriov-int Fügen Sie dann die XML-Datei der VM hinzu <Schnittstellentyp='Netzwerk'> <mac-Adresse='52:54:00:ad:ef:8d'/> <Quellennetzwerk='sriov-int'/> <vlan> <tag id='4010'/> </vlan> </Schnittstelle> So wählen Sie zwischen den drei Methoden ▷ Methode 1: Mehrere Funktionen, kann Mac und VLAN konfigurieren Es liegt ein Fehler vor. Wenn die Gesamtzahl der von allen VMs auf diesem Host verwendeten VFs die VF-Obergrenze überschreitet, wird kein Fehler gemeldet und die VM kann gestartet werden, es können jedoch Ausnahmen auftreten. Wenn die VM durch Destroy heruntergefahren wird, treten bei der entsprechenden VF Probleme auf. Wenn Sie beispielsweise ip link set p1p1 vf 0 mac 00:00:00:00:00:00 verwenden, um sie zurückzusetzen, wird Ihnen „RTNETLINK antwortet: Speicher kann nicht zugewiesen werden“ angezeigt. Es ist schwierig zu reparieren, und selbst wenn es repariert wird, wissen Sie nicht, ob es unsichtbare Ausnahmen gibt. Es gibt keine Möglichkeit herauszufinden, welches virtuelle Flash-Laufwerk eine bestimmte VM verwendet. Wenn Sie also ein Geschwindigkeitslimit für ein virtuelles Flash-Laufwerk festlegen oder Spoofchk ein- oder ausschalten möchten, können Sie die virtuelle Flash-Laufwerk-Nummer auf dem Host nur mit „ip link show dev p1p1 | grep MAC address“ abrufen, bevor Sie das Geschwindigkeitslimit und andere Vorgänge festlegen können. Zusammenfassend lässt sich sagen: Methode 3 ist die bequemste, weist jedoch einen Fehler auf. Sie benötigen daher eine gute Logik, um zu verhindern, dass die Gesamtzahl der von der VM verwendeten VFS die Obergrenze überschreitet. 6. Aktivieren Sie irqbalance x520 hat 2 Warteschlangen, x710 hat 4 Warteschlangen und der Interrupt-Balancing-Dienst (irqbalance) muss in der VM gestartet werden, da sonst nur eine CPU das Datenpaket verarbeitet. Dies hat auch nichts mit query_rss des vf auf dem Host zu tun. 7. VM-Migration Die Pass-Through-Netzwerkkarte ist ein PCI-Gerät, aber libvirt und qemu unterstützen keine Migration von VMs mit Nicht-USB-PCI-Geräten, einschließlich Kaltmigration und Hotmigration. Daher kann keine Hotmigration erreicht werden. Für die Kaltmigration gibt es zwei Lösungen: ▷ Trennen Sie die vf-Netzwerkkarte, verwenden Sie dann libvirt zum Migrieren und schließen Sie die vf-Netzwerkkarte nach der Migration an den neuen Host an Hinweis: Sie können die Migrationsfunktion von libvirt nicht verwenden, wenn die VM heruntergefahren ist. Dies kann dazu führen, dass die virtuelle Maschine einschließlich des ursprünglichen Hosts und des neuen Hosts verschwindet. 8. Bandbreitenbeschränkung Es kann nur die ausgehende Bandbreite begrenzt werden, nicht die eingehende Bandbreite. IP-Link-Satz p1p1 vf 0 max_tx_rate 100 Gibt an, dass die ausgehende Bandbreite auf 100 Mbit/s begrenzt ist. Diese Grenze ist bei verschiedenen Netzwerkkarten unterschiedlich: ▷ Die Mindestgeschwindigkeitsbegrenzung der x520-Netzwerkkarte beträgt 11 Mbit/s und die Höchstgeschwindigkeitsbegrenzung 10.000 Mbit/s. Die Einstellung auf 0 bedeutet keine Geschwindigkeitsbegrenzung. Wenn der Wert kleiner als 11 oder größer als 10000 ist, wird ein Fehler gemeldet. Hinweis: Das Bandbreitenlimit von vf wird nach dem Herunterfahren der VM nicht zurückgesetzt 9. Sicherheit Es werden nur Quell-MAC-Filterung und Netzwerkkarten-MAC-Manipulationsschutz unterstützt. Andere Sicherheitsvorkehrungen werden nicht unterstützt (Anti-ARP-Spoofing kann nicht erreicht werden). Quell-Mac-Filterung IP-Link-Set p1p1 vf 0 Spoofchk ein Gibt an, dass das Datenpaket nicht passieren darf, wenn die Quell-MAC des von der VM gesendeten Pakets nicht die angegebene MAC ist. Hinweis: Der Spoofchk von vf wird nach dem Herunterfahren der VM nicht zurückgesetzt. Manipulationsschutz für Netzwerkkarten auf dem Mac ▷ Wenn Sie den Mac auf dem Host ändern, wird der Mac in der VM nicht geändert. Wenn Sie den Mac in der VM ändern, sind die Änderungen auf dem Host sichtbar. Ändern Sie die Mac-Methode auf dem Host manuell (kann geändert werden, wenn die VM aus- oder eingeschaltet ist): IP-Link-Set p1p1 vf 0 mac aa:bb:cc:dd:ee:ff Anregung: ▷ VF zurücksetzen, bevor VM gestartet wird 10. Sonstige Nutzungsbeschränkungen ▷ Die vf-Netzwerkkarte in der VM kann nicht mit der Linux-Brücke in der VM verbunden werden, was auch ebtables unbrauchbar macht, aber iptables kann verwendet werden 11. Leistungstests Testmethode: ▷ Mehrere VMs senden gleichzeitig Pakete und eine VM empfängt Pakete. Beobachten Sie die Leistung beim Senden und Empfangen von Paketen. Konfiguration: ▷ VM-Konfiguration besteht aus 4 Kernen und 8G Testergebnisse: Testfazit: Die Verwendung von SR-IOV+VF-Passthrough kann die Paketweiterleitungsrate erheblich verbessern. Die 1:1-Testergebnisse zeigen, dass das Senden von Paketen im Kernelstatus 3,5 Mpps und der Paketempfang 1,9 Mpps erreichen kann. ▷ Die Paketsenderate ist 1196 % höher als die von vxlan und 677 % höher als die von vlan. Dieses Ergebnis bezieht sich auf 1 zu 1 (1 sendende VM, 1 empfangende VM) veranschaulichen: ▷ Die Verarbeitungskapazität für Single-Core-Datenpakete (64B) im Kernel-Zustand beträgt 2 Mpps Weitere Testergebnisse: Die im folgenden Test verwendete Paketgröße beträgt 64B ▷ Kernelstatus, Layer 3-Weiterleitungsleistung: Der Paketsender verwendet unterschiedliche Quell-IPs ▪ BCM57800: 2 Mpps ▷ Kernelstatus, Layer 2-Weiterleitungsleistung: Der Paketsender verwendet eine andere Quell-MAC ▪ BCM57800: 2 Mpps ▷ VXLAN-Kapselungsfähigkeit im Kernelstatus ▪ Die innere Schicht von vxlan verwendet verschiedene Quell-IPs zum Senden von Paketen ▷ DPDK-Benutzermodus, Layer 2-Weiterleitungsleistung: Der Paketsender verwendet unterschiedliche Quell-IP ▪ BCM57800: Nicht unterstützt SR-IOV-Modus ▪ X520 insgesamt 11,2 Mpps, jede VM ist 11,2 Mpps/Gesamt-VM (d. h. VF-Anzahl) Zusammenfassen: ▷ Der Interrupt-Ausgleich im Kernelstatus basiert auf den folgenden Faktoren: Schicht 2 basiert auf der Quell-MAC und Schicht 3 basiert auf der Quell-IP Beachten: ▷ Im Kernelzustand führt die Verwendung des Multi-Queue-RSS-Interrupt-Balancing zur Verbesserung des Durchsatzes zu einer sehr hohen CPU-Auslastung 12. Verwenden von VF in virtuellen Windows-Maschinen Gehen Sie zur offiziellen Website der Netzwerkkarte, laden Sie den entsprechenden Treiber herunter und installieren Sie ihn. Nach dem Testen verfügt win2012 standardmäßig über den Treiber 82599 (x520), aber die Version ist alt. 13. Betriebs- und Wartungsbefehle # Zeigen Sie die Anzahl der von der Netzwerkkarte unterstützten VFS an cat /sys/bus/pci/devices/0000:41:00.0/sriov_totalvfs # Nachdem der Host den VF-Treiber blockiert hat, überprüfen Sie die Entsprechung zwischen vf und pf https://github.com/intel/SDN-NFV-Hands-on-Samples/blob/master/SR-IOV_Network_Virtual_Functions_in_KVM/listvfs_by_pf.sh Führen Sie nach dem Herunterladen ./listvfs_by_pf.sh# aus. Nachdem der Host VF blockiert hat, prüfen Sie, welche VFs verwendet werden. yum install dpdk-tools dpdk-devbind --status # Prüfen Sie, zu welchem Sockel die Netzwerkkarte gehört lstopo-keine-Grafiken # lspci zum Anzeigen der Netzwerkkarteninformationen lspci -Dvmm|grep -B 1 -A 4 Ethernet # Bestimmten VF-Verkehr auf dem Host anzeigen (unterstützt nur x520, x710 kann nicht gefunden werden) ethtool -S p1p1 | grep VF 14. Host blockiert VF-Treiber echo "blacklist ixgbevf" >> /etc/modprobe.d/blacklist.conf Dies bedeutet, dass beim Starten der physischen Maschine der ixgbevf-Treiber nicht standardmäßig geladen wird. Wenn Sie ixgbevf jedoch manuell modprobe ausführen, wird der Treiber geladen. Wenn ixgbevf aktuell geladen ist und Sie es deinstallieren möchten, müssen Sie die folgenden Schritte ausführen: echo 0 > /sys/bus/pci/devices/0000:41:00.0/sriov_numvfs rmmod ixgbevf echo 63 > /sys/bus/pci/devices/0000:41:00.0/sriov_numvfs Anhang. Testmethode für die Paketweiterleitungsrate modprobe pktgen: Die Pakete werden über pktgen gesendet und die empfangenen Pakete werden über sar -n DEV überprüft. Die gesendeten Pakete sind UDP-Pakete. #!/bin/bash NIC="eth1" DST_IP="192.168.1.2" DST_MAC="52:54:00:43:99:65" modprobe pktgen pg() { Echo-Injektion > $PGDEV Katze $PGDEV } pgset() { lokales Ergebnis echo $1 > $PGDEV Ergebnis=`cat $PGDEV | fgrep "Ergebnis: OK:"` wenn [ "$result" = "" ]; dann cat $PGDEV | fgrep Ergebnis: fi } # Konfiguration hier starten ----------------------------------------------------------- # Thread-Konfiguration # Jede CPU hat ihren eigenen Thread. Es werden zwei CPUs getestet. Wir fügen ens7 und eth2 entsprechend hinzu. PGDEV=/proc/net/pktgen/kpktgend_0 echo "Alle Geräte entfernen" Seitensatz "rem_device_all" echo "${NIC} hinzufügen" pgset "Gerät hinzufügen ${NIC}" # Gerätekonfiguration # Verzögerung 0 bedeutet maximale Geschwindigkeit. CLONE_SKB="Klon_SKB 1000000" # NIC fügt 4 Byte CRC hinzu PKT_SIZE="Pkt_Größe 64" # COUNT 0 bedeutet für immer COUNT="Anzahl 0" DELAY="Verzögerung 0" PGDEV=/proc/net/pktgen/${NIC} echo "$PGDEV konfigurieren" Seitensatz "$COUNT" Seitensatz "$CLONE_SKB" Seitensatz "$PKT_SIZE" Seitensatz "$DELAY" Seite "Dst ${DST_IP}" Seite "Dst_mac ${DST_MAC}" # Zeit zum Ausführen PGDEV=/proc/net/pktgen/pgctrl echo "Läuft... Strg^C zum Stoppen" Seitensatz "Start" echo "Fertig" # Das Ergebnis kann in /proc/net/pktgen/eth[3,4] angezeigt werden. ▷ Ändern Sie eth1 am Anfang des Skripts in die Netzwerkkarte, die dem Paket entspricht pktgen-dpdk # Feste IP, fester Mac setze 0 Ziel-IP 192.168.10.240 setze 0 Quell-IP 192.168.10.245/24 setze 0 dst mac c8:1f:66:d7:58:ba Satz 0 Quelle Mac a0:36:9f:ec:4a:28 # Variable Quell-IP, variabler Quell-Mac Stopp 0 Bereich 0 Quell-IP 192.168.0.1 192.168.0.1 192.168.200.200 0.0.0.1 Bereich 0 Ziel-IP 10.1.1.241 10.1.1.241 10.1.1.241 0.0.0.0 Bereich 0 dst mac c8:1f:66:d7:58:ba c8:1f:66:d7:58:ba c8:1f:66:d7:58:ba 00:00:00:00:00:00 Bereich 0 Quelle Mac a0:36:9f:ec:4a:28 a0:36:9f:ec:4a:28 a0:36:9f:ec:ff:ff 00:00:00:00:01:01 Bereich 0 Quellport 100 100 65530 1 Bereich 0 Zielport 100 100 65530 1 Bereich 0 Größe 64 64 64 0 0-Bereich aktivieren 0 Latenz aktivieren Anfang 0 # Senden Sie Pakete mit 50% Rate eingestellt 0 Rate 50 Anhang. Referenzdokumente OpenStacks Einschränkungen für sriov wandern sriov-Konfiguration Liniengeschwindigkeit Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. |
<<: Lösungen für MySql-Abstürze und Dienststartfehler
Responsive Design bedeutet, während des Website-E...
Vorwort Bei der täglichen Arbeit oder beim Studiu...
Inhaltsverzeichnis 1. Code-Analyse 2. Quellcode Q...
Inhaltsverzeichnis Anwendungsszenarien So erreich...
Vorwort Das dreispaltige Layout ist, wie der Name...
Voraussetzung: Percona 5.6 Version, Transaktionsi...
Vor ein paar Tagen habe ich erfahren, dass die of...
Inhaltsverzeichnis 1. Einleitung 2. Schnittstelle...
Hintergrund Da ich alle meine Aufgaben auf Docker...
In diesem Artikel wird der spezifische Code der r...
Die Installation komprimierter Pakete hat sich se...
Überblick: Oracle Scott-Benutzer haben vier Tabel...
Vorne geschrieben Im heutigen Internetbereich ist...
Heute möchte ich einen Countdown von Vue und Mome...
Manchmal müssen Sie basierend auf der offiziell v...