Table des matières
libpcap" >libpcap
libpcap-mmap" >libpcap-mmap
PF_RING" >PF_RING
DPDK" >DPDK
1 UIO+mmap implémente zéro copie" >1 UIO+mmap implémente zéro copie
2 UIO+PMD réduit les interruptions et le changement de contexte du processeur" >2 UIO+PMD réduit les interruptions et le changement de contexte du processeur
3 HugePages réduisent les erreurs TLB" >3 HugePages réduisent les erreurs TLB
4 Autres optimisations" >4 Autres optimisations
XDP" >XDP
Maison Opération et maintenance exploitation et maintenance Linux Plusieurs moteurs de collecte de paquets Linux classiques

Plusieurs moteurs de collecte de paquets Linux classiques

Aug 04, 2023 pm 04:07 PM
linux

Cet article répertorie quatre moteurs de collecte de paquets Linux classiques. Si vous pensez qu'il y en a d'autres, vous pouvez laisser un message. Ces quatre sont :

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

libpcap

Le mécanisme de capture de paquets de

libpcap se trouve au niveau de la couche liaison de données. Ajouter un contournement processus qui n'interfère pas avec le traitement de la propre pile de protocoles réseau du système. Les paquets de données envoyés et reçus sont filtrés et mis en mémoire tampon via le noyau Linux, et finalement transmis directement à l'application de couche supérieure.

  1. Le paquet de données arrive sur le périphérique de la carte réseau.
  2. Le périphérique de carte réseau effectue des opérations DMA en fonction de la configuration. ("Première copie" : Registre de la carte réseau -> tampon en anneau alloué par le noyau pour la carte réseau)
  3. La carte réseau envoie une interruption et réveille le processeur.
  4. Le logiciel pilote lit à partir du tampon en anneau et remplit la structure skbuff du noyau ( "Deuxième copie"  : tampon en anneau de la carte réseau du noyau-> structure de données spécifique au noyau skbuff)
  5. Appelez ensuite la fonction netif_receive_skb :
  • 5.1 S'il existe un programme de capture de paquets, entrez le filtre BPF via la sous-interface réseau et copiez les paquets correspondant aux règles dans le cache du noyau système ( "3ème copie " ). BPF associe un filtre et deux tampons à chaque programme de capture de paquets nécessitant un service. BPF alloue des tampons et sa taille est généralement de 4 Ko. Le tampon de stockage est utilisé pour recevoir les données de l'adaptateur ; le tampon de conservation est utilisé pour copier les paquets vers l'application.
  • 5.2 Traitez la fonction de pontage de la couche liaison de données ;
  • 5.3 Déterminez le protocole de couche supérieure en fonction du champ skb->protocol et soumettez-le à la couche réseau pour traitement, entrez la pile de protocole réseau et effectuer un traitement de haut niveau.
  • libpcap contourne le traitement de la pile de protocoles du processus de collecte de paquets du noyau Linux, permettant à l'API de l'espace utilisateur d'appeler directement le socket PF_PACKET pour obtenir une copie du paquet de données du pilote de couche de liaison et de le mettre en mémoire tampon à partir du La zone du noyau est copiée dans le tampon de l'espace utilisateur ("La 4ème copie")
  • libpcap-mmap

    libpcap-mmap est une amélioration de l'ancienne implémentation de libpcap et est essentiellement utilisée dans la nouvelle versions du mécanisme libpcap packet_mmap. PACKET_MMAP réduit une copie de mémoire via mmap ("La quatrième copie a disparu"), réduit les appels système fréquents et améliore considérablement l'efficacité de la capture de paquets.

    PF_RING

    Nous avons vu que libpcap avait 4 copies de mémoire auparavant. libpcap_mmap dispose de 3 copies mémoire. La solution principale proposée par PF_RING est de réduire le nombre de copies des messages lors de la transmission.

    Nous pouvons voir que par rapport à libpcap_mmap, pfring permet à la mémoire de l'espace utilisateur de mapper directement avec rx_buffer. Cela réduit une autre copie ( "La deuxième copie de libpcap_mmap"  : rx_buffer->skb)

    PF-RING ZC implémente la technologie DNA (Direct NIC Access direct network card access) pour mapper l'espace mémoire utilisateur à la mémoire du pilote. espace afin que l'application de l'utilisateur puisse accéder directement aux registres et aux données de la carte réseau.

    De cette façon, la mise en mémoire tampon des paquets de données dans le noyau est évitée et une copie est réduite ("La première copie de libpcap", copie du tampon DMA vers le noyau). Il s’agit d’une copie totalement nulle.

    L'inconvénient est qu'une seule application peut ouvrir l'anneau DMA à la fois (notez que les cartes réseau actuelles peuvent avoir plusieurs files d'attente RX/TX, permettant à une application d'être sur chaque file d'attente en même temps), autrement dit , plusieurs applications en mode utilisateur doivent communiquer entre elles pour distribuer des paquets de données.

    DPDK

    pf-ring zc et dpdk peuvent obtenir une copie nulle des paquets de données. Les deux contournent le noyau, mais les principes d'implémentation sont légèrement différents. PF-ring zc prend en charge les paquets de données via le pilote zc (également au niveau de la couche application), et dpdk est implémenté sur la base de UIO.

    1 UIO+mmap implémente zéro copie

    UIO (Userspace I/O) est une technologie d'E/S qui s'exécute dans l'espace utilisateur. Généralement, les périphériques pilotes des systèmes Linux s'exécutent dans l'espace noyau et peuvent être appelés par les applications dans l'espace utilisateur. Cependant, UIO exécute une petite partie du pilote dans l'espace noyau et implémente la grande majorité du pilote dans l'espace utilisateur. Fonction. Grâce au mécanisme UIO fourni par Linux, le noyau peut être contourné et tout le travail de traitement des paquets est effectué dans l'espace utilisateur.

    2 UIO+PMD réduit les interruptions et le changement de contexte du processeur

    Le pilote UIO de DPDK bloque les interruptions émises par le matériel, puis utilise l'interrogation active en mode utilisateur. Ce mode est appelé PMD (Poll Mode Driver).

    Par rapport à DPDK, pf-ring (pas de zc) utilise l'interrogation NAPI et l'interrogation de la couche d'application, tandis que pf-ring zc est similaire à DPDK et utilise uniquement l'interrogation de la couche d'application.

    3 HugePages réduisent les erreurs TLB

    Après l'introduction de la MMU (Memory Management Unit) dans le système d'exploitation, le CPU doit accéder à la mémoire deux fois pour lire les données de la mémoire. La première fois consiste à interroger la table des pages pour convertir l'adresse logique en adresse physique, puis à accéder à l'adresse physique pour lire des données ou des instructions.

    Afin de réduire le problème du temps de requête long causé par un trop grand nombre de pages et des tables de pages trop volumineuses, TLB (Translation Lookaside Buffer) a été introduit, qui peut être traduit comme un tampon de traduction d'adresses. Le TLB est une unité de gestion de mémoire, généralement stockée dans un registre, qui stocke une petite partie des entrées de table de pages les plus susceptibles d'être consultées actuellement.

    Après l'introduction du TLB, le CPU ira d'abord au TLB pour s'adresser. Étant donné que le TLB est stocké dans un registre et ne contient qu'une petite partie des entrées de la table des pages, la vitesse de requête est très rapide. Si l'adressage dans TLB réussit (TLB hit), il n'est pas nécessaire d'interroger la table des pages dans la RAM ; si l'adressage dans TLB échoue (TLB miss), vous devez interroger la table des pages dans la RAM. Après avoir interrogé la page. sera mis à jour dans le TLB.

    DPDK utilise HugePages, qui prend en charge des tailles de page de 2 Mo et 1 Go sous x86-64, ce qui réduit considérablement le nombre total de pages et la taille de la table des pages, réduisant ainsi considérablement la probabilité de manque de TLB et améliorant les performances d'adressage du processeur.

    4 Autres optimisations

    • SNA (Shared-nothing Architecture), l'architecture logicielle est décentralisée, essayant d'éviter le partage mondial, provoquant une concurrence mondiale et perdant la capacité de s'étendre horizontalement. Sous le système NUMA, la mémoire n'est pas utilisée à distance entre les nœuds.
    • SIMD (Single Instruction Multiple Data), du premier mmx/sse au dernier avx2, les capacités du SIMD ont augmenté. DPDK utilise le traitement par lots de plusieurs paquets en même temps, puis utilise la programmation vectorielle pour traiter tous les paquets en un seul cycle. Par exemple, memcpy utilise SIMD pour augmenter la vitesse.
    • affinité CPU : c'est-à-dire affinité CPU

    XDP

    Plan de traitement des données, xdp crée un plan rapide de données dans la couche pilote. Le paquet de données est traité avant que les données ne soient enregistrées par le matériel de la carte réseau dans la mémoire et que skb ne soit alloué.

    Veuillez noter que XDP n'effectue pas de contournement du noyau sur les paquets de données, il effectue simplement une petite vérification préalable.

    Par rapport à DPDK, XDP présente les avantages suivants :

    Pas besoin de bibliothèques de codes et de licences tierces définir de nouveaux modèles de réseau sécurisés
    • Les scénarios d'utilisation de XDP incluent :
    • Défense DDoS
    • Pare-feu
    • Équilibrage de charge basé sur XDP_TX
    • Statistiques réseau

    Échantillonnage de réseaux complexes
    • Plateforme de trading à grande vitesse
    • OK, ce qui précède est le partage d'aujourd'hui. Si vous pensez qu'il existe d'autres moteurs de collecte de paquets, vous pouvez laisser un message à partager.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Impossible de se connecter à MySQL en tant que racine Impossible de se connecter à MySQL en tant que racine Apr 08, 2025 pm 04:54 PM

