Inhaltsverzeichnis
libpcap" >libpcap
libpcap-mmap" >libpcap-mmap
PF_RING" >PF_RING
DPDK" >DPDK
1 UIO+mmap implementiert Zero Copy" >1 UIO+mmap implementiert Zero Copy
2 UIO+PMD reduziert Interrupts und CPU-Kontextwechsel. " >2 UIO+PMD reduziert Interrupts und CPU-Kontextwechsel.
3 HugePages reduzieren TLB-Fehler" >3 HugePages reduzieren TLB-Fehler
4 Weitere Optimierungen" >4 Weitere Optimierungen
XDP" >XDP
Heim Betrieb und Instandhaltung Betrieb und Wartung von Linux Mehrere klassische Linux-Paketsammel-Engines

Mehrere klassische Linux-Paketsammel-Engines

Aug 04, 2023 pm 04:07 PM
linux

Dieser Artikel listet vier klassische Linux-Paketsammel-Engines auf. Wenn es andere gibt, die Ihrer Meinung nach in Ordnung sind, können Sie eine Nachricht hinterlassen. Diese vier sind:

  • libpcap/libpcap-mmap
  • PF_RING
  • DPDK
  • xdp

libpcap

Der Paketerfassungsmechanismus von

libpcap befindet sich auf der Datenverbindungsschicht. Fügen Sie einen Bypass hinzu Eine Verarbeitung, die die Verarbeitung des systemeigenen Netzwerkprotokollstapels nicht beeinträchtigt, wird durch den Linux-Kernel gefiltert und gepuffert und schließlich direkt an die Anwendung der oberen Ebene weitergeleitet.

  1. Das Datenpaket kommt am Netzwerkkartengerät an.
  2. Das Netzwerkkartengerät führt DMA-Vorgänge entsprechend der Konfiguration aus. ("Erste Kopie": Netzwerkkartenregister -> vom Kernel für die Netzwerkkarte zugewiesener Ringpuffer)
  3. Die Netzwerkkarte sendet einen Interrupt und weckt den Prozessor auf.
  4. Die Treibersoftware liest aus dem Ringpuffer und füllt die Kernel-Skbuff-Struktur ( „Zweite Kopie“ : Kernel-Netzwerkkartenpuffer-Ringpuffer-> Kernel-spezifische Datenstruktur skbuff)
  5. Rufen Sie dann die Funktion netif_receive_skb auf:
  • 5.1 Wenn ein Paketerfassungsprogramm vorhanden ist, geben Sie den BPF-Filter über die Netzwerk-Subschnittstelle ein und kopieren Sie die Pakete, die den Regeln entsprechen, in den Systemkerncache ( "3. Kopie). „ ). BPF ordnet jedem Paketerfassungsprogramm, das gewartet werden muss, einen Filter und zwei Puffer zu. BPF weist Puffer zu und beträgt normalerweise 4 KB. Der Speicherpuffer wird zum Empfangen von Daten vom Adapter verwendet. Der Haltepuffer wird zum Kopieren von Paketen in die Anwendung verwendet.
  • 5.2 Verarbeiten Sie die Überbrückungsfunktion der Datenverbindungsschicht.
  • 5.3 Bestimmen Sie das Protokoll der oberen Schicht gemäß dem Feld skb->protocol und senden Sie es zur Verarbeitung an die Netzwerkschicht, geben Sie den Netzwerkprotokollstapel ein und Führen Sie eine Verarbeitung auf hoher Ebene durch.
  • libpcap umgeht die Verarbeitung des Protokoll-Stack-Teils des Linux-Kernel-Paketerfassungsprozesses und ermöglicht es der User-Space-API, den Socket PF_PACKET direkt aufzurufen, um eine Kopie des Datenpakets vom Link-Layer-Treiber abzurufen und es vom zu puffern Der Kernelbereich wird in den User-Space-Puffer kopiert ( „Die 4. Kopie“)
  • libpcap-mmap

    libpcap-mmap ist eine Verbesserung gegenüber der alten libpcap-Implementierung und wird grundsätzlich in der neuen verwendet Versionen des libpcap packet_mmap-Mechanismus. PACKET_MMAP reduziert eine Speicherkopie durch mmap ( „Die vierte Kopie ist weg“ ), reduziert häufige Systemaufrufe und verbessert die Effizienz der Paketerfassung erheblich.

    PF_RING

    Wir haben gesehen, dass libpcap zuvor 4 Speicherkopien hatte. libpcap_mmap verfügt über 3 Speicherkopien. Die von PF_RING vorgeschlagene Kernlösung besteht darin, die Anzahl der Nachrichtenkopien während der Übertragung zu reduzieren.

    Wir können sehen, dass pfring im Vergleich zu libpcap_mmap es dem Benutzerraumspeicher ermöglicht, mmap direkt mit rx_buffer zu erstellen. Dadurch wird eine weitere Kopie reduziert ( „Die zweite Kopie von libpcap_mmap“ : rx_buffer->skb)

    PF-RING ZC implementiert die DNA-Technologie (Direct NIC Access Direct Network Card Access), um den Speicherplatz des Benutzers dem Speicher des Treibers zuzuordnen Platz, damit die Anwendung des Benutzers direkt auf die Register und Daten der Netzwerkkarte zugreifen kann.

    Auf diese Weise wird die Pufferung von Datenpaketen im Kernel vermieden und eine Kopie reduziert („Die erste Kopie von libpcap“, DMA zur Kernel-Pufferkopie). Dies ist eine völlige Nullkopie.

    Der Nachteil besteht darin, dass jeweils nur eine Anwendung den DMA-Ring öffnen kann (beachten Sie, dass heutige Netzwerkkarten mehrere RX/TX-Warteschlangen haben können, sodass sich eine Anwendung gleichzeitig in jeder Warteschlange befinden kann), kurz gesagt , müssen mehrere Anwendungen im Benutzermodus miteinander kommunizieren, um Datenpakete zu verteilen.

    DPDK

    pf-ring Sowohl zc als auch dpdk können eine Nullkopie von Datenpaketen erreichen. Beide umgehen den Kernel, aber die Implementierungsprinzipien sind etwas unterschiedlich. PF-Ring ZC übernimmt die Datenpakete über den ZC-Treiber (auch auf Anwendungsebene), und DPDK wird basierend auf UIO implementiert.

    1 UIO+mmap implementiert Zero Copy

    UIO (Userspace I/O) ist eine I/O-Technologie, die im Userspace ausgeführt wird. Im Allgemeinen werden Treibergeräte in Linux-Systemen im Kernelbereich ausgeführt und können von Anwendungen im Benutzerbereich aufgerufen werden. UIO führt jedoch einen kleinen Teil des Treibers im Kernelbereich aus und implementiert den größten Teil des Treibers im Benutzerbereich. Funktion. Mithilfe des von Linux bereitgestellten UIO-Mechanismus kann der Kernel umgangen werden und die gesamte Paketverarbeitungsarbeit wird im Benutzerbereich ausgeführt.

    2 UIO+PMD reduziert Interrupts und CPU-Kontextwechsel.

    Der UIO-Treiber von DPDK blockiert von der Hardware ausgegebene Interrupts und verwendet dann aktive Abfragen im Benutzermodus. Dieser Modus wird als PMD (Poll Mode Driver) bezeichnet.

    Im Vergleich zu DPDK verwendet pf-ring (kein Zc) NAPI-Abfrage und Abfrage auf Anwendungsebene, während pf-ring zc DPDK ähnelt und nur Abfrage auf Anwendungsebene verwendet.

    3 HugePages reduzieren TLB-Fehler

    Nach der Einführung von MMU (Memory Management Unit) im Betriebssystem muss die CPU zweimal auf den Speicher zugreifen, um die Speicherdaten zu lesen. Das erste Mal besteht darin, die Seitentabelle abzufragen, um die logische Adresse in eine physische Adresse umzuwandeln, und dann auf die physische Adresse zuzugreifen, um Daten oder Anweisungen zu lesen.

    Um das Problem der langen Abfragezeit, die durch zu viele Seiten und zu große Seitentabellen verursacht wird, zu verringern, wurde TLB (Translation Lookaside Buffer) eingeführt, der als Adressübersetzungspuffer übersetzt werden kann. Der TLB ist eine Speicherverwaltungseinheit, die im Allgemeinen in einem Register gespeichert ist und einen kleinen Teil der Seitentabelleneinträge speichert, auf die aktuell am wahrscheinlichsten zugegriffen wird.

    Nachdem der TLB eingeführt wurde, geht die CPU zunächst zum TLB, um ihn zu adressieren. Da der TLB im Register gespeichert ist und nur einen kleinen Teil der Seitentabelleneinträge enthält, ist die Abfragegeschwindigkeit sehr hoch. Wenn die Adressierung im TLB erfolgreich ist (TLB-Treffer), besteht keine Notwendigkeit, die Seitentabelle im RAM abzufragen. Wenn die Adressierung im TLB fehlschlägt (TLB-Fehler), müssen Sie die Seitentabelle im RAM abfragen. Die Seite wird im TLB aktualisiert.

    DPDK verwendet HugePages, das Seitengrößen von 2 MB und 1 GB unter x86-64 unterstützt, wodurch die Gesamtzahl der Seiten und die Größe der Seitentabelle erheblich reduziert werden, wodurch die Wahrscheinlichkeit eines TLB-Fehlers erheblich verringert und die CPU-Adressierungsleistung verbessert wird.

    4 Weitere Optimierungen

    • SNA (Shared-nothing Architecture), die Softwarearchitektur ist dezentralisiert, versucht globales Teilen zu vermeiden, führt zu globalem Wettbewerb und verliert die Fähigkeit zur horizontalen Expansion. Im NUMA-System wird der Speicher nicht remote über Knoten hinweg verwendet.
    • SIMD (Single Instruction Multiple Data), vom frühesten mmx/sse bis zum neuesten avx2, haben die Fähigkeiten von SIMD zugenommen. DPDK verwendet die Stapelverarbeitung mehrerer Pakete gleichzeitig und verwendet dann die Vektorprogrammierung, um alle Pakete in einem Zyklus zu verarbeiten. Memcpy verwendet beispielsweise SIMD, um die Geschwindigkeit zu erhöhen.
    • CPU-Affinität: CPU-Affinität

    XDP

    Datenverarbeitungsebene, xdp erstellt eine datenschnelle Ebene in der Treiberebene. Das Datenpaket wird verarbeitet, bevor die Daten von der Netzwerkkarten-Hardware in den Speicher übertragen und Skb zugewiesen werden.

    Bitte beachten Sie, dass XDP keinen Kernel-Bypass für die Datenpakete durchführt, sondern nur eine kleine Vorabprüfung durchführt.

    Im Vergleich zu DPDK bietet XDP folgende Vorteile:

    • Keine Notwendigkeit für Codebibliotheken und Lizenzen von Drittanbietern
    • Unterstützt sowohl abgefragte als auch unterbrechungsbasierte Netzwerke
    • Keine Notwendigkeit, große Seiten zuzuweisen
    • Keine dedizierte CPU erforderlich
    • Keine Notwendigkeit Definieren Sie neue sichere Netzwerkmodelle. Zu den XDP-Nutzungsszenarien gehören: DDoS-Abwehr, Firewall, XDP_TX-basierter Lastausgleich, Netzwerkstatistiken
    Komplexe Netzwerk-Probenahme

    • Hochgeschwindigkeits-Handelsplattform
    • OK, das Obige ist die heutige Freigabe. Wenn Sie der Meinung sind, dass es andere Paketsammel-Engines gibt, können Sie eine Nachricht zum Teilen hinterlassen.

Das obige ist der detaillierte Inhalt vonMehrere klassische Linux-Paketsammel-Engines. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So starten Sie Nginx unter Linux So starten Sie Nginx unter Linux Apr 14, 2025 pm 12:51 PM

Schritte zum Starten von Nginx unter Linux: Überprüfen Sie, ob Nginx installiert ist. Verwenden Sie SystemCTL Start Nginx, um den Nginx -Dienst zu starten. Verwenden Sie SystemCTL aktivieren NGINX, um das automatische Start von NGINX beim Systemstart zu aktivieren. Verwenden Sie den SystemCTL -Status NGINX, um zu überprüfen, ob das Startup erfolgreich ist. Besuchen Sie http: // localhost in einem Webbrowser, um die Standard -Begrüßungsseite anzuzeigen.

So überprüfen Sie, ob Nginx gestartet wird So überprüfen Sie, ob Nginx gestartet wird Apr 14, 2025 pm 01:03 PM

So bestätigen Sie, ob Nginx gestartet wird: 1. Verwenden Sie die Befehlszeile: SystemCTL Status Nginx (Linux/Unix), Netstat -ano | FindStr 80 (Windows); 2. Überprüfen Sie, ob Port 80 geöffnet ist; 3. Überprüfen Sie die Nginx -Startmeldung im Systemprotokoll. 4. Verwenden Sie Tools von Drittanbietern wie Nagios, Zabbix und Icinga.

So lösen Sie Nginx403 So lösen Sie Nginx403 Apr 14, 2025 am 10:33 AM

Wie fixiere ich Nginx 403 Verbotener Fehler? Überprüfen Sie die Datei- oder Verzeichnisberechtigungen; 2.Htaccess -Datei prüfen; 3. Überprüfen Sie die Konfigurationsdatei der Nginx; 4. Starten Sie Nginx neu. Weitere mögliche Ursachen sind Firewall -Regeln, Selinux -Einstellungen oder Anwendungsprobleme.

So starten Sie den Nginx -Server So starten Sie den Nginx -Server Apr 14, 2025 pm 12:27 PM

Das Starten eines Nginx-Servers erfordert unterschiedliche Schritte gemäß verschiedenen Betriebssystemen: Linux/UNIX-System: Installieren Sie das NGINX-Paket (z. B. mit APT-Get oder Yum). Verwenden Sie SystemCTL, um einen Nginx -Dienst zu starten (z. B. sudo systemctl start nginx). Windows -System: Laden Sie Windows -Binärdateien herunter und installieren Sie sie. Starten Sie Nginx mit der ausführbaren Datei nginx.exe (z. B. nginx.exe -c conf \ nginx.conf). Unabhängig davon, welches Betriebssystem Sie verwenden, können Sie auf die Server -IP zugreifen

Wie kann ich überprüfen, ob Nginx begonnen wird? Wie kann ich überprüfen, ob Nginx begonnen wird? Apr 14, 2025 pm 12:48 PM

Verwenden Sie unter Linux den folgenden Befehl, um zu überprüfen, ob Nginx gestartet wird: SystemCTL -Status Nginx Richter basierend auf der Befehlsausgabe: Wenn "aktiv: aktiv (lief) angezeigt wird, wird Nginx gestartet. Wenn "Active: Inactive (Dead)" angezeigt wird, wird Nginx gestoppt.

So lösen Sie Nginx403 -Fehler So lösen Sie Nginx403 -Fehler Apr 14, 2025 pm 12:54 PM

Der Server verfügt nicht über die Berechtigung, auf die angeforderte Ressource zuzugreifen, was zu einem NGINX 403 -Fehler führt. Zu den Lösungen gehören: Überprüfung der Dateiberechtigungen. Überprüfen Sie die Konfiguration .htaccess. Überprüfen Sie die Nginx -Konfiguration. Konfigurieren Sie Selinux -Berechtigungen. Überprüfen Sie die Firewall -Regeln. Fehlerbehebung bei anderen Ursachen wie Browserproblemen, Serverausfällen oder anderen möglichen Fehlern.

So lösen Sie Nginx304 Fehler So lösen Sie Nginx304 Fehler Apr 14, 2025 pm 12:45 PM

Antwort auf die Frage: 304 Nicht geänderter Fehler gibt an, dass der Browser die neueste Ressourcenversion der Client -Anfrage zwischengespeichert hat. Lösung: 1. Löschen Sie den Browser -Cache; 2. Deaktivieren Sie den Browser -Cache; 3. Konfigurieren Sie Nginx, um den Client -Cache zu ermöglichen. 4. Überprüfen Sie die Dateiberechtigungen; 5. Datei Hash prüfen; 6. Deaktivieren Sie CDN oder Reverse Proxy -Cache; 7. Starten Sie Nginx neu.

So reinigen Sie das Nginx -Fehlerprotokoll So reinigen Sie das Nginx -Fehlerprotokoll Apr 14, 2025 pm 12:21 PM

Das Fehlerprotokoll befindet sich in/var/log/nginx (Linux) oder/usr/local/var/log/nginx (macOS). Verwenden Sie die Befehlszeile, um die Schritte zu beseitigen: 1. Sicherung des ursprünglichen Protokolls; 2. Erstellen Sie eine leere Datei als neues Protokoll; 3. Starten Sie den Nginx -Dienst neu. Die automatische Reinigung kann auch mit Tools von Drittanbietern wie lehnte oder konfiguriertem verwendet werden.

See all articles