Aller au contenu

Fonctionnement d'un ordinateur/Les architectures tolérantes aux pannes

Un livre de Wikilivres.

Un ordinateur n'est jamais un composant parfait et des pannes peuvent survenir de temps à autre. Ces pannes peuvent être logicielles (un logiciel qui plante ou qui a un bug) ou matérielles (un composant cesse de fonctionner ou qui donne un résultat faux). Elles peuvent ne se manifester qu’occasionnellement, tandis que d'autres sont des pannes permanentes. Dans des milieux comme l'aéronautique, les satellites, ou dans tout système dit critique, on doit limiter à presque rien l'impact des pannes et de leurs conséquences : des vies peuvent être en jeu. Pour cela, il existe des systèmes tolérants aux pannes, qui peuvent continuer de fonctionner même avec un ou plusieurs composants en panne.

Illustration de la redondance matérielle. On voit sur ce schéma que le processeur, la mémoire et les contrôleurs d’entrée-sortie sont dupliqués.

La tolérance aux pannes se base sur la redondance : on duplique du matériel, des données, ou des logiciels en plusieurs exemplaires. Ainsi, si un exemplaire tombe en panne, les autres pourront prendre la relève. Ces solutions matérielles pour tolérer les pannes sont relativement couteuses, dupliquer du matériel n'étant pas sans cout. Aussi, la redondance ne s'utilise que quand le besoin de fiabilité est fort, typiquement dans les industries aéronautique, spatiale, ferroviaire, automobile et autres. Dans les ordinateurs, cette redondance peut prendre plusieurs formes :

  • une redondance des données, qui est à la base des codes correcteurs d'erreur et des systèmes RAID ;
  • une redondance matérielle : on duplique des serveurs, des unités de calcul, des processeurs ou de la mémoire, des disques durs (RAID), et ainsi de suite ;
  • une redondance logicielle, où plusieurs exemplaires d'un même programme font leurs calculs dans leur coin.

Les architectures tolérantes aux pannes dupliquent du matériel, que ce soit des ordinateurs, des composants (processeurs, mémoires, disques durs), voire des portions de composants (cœurs de processeurs, unités de calcul). Si un composant tombe en panne, les autres continuent de fonctionner. Par exemple, on peut utiliser plusieurs ordinateurs identiques, qui font la même chose en parallèle. Si un ordinateur tombe en panne, les autres prendront le relais. On peut classer les techniques de redondances matérielles en deux :

  • les méthodes actives, où l'on doit détecter les erreurs et reconfigurer le circuit pour corriger la panne ;
  • les méthodes passives, qui masquent les erreurs sans pour autant faire quoique ce soit sur le composant fautif ;
  • les méthodes hybrides, qui mélangent les méthodes passives et les méthodes actives.

La redondance matérielle passive

[modifier | modifier le wikicode]

Avec la redondance matérielle passive, tous les composants travaillent en parallèle : ils reçoivent les données en entrée, les traitent, et fournissent un résultat plus ou moins en même temps. La sortie des composants est reliée à un système de vote à majorité. Avec le vote à majorité "classique", on choisit la valeur majoritaire parmi les différents résultats. Ce vote à majorité peut aussi s'effectuer non au niveau du résultat, mais sur des bits de même poids, de la même colonne. Des variantes de ce système consistent à prendre non pas le résultat ou bit majoritaire, mais seulement le plus fréquent (ou la médiane des différents résultats).

Tolérance aux pannes matérielle passive

Le circuit de vote à majorité est un point faillible du système : s'il tombe en panne, tout le système tombe en panne. Pour éviter cela, il est là possible de dupliquer le système de vote à majorité.

Triple Modular Redundancy et sa variante améliorée

La redondance matérielle active

[modifier | modifier le wikicode]

La redondance active ne masque pas les pannes comme peut le faire la redondance passive. Elle va détecter les pannes et passer le relais du composant en panne à un composant fonctionnel. Ces méthodes se déclinent en deux grandes catégories :

  • d'un côté celles où les composants travaillent en parallèle et où la reconfiguration du circuit suffit ;
  • de l'autre, celles où un seul composant fonctionne à la fois, et où la correction d'une panne demande de reprendre les calculs de zéro.

La duplication avec comparaison

[modifier | modifier le wikicode]

Une première technique de redondance active se contente de dupliquer le composant en un composant principal et un composant de réserve. On peut alors détecter une erreur en comparant la sortie des deux composants : si elle est différente, on est certain qu'il y a eu une erreur (on suppose qu'il n'y en a pas eu en cas d'accord entre les deux composants). Une fois l'erreur détectée, on ne peut cependant pas la corriger.

Duplication avec comparaison

Le Standby Sparing

[modifier | modifier le wikicode]

Avec cette méthode, le système de correction des pannes choisit un résultat parmi ceux qu'il reçoit, et considère que ce résultat est le bon. En somme, il choisit la sortie d'un composant parmi toutes les autres : c'est donc un multiplexeur ou un switch. Quand le composant choisit tombe en panne, le multiplexeur/switch se reconfigure et choisit alors une autre sortie (celle d'un autre composant). Reste que cette configuration du switch demande de détecter les pannes, afin de commander le multiplexeur switch. On trouve donc, pour chaque composant, un système de détection des pannes, ainsi qu'un circuit combinatoire qui commande le multiplexeur/switch.