Les principales raisons pour lesquelles vous ne pouvez pas vous connecter à MySQL en tant que racines sont des problèmes d'autorisation, des erreurs de fichier de configuration, des problèmes de mot de passe incohérents, des problèmes de fichiers de socket ou une interception de pare-feu. La solution comprend: vérifiez si le paramètre Bind-Address dans le fichier de configuration est configuré correctement. Vérifiez si les autorisations de l'utilisateur racine ont été modifiées ou supprimées et réinitialisées. Vérifiez que le mot de passe est précis, y compris les cas et les caractères spéciaux. Vérifiez les paramètres et les chemins d'autorisation du fichier de socket. Vérifiez que le pare-feu bloque les connexions au serveur MySQL.

C compilation conditionnelle du langage: un guide détaillé pour les débutants vers des applications pratiques C compilation conditionnelle du langage: un guide détaillé pour les débutants vers des applications pratiques Apr 04, 2025 am 10:48 AM

C La compilation conditionnelle du langage est un mécanisme pour compiler sélectivement les blocs de code en fonction des conditions de temps de compilation. Les méthodes d'introduction incluent: l'utilisation des directives #IF et #ELSE pour sélectionner des blocs de code en fonction des conditions. Les expressions conditionnelles couramment utilisées incluent STDC, _WIN32 et Linux. Cas pratique: imprimez différents messages en fonction du système d'exploitation. Utilisez différents types de données en fonction du nombre de chiffres du système. Différents fichiers d'en-tête sont pris en charge selon le compilateur. La compilation conditionnelle améliore la portabilité et la flexibilité du code, ce qui le rend adaptable aux modifications du compilateur, du système d'exploitation et de l'architecture du processeur.

