Vous avez tout à fait raison, si nous devons utiliser un cycle d'instructions par bit, alors 10 Gbps ne seraient pas réalisables. Donc, la première chose à noter est que nous traitons un mot par instruction CPU - 64 bits.
Même alors, la pire chose que nous puissions faire pour les performances est que le CPU accède à tous les mots d'un paquet. Ainsi l'accent mis sur la gestion "zéro copie" des paquets. Une partie de cette ruse se trouve dans les interfaces elles-mêmes: elles ont un DMA ("Direct memory access") pour que la puce du contrôleur Ethernet copie les données dans la RAM; ils calculent les sommes de contrôle afin que le CPU n'ait pas à accéder à tous les mots du paquet pour le faire. Une partie est dans la conception de la structure de données: nous veillons à aligner les tampons de paquets afin de pouvoir les déplacer en changeant le propriétaire d'une entrée de table de pages. Une partie de ce programme est juste une programmation minutieuse pour garantir que les données des paquets sont accédées le moins de fois possible, et de préférence pas du tout accédées jusqu'au programme d'application de réception.
Une fois que nous avons fait tout cela, la prochaine limitation est la surcharge de traitement des paquets un par un. Ainsi, il existe un tas de fonctionnalités de "déchargement de segmentation" à la fois dans le contrôleur Ethernet et dans le noyau afin que nous puissions gérer des groupes de paquets. Nous retardons même la récupération des données du contrôleur Ethernet afin que ces groupes soient plus grands.
Enfin, nous avons des raccourcis spéciaux, comme l'appel sendfile () du noyau qui est un chemin express du disque au réseau en utilisant le minimum de travail.
Nous pouvons même un routage dans des cas particuliers (le transfert de paquets d'une interface à une autre) en utilisant les fonctionnalités matérielles des cartes d'interface réseau et en traitant le bus PCI comme un bus entre les cartes plutôt que d'impliquer le CPU. Cela ne peut pas être fait dans les systèmes d'exploitation à usage général, mais des fournisseurs comme Intel fournissent des bibliothèques de logiciels pour implémenter de telles fonctionnalités sur leurs contrôleurs Ethernet.
En nous éloignant complètement des processeurs, nous pouvons même créer des routeurs spéciaux où toutes les tâches de transfert se produisent dans le matériel. Étant donné que le bus PCI serait alors une limitation, ils exécutent plusieurs bus parallèles; ou même plusieurs bus parallèles vers plusieurs ensembles de commutateurs crossbar parallèles. À une extrémité du marché, un petit commutateur Ethernet basé sur TCAM en serait un exemple; à l'autre bout du marché, le Juniper M40 serait de conception canonique.
Un commutateur typique commencera à recevoir un paquet, recherchera l'adresse de destination dans le TCAM, attachera une étiquette avec le port de sortie au paquet, puis DMA le paquet encore entrant au contrôleur du port de sortie. Notez que si le port de sortie est encombré, tout ce qui peut être fait sur ce simple commutateur est de jeter le paquet d'entrée. Ainsi, les commutateurs simples ne font pas un bon choix lorsque les liaisons changent de vitesse et qu'une mise en file d'attente est souhaitable. Bien sûr, des commutateurs plus sophistiqués existent, pour lesquels vous payez plus.
Un routeur typique recevra un paquet et le conservera dans une courte file d'attente. L'adresse IP de destination sera recherchée dans la RAM statique, le paquet sera ensuite éclaté en cellules pour réduire la latence et chaque cellule sera envoyée à un commutateur cross-bar vers la carte de sortie. Cette carte va réassembler les cellules dans un paquet et mettre le paquet en file d'attente sur l'interface de sortie. La mise en file d'attente sur l'interface de sortie peut être sophistiquée.
the packet will then be exploded into cells to reduce latency
?