« Fonctionnement d'un ordinateur/Les périphériques et les cartes d'extension » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 122 :
Les techniques de broadcast ou de multicast permettent d'envoyer une donnée présentée sur un port d'entrée sur plusieurs sorties : on peut envoyer un message identique à plusieurs ordinateurs en même temps, sans devoir envoyer plusieurs copies. Certains switchs permettent de gérer cela directement dans le matériel, soit en dupliquant les paquets, soit en connectant une entrée sur plusieurs sorties. Certains switchs traitent les ports d'entrée à tour de rôle, l'un après l'autre : on parle de '''switchs à partage de temps''', aussi appelés time-sharing switch chez les anglo-saxons. D'autres switchs permettent de gérer tous les ports d'entrée à la fois : on parle de '''switchs à partage d'espace''', ou space-sharing switchs chez les anglo-saxons.
 
Les switchs à partage d'espace sont de loin les plus simples à comprendre. Ceux-ci sont simplement composés d'un ensemble de liaisons point à point, qui relient chacune un port d'entrée à un port de sortie. Chaque port d'entrée est relié à chaque port de sortie, chaque liaison pouvant être activée ou désactivée selon les besoins. Dans le cas le plus simple, on peut les concevoir avec des multiplexeurs, ou avec un '''réseau crossbar'''. Ce dernier est composé de fils organisés en lignes et en colonnes. À l'intersection de chaque ligne et de colonne, on trouve un interrupteur qui relie la ligne et la colonne. Le nombre d'interrupteurs est de N * M pour un switch à N ports d'entrée et M ports de sortie, ce qui devient impraticable pour les switchs avec beaucoup de ports. On peut utiliser plusieurs switchs crossbar pour former un switch plus gros, les différentes manières donnant respectivement un '''réseau CLOS''', un '''réseau de Benes''', un '''réseau de banyan''', les '''Switch Sunshine''', et bien d'autres.
 
<gallery widths=450px heights=200px>
Ligne 134 :
Switch à partage de temps conçu avec des multiplexeurs.png|Switch à partage de temps conçu avec des multiplexeurs
Switch à média partagé.png|Switch à média partagé
</gallery>
 
Certains switchs remplacent le bus interne par une mémoire RAM : ce sont les '''switchs à mémoire partagée'''. 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. Reste que ces tampons FIFO peuvent s'implémenter de différentes manières.
* Une première méthode mémorise les données dans des '''listes doublement chaînées''' dans la RAM. Les circuits qui gèrent la mémoire partagée 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.
* 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.
* Une autre solution, nettement plus simple, consiste à remplacer la mémoire RAM du switch par un cache (une mémoire associative, plus précisément).
 
<gallery widths=450px heights=350px>
Switch à mémoire partagée.png|Switch à mémoire partagée.
Linked-list switch.png|Linked-list switch
FIFO switch.png|FIFO switch
</gallery>
 
===Arbitrage===
 
La switch fabric est relativement lente comparée au temps d'envoi et de réception d'un paquet, ce qui fait qu'il est nécessaire de mettre ceux-ci en attente tant que la switch fabric est occupée avec le paquet précédent. De même, il faut gérer le cas où plusieurs paquets veulent accéder au même port de sortie, ce qui impose d'envoyer les paquets les uns après les autres, certains étant mis en attente (il arrive cependant que certains paquets soient perdus). Dans tous les cas, qui dit mise en attente dit : utilisation de mémoires tampons de type FIFO. 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. 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. 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'''. Enfin, certains switchs intégrent l'arbitrage directement dans la switch fabric, en intégrant les tampons FIFO dans celle-ci. C'est notamment possible avec les switch crossbar.
 
<gallery widths=400px heights=200px>
Ligne 156 ⟶ 145 :
Output-buffering.png|Output-buffering
Input-output-buffering.png|Input-output-buffering
</gallery>
Switch Crossbar avec arbitrage intégré.png|Switch Crossbar avec arbitrage intégré
 
Enfin, 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|Switch Crossbar avec arbitrage intégré.]]
 
CertainsPour switchsles switch à partage d'espace, les tampons FIFO sont incorporés directement remplacententre le busMUX internepour parles ports d'entrée, et le reste (filtreue rd'adresse ou DEMUX). Ces FIFOS sont généralement implémenté avec une mémoire RAM. :D'où cele sontnom lesde '''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. Reste que ces tampons FIFO peuvent s'implémenter de différentes manières.
* Une première méthode mémorise les données dans des '''listes doublement chaînées''' dans la RAM. Les circuits qui gèrent la mémoire partagée 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.
* 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.
* Une autre solution, nettement plus simple, consiste à remplacer la mémoire RAM du switch par un cache (une mémoire associative, plus précisément).
 
<gallery widths=450px heights=350px>
Switch à mémoire partagée.png|Switch à mémoire partagée.
Linked-list switch.png|Linked-list switch
FIFO switch.png|FIFO switch
</gallery>