Standby Sparing

Le Pair And Spare

[modifier | modifier le wikicode]

Il faut noter que les deux techniques précédentes sont loin d'être incompatibles. On peut notamment les utiliser de concert : la technique de duplication par comparaison peut être utilisée pour détecter les erreurs, et la technique du Standby Sparing pour effectuer la correction. On peut aussi faire l'inverse.

Pair And Spare

Un exemple typique est l'architecture Stratus (aussi connue IBM/System 88). Celui-ci contient quatre processeurs logiques qui font leurs calculs en parallèle : le résultat est choisi parmi les processeurs sans pannes. Une panne ou erreur est détectée avec duplication par comparaison : chaque processeur logique est dupliqué et une panne est détectée si les deux processeurs sont en désaccord sur le résultat. L'ensemble contient donc huit processeurs.

La redondance matérielle hybride

[modifier | modifier le wikicode]

Les méthodes de redondance hybride mélangent les techniques vues plus haut. Le principe de ces techniques est simple : si un composant est en panne, que le défaut est permanent, alors son résultat ne doit pas être pris en compte dans le calcul du vote à majorité. Il est alors déconnecté, le circuit de vote à majorité n'en tient pas compte.

Avec la redondance à triple duplex, plusieurs composants qui utilisent la duplication avec comparaison sont suivis par une porte à majorité.

Redondance à triple duplex

La redondance passive auto-correctrice est similaire à la technique précédente, à un détail près : on détecte une panne en comparant le résultat du composant avec le vote majoritaire. Ainsi, au lieu d'avoir deux composants en entrée du comparateur, on n'en aura qu'un seul : l'autre entrée du comparateur sera reliée à la sortie de la porte à majorité.

Redondance passive auto-correctrice

Avec la redondance passive avec composants de réserve, plusieurs modules qui utilisent la redondance active sont suivis par un système de vote à majorité.

Redondance passive avec composants de réserve

La redondance utilisant des architectures parallèles

[modifier | modifier le wikicode]

Les architectures parallèles sont utilisables pour faire de la redondances. Par exemple, les processeurs multicœurs actuels disposent de plusieurs cœurs, qui sont physiquement redondants. Ils sont tous identiques, sauf dans quelques cas spécifiques. Aussi, il est possible d’exécuter un même programme en plusieurs exemplaires, plusieurs instances : un par cœur. Si les deux programmes fournissent le même résultat, tout va bien. Mais quand les deux fournissent des résultats différents, on doit alors utiliser un mécanisme de correction, par exemple utiliser un vote à majorité. Le vote à majorité a été utilisé sur pas mal de mainframes anciens, où les processeurs étaient dupliqués et les entrées-sorties des processeurs étaient combinés par un vote à majorité. Le vote à majorité peut s'utiliser pour les communications avec la mémoire.

Vote à majorité sur les lectures et écritures - optimisé

La redondance temporelle sur les processeurs multithréadés

[modifier | modifier le wikicode]

Il est aussi possible de faire la même chose sur des architectures multihtreadées, sauf que cette fois-ci, le programme originel et sa copie redondante s’exécutent sur le même cœur, simplement pas exactement en même temps. Techniquement, elles s’exécutent plus ou moins simultanément vu de l’extérieur, mais pas si on regarde au niveau des cycles d'horloge. Tel cycle sera attribué à un programme, le cycle suivant à sa copie, etc. Il s'agit d'un type de redondance appelée la redondance temporelle, où les calculs/instructions sont effectués plusieurs fois par le même circuit. Elle permet de détecter les erreurs temporaires qui surviennent une fois, donc impactent une exécution du calcul, mais pas les suivantes ou précédentes.

Précisons que le programme originel a la priorité sur le programme redondant. Il prend donc de l'avance et termine ses instructions avant sa copie redondante. Les mécanismes pour comparer les programme original et redondant sont donc plus compliqués que prévu. Il faut mettre en attente les résultats du programme originel, généralement en conservant une copie du banc de registres quelque part, et la comparer avec l'état équivalent calculé par le programme redondant. Rien que déterminer l'état redondant est assez complexe, et demande de gérer l'historique d’exécution des deux programmes.

Un autre défaut est que l'interaction avec la mémoire complique l'implémentation. Un point important est que les deux programmes, l'original et le redondant, doivent avoir le même espace d'adressage. Ou du moins, leur mémoire virtuelle et table des pages doit être configurée de manière à ce que les deux programmes lisent et écrivent au même endroit pour une même instruction. Le protocole de cohérence des caches doit tenir compte de la présence d'un programme redondant pour éviter de nombreuses invalidations de cache, et son adaptation n'est pas triviale. Une autre solution est d'utiliser deux mémoires séparées, mais elle n'est pas triviale, surtout que dans ce cas, autant utiliser plusieurs processeurs séparés.