Comment un processeur peut-il gérer un débit de 10 Gigabit par seconde ou plus?

11

Je ne sais pas si c'est le bon endroit pour demander. Ce peut être une question très stupide. Je suppose que certains processeurs doivent traiter des trames de données pour la commutation / le routage. Les processeurs modernes ont une vitesse de quelques GHz. Comment gèrent-ils les données qui arrivent à un rythme plus rapide qu’elles ne fonctionnent?

Ibraheem Moosa
la source

Réponses:

16

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.

vk5tu
la source
Très bonne réponse. Pouvez-vous nous en dire plus the packet will then be exploded into cells to reduce latency?
Eddie
Dans une conception de routeur, vous pouvez simplement envoyer un paquet d'une carte de ligne à une autre via la commutation cross-bar (ou une autre sorte de bus inter-cartes). Mais alors la latence est liée à la longueur du paquet - vous auriez un autre délai de transmission de paquet complet lorsque le paquet est envoyé via la commutation crossbar. Pour éviter cela, nous pouvons avoir plusieurs liens parallèles dans la commutation crossbar et diviser le paquet entre ces liens. Ensuite, la latence pour les gros paquets est très réduite. Une partie d'un paquet divisé est appelée une «cellule».
vk5tu
Je sais que cette réponse date d'il y a deux ans, mais MERCI BEAUCOUP. J'avais la même question que l'affiche originale et j'ai trouvé votre réponse dans ma recherche. Il est TRÈS bien écrit et complet. Merci!
loneboat
0

Aujourd'hui, presque toutes les commutations et une grande partie du routage sont gérées par le matériel, de sorte que la vitesse du processeur entre en jeu pour les exceptions. Pour des choses comme les serveurs, il est possible que le processeur ne soit pas assez rapide. Cela a été le cas dans le passé. Lorsque Ethernet 1 Gbps est sorti pour la première fois, le bus utilisé dans les PC et les serveurs ne pouvait gérer que 400 Mbps.

Ce qui se passe lorsque le processeur n'est pas assez rapide, c'est que le trafic est interrompu. Une grande partie du trafic peut être supprimée, de toute façon, car c'est ainsi que la congestion est gérée, si elle est effectuée correctement. RED (Random Early Detection) est une méthode utilisée pour supprimer aléatoirement des paquets dans les files d'attente afin de les empêcher de remplir et de perdre des paquets. Cela peut aider à empêcher la synchronisation TCP. De nombreuses baisses se produisent sur les commutateurs, où plusieurs ports d'une vitesse peuvent devoir envoyer vers un autre port unique de la même vitesse.

Ron Maupin
la source
1
Cela confond les rejets d'entrée avec les gouttes de sortie. Les rejets se produisent généralement lorsque le tampon en anneau de l'interface Ethernet est saturé - comme cela se produit lorsqu'un processeur ne peut pas suivre le rythme d'arrivée des données. Ce ring-buffer est trop petit pour que RED soit implémenté.
vk5tu
@ vk5tu, vous avez manqué mon point de vue que le trafic est tout le temps interrompu, que ce soit en entrée ou en sortie. Si une partie du système ne peut pas gérer la quantité de trafic, une partie sera supprimée et une partie sera supprimée exprès.
Ron Maupin