« Fonctionnement d'un ordinateur/Le matériel réseau » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 82 :
====Arbitrage hors de la switch fabric====
 
Si les tampons sont remplies, les paquets en trop sont perdus et n'arrivent pas à destination : on laisse la situation entre les « mains » du logiciel. Certains tampons FIFO sont placés entre la switch fabric et l'interface réseau de sortie, au cas où celle-ci soit plus lente que la switch fabric : on parle d''''output buffering'''. D'autres sont placés en entrée de la switch fabric, celle-ci pouvant mettre du temps à traiter les paquets qui lui arrivent : on parle d''''input buffering'''. Il est parfaitement possible d'utiliser les deux en même temps, ce qui porte le nom d''''input-output buffering'''.
 
Certains tampons FIFO sont placés entre la switch fabric et l'interface réseau de sortie, au cas où celle-ci soit plus lente que la switch fabric : on parle d''''output buffering'''.
<gallery widths="300" heights="250">
 
File:Input-buffering.png|''Input buffering''
[[File:Output-buffering.png|centre|vignette|upright=1.5|''Output buffering'']]
 
File:Input-output-buffering.png|''Input-Output buffering''
D'autres sont placés en entrée de la switch fabric, celle-ci pouvant mettre du temps à traiter les paquets qui lui arrivent : on parle d''''input buffering'''.
</gallery>
 
[[File:Input-buffering.png|centre|vignette|upright=1.5|''Input buffering'']]
 
Il est parfaitement possible d'utiliser les deux en même temps, ce qui porte le nom d''''input-output buffering'''.
 
[[File:Input-output-buffering.png|centre|vignette|upright=1.5|''Input-Output buffering'']]
 
Si une requête est en attente via input buffering, elle va bloquer les requêtes suivantes sur le port d'entrée, même si celles-ci ont un port de sortie différent : on parle d''''head of line blocking'''. Pour l'éliminer, certains switchs utilisent le Virtual output queing, à savoir découper chaque tampon FIFO en sous-tampons, chacun prenant en charge les paquets destinés à un port de sortie précis. Avec cette technique, on peut traiter les requêtes dans le désordre, afin de profiter au maximum des ports libres.
 
[[File:Head-line-blocking.jpg|centre|vignette|upright=2|Head-of-line blocking.]]
 
====Arbitrage dans la switch fabric====
Ligne 98 ⟶ 104 :
Certains switchs intégrent l'arbitrage directement dans la switch fabric, en intégrant les tampons FIFO dans celle-ci. Dans le cadre d'un switch à partage d'espace, à base de crossbar, l'incorporation de l'arbitrage est relativement aisée. Il suffit de remplacer les interrupteurs ligne/colonne par des tampons FIFO. Le nombre de FIFO est de N * M pour un switch à N ports d'entrée et M ports de sortie. Pour les switchs qui ont un grand nombre de ports d'entrée et de sortie, cela devient rapidement impraticable. Pour éviter cela, les switchs à haute performance réduisent la taille des FIFO intégrées dans le crossbar, mais rajoutent de grosses FIFO sur les ports d'entrée (par ajout d'input buffering). Les simulations montrent que le rapport entre performance et nombre de portes logiques utilisées est meilleur avec cette technique.
 
[[File:Switch Crossbar avec arbitrage intégré.png|centre|vignette|upright=2|Switch Crossbar avec arbitrage intégré.]]
 
====Arbitrage pour les switchs à partage d'espace====
Ligne 104 ⟶ 110 :
Pour les switch à partage d'espace, les tampons FIFO sont incorporés directement entre le MUX pour les ports d'entrée, et le reste (filtreur d'adresse ou DEMUX). Ces FIFOS sont généralement implémenté avec une mémoire RAM. D'où le nom de '''switchs à mémoire partagée''' donné à de tels switchs. Ces switchs permettent de gérer l'arbitrage directement dans la switch fabric : la mémoire centrale stocke les données des tampons FIFO d'arbitrage des ports d'entrée. Le switch présenté dans le schéma ci-dessous peut être transformé en switch sans partage de temps avec une mémoire multiport : il suffit d'avoir autant de ports d'écriture que de ports d'entrée, et d'adapter les circuits de gestion de la mémoire. Dans ce qui va suivre, mes schémas utiliseront un switch à partage de temps.
 
[[File:Switch à mémoire partagée.png|centre|vignette|upright=2|Switch à mémoire partagée.]]
 
Reste que ces tampons FIFO peuvent s'implémenter de différentes manières. La solution la plus simple consiste à utiliser un cache (une mémoire associative, plus précisément). Chaque ligne de ce cache mémorise un paquet, son numéro de port de sortie et son ordre d'envoi (afin de simuler une FIFO). Pour mémoriser l'ordre d'envoi, le switch attribue un numéro de séquence à chaque paquet : plus ce numéro est grand, plus le paquet est ancien. Obtenir le prochain paquet à envoyer demande simplement d'envoyer le numéro du prochain paquet (déterminé par un compteur) et le numéro du port de sortie à la mémoire associative. Celle-ci renvoie alors le paquet à envoyer sur ce port de sortie.
 
Une autre solution consiste à utiliser une mémoire RAM pour stocker les paquets dans des listes doublement chainées. Il y a une liste par port de sortie : tous les paquets destinés à un port de sortie sont ajoutés à la liste qui lui est associée. Les circuits qui gèrent la mémoire RAM doivent gérer eux-mêmes les listes chaînées, ce qui fait qu'ils contiennent deux registres par liste : un pour l'adresse en tête de liste et un pour le dernier élément. Il y a un circuit pour l'ajout et un autre pour le retrait des paquets. En plus de cela, les circuits de gestion de la mémoire doivent allouer dynamiquement les nœuds de la liste et libérer la mémoire. La mémoire utilise des Bytes démesurément grands, capables de mémoriser un paquet de plusieurs centaines de bits sans problèmes. Ainsi, le switch a juste besoin de mémoriser quels sont les Bytes libres et les Bytes occupés dans une mémoire annexe : la free list, souvent implémentée avec une mémoire FIFO.
 
* Une première méthode mémorise les données dans la RAM, ainsi que l'ordre de stockage des paquets.
 
[[File:Linked-list switch.png|centre|vignette|upright=2|Linked-list switch]]
 
* La deuxième méthode réserve la mémoire centrale pour le stockage des paquets et maintient l'ordre d'envoi des paquets dans des '''tampons FIFO''', qui mémorisent les adresses des paquets dans la mémoire centrale. La taille fixe des mémoires FIFO ne permet pas d'allouer toute la mémoire pour seulement quelques ports. Mais cette organisation permet de gérer facilement le multicast et le broadcast : on peut facilement ajouter un paquet dans toutes les mémoires FIFO, simultanément avec un circuit d'ajout conçu pour.
 
[[File:FIFO switch.png|centre|vignette|upright=2|FIFO switch]]
<gallery widths=450px heights=350px>
Linked-list switch.png|Linked-list switch
FIFO switch.png|FIFO switch
</gallery>
 
==Les routeurs==