Quels sont les 5 composants de base de Linux? Quels sont les 5 composants de base de Linux? Apr 06, 2025 am 12:05 AM

Les cinq composants de base de Linux sont: 1. Le noyau, gérant les ressources matérielles; 2. La bibliothèque système, fournissant des fonctions et des services; 3. Shell, l'interface pour les utilisateurs pour interagir avec le système; 4. Le système de fichiers, stockant et organisant des données; 5. Applications, en utilisant des ressources système pour implémenter les fonctions.

Comment résoudre MySQL ne peut pas être démarré Comment résoudre MySQL ne peut pas être démarré Apr 08, 2025 pm 02:21 PM

Il existe de nombreuses raisons pour lesquelles la startup MySQL échoue, et elle peut être diagnostiquée en vérifiant le journal des erreurs. Les causes courantes incluent les conflits de port (vérifier l'occupation du port et la configuration de modification), les problèmes d'autorisation (vérifier le service exécutant les autorisations des utilisateurs), les erreurs de fichier de configuration (vérifier les paramètres des paramètres), la corruption du répertoire de données (restaurer les données ou reconstruire l'espace de la table), les problèmes d'espace de la table InNODB (vérifier les fichiers IBDATA1), la défaillance du chargement du plug-in (vérification du journal des erreurs). Lors de la résolution de problèmes, vous devez les analyser en fonction du journal d'erreur, trouver la cause profonde du problème et développer l'habitude de sauvegarder régulièrement les données pour prévenir et résoudre des problèmes.

MySQL peut-il fonctionner sur Android MySQL peut-il fonctionner sur Android Apr 08, 2025 pm 05:03 PM

MySQL ne peut pas fonctionner directement sur Android, mais il peut être implémenté indirectement en utilisant les méthodes suivantes: à l'aide de la base de données légère SQLite, qui est construite sur le système Android, ne nécessite pas de serveur distinct et a une petite utilisation des ressources, qui est très adaptée aux applications de périphériques mobiles. Connectez-vous à distance au serveur MySQL et connectez-vous à la base de données MySQL sur le serveur distant via le réseau pour la lecture et l'écriture de données, mais il existe des inconvénients tels que des dépendances de réseau solides, des problèmes de sécurité et des coûts de serveur.

Solutions aux erreurs rapportées par MySQL sur une version système spécifique Solutions aux erreurs rapportées par MySQL sur une version système spécifique Apr 08, 2025 am 11:54 AM

La solution à l'erreur d'installation de MySQL est: 1. Vérifiez soigneusement l'environnement système pour vous assurer que les exigences de la bibliothèque de dépendance MySQL sont satisfaites. Différents systèmes d'exploitation et exigences de version sont différents; 2. Lisez soigneusement le message d'erreur et prenez des mesures correspondantes en fonction des invites (telles que les fichiers de bibliothèque manquants ou les autorisations insuffisantes), telles que l'installation de dépendances ou l'utilisation de commandes sudo; 3. Si nécessaire, essayez d'installer le code source et vérifiez soigneusement le journal de compilation, mais cela nécessite une certaine quantité de connaissances et d'expérience Linux. La clé pour finalement résoudre le problème est de vérifier soigneusement l'environnement du système et les informations d'erreur et de se référer aux documents officiels.

MySQL ne peut pas être installé après le téléchargement MySQL ne peut pas être installé après le téléchargement Apr 08, 2025 am 11:24 AM

Les principales raisons de la défaillance de l'installation de MySQL sont les suivantes: 1. Problèmes d'autorisation, vous devez s'exécuter en tant qu'administrateur ou utiliser la commande sudo; 2. Des dépendances sont manquantes et vous devez installer des packages de développement pertinents; 3. Conflits du port, vous devez fermer le programme qui occupe le port 3306 ou modifier le fichier de configuration; 4. Le package d'installation est corrompu, vous devez télécharger et vérifier l'intégrité; 5. La variable d'environnement est mal configurée et les variables d'environnement doivent être correctement configurées en fonction du système d'exploitation. Résolvez ces problèmes et vérifiez soigneusement chaque étape pour installer avec succès MySQL.

Impossible d'accéder à MySQL depuis Terminal Impossible d'accéder à MySQL depuis Terminal Apr 08, 2025 pm 04:57 PM

Impossible d'accéder à MySQL à partir du terminal peut être dû à: le service MySQL n'est pas en cours d'exécution; Erreur de commande de connexion; autorisations insuffisantes; Connexion de blocs de pare-feu; Erreur de fichier de configuration MySQL.

See all articles