Accueil🇫🇷Chercher

Protocole MOESI

En informatique, le protocole MOESI (Modified, Owned, Exclusive, Shared, Invalid) est un protocole de cohérence de cache utilisé dans les systèmes multiprocesseurs.

Rappels sur la cohérence

Les architectures à mémoire distribuée peuvent intégrer un mécanisme de cohérence de cache. Il s'agit d'assurer que la modification d’une ligne de cache soit bien reportée aux autres caches. On parle dans ce cas de ccNUMA pour cache coherent Non Uniform Memory Acces, c'est-à-dire en français « accès mémoire non uniforme ». En effet, dans le cas d’architecture multiprocesseur à mémoire distribuée, l’accès à la mémoire n’est pas uniforme selon que l’on accède à une mémoire locale ou distante. En outre, il est nécessaire d’implémenter un mécanisme pour assurer une bonne cohérence entre les données présentes dans les différentes mémoires cache. Par exemple, on comprend cette contrainte, lors de la migration d’une tâche d’un processeur à un autre. En effet, sans synchronisation, la tâche pourrait, paradoxalement, poursuivre son exécution sur le nouveau processeur en utilisant des données anciennes qu’elle a pourtant modifiées depuis.

MOESI

Le MOESI (Modified, Owned, Exclusive, Shared, Invalid) est précisément un protocole qui peut être utilisé pour maintenir une cohérence de cache. Il est une évolution du protocole MESI utilisé auparavant. Dans ce protocole, chaque ligne de cache se trouve dans l'un des cinq états cités suivants:

  • I - Invalid : la ligne de cache ne contient pas la valeur actualisĂ©e de la donnĂ©e. Celle-ci se trouve en mĂ©moire principale ou dans la mĂ©moire cache d'un autre processeur,
  • E - Exclusive : la ligne de cache contient la donnĂ©e la plus rĂ©cente qui se trouve aussi en mĂ©moire principale mais dans aucune des autres mĂ©moires caches,
  • S - Shared : la ligne de cache contient la donnĂ©e la plus rĂ©cente. On ignore si elle se trouve aussi en mĂ©moire principale ou dans une autre mĂ©moire cache,
  • M - Modified : la ligne de cache contient la donnĂ©e la plus rĂ©cente qui ne se trouve dans aucune autre mĂ©moire cache. De plus, la valeur contenue par la mĂ©moire principale est incorrecte.
  • O - Owned : la ligne de cache contient la donnĂ©e la plus rĂ©cente qui peut se trouver aussi dans la mĂ©moire cache d'un autre processeur. En revanche, la valeur contenue par la mĂ©moire principale est incorrecte.

D’abord, une lecture peut être réalisée dans tous les états excepté "invalid". Dans ce dernier cas, une requête est émise à l’ensemble des unités. Il y a alors deux cas, la donnée peut être présente ou non dans une autre mémoire cache. Si elle s’y trouve, on la récupère alors directement, et l’état de la ligne de cache devient "Shared". Autrement, elle est récupérée depuis la mémoire RAM adéquate et la ligne devient "Exclusive".

Une écriture peut être effectuée directement dans les états "exclusive" et "modified". Dans les autres états, la donnée peut être chargée dans d’autres caches, il faut donc invalider toutes ces lignes avant de procéder à l’écriture. Finalement, lorsque ces invalidations ont été menées à bien, la donnée est écrite en cache et l’état de la ligne passe à "Modified", tandis que le " dirty bit" passe à 1 indiquant une différence entre la valeur en cache et en RAM.

Par ailleurs, c’est à cause de ce cas de figure que la réception de "Probe Write Hit" qui indique une écriture sur une autre unité, invalide systématiquement la ligne de cache.

Après une modification, celle-ci n’est pas reportée en mémoire principale tant que la ligne de cache n’est pas écrasée par des données correspondant à autre adresse. C’est pour cette raison, que l’on récupère prioritairement les données dans les autres caches. L’état "Owned" sert d’ailleurs à cela en prolongeant la durée pendant laquelle la RAM n’est pas actualisée. En effet, lorsqu’un autre processeur récupère une donnée modifiée pour la lire, l’état passe à "Owned" pour indiquer que la donnée a été recopiée ailleurs mais que le report sur la RAM n’a pas été fait. Cet état est indispensable car l’état "Shared" ne permet pas cette distinction. Ce nouvel état constitue l’évolution apportée au MESI. Ceci permet de rafraîchir la mémoire RAM moins souvent. En fait, on l’évite le plus longtemps possible, tant que la donnée reste présente en mémoire cache. L’état "exclusive" qui n’est pas non plus absolument indispensable permet d’éviter l’émission des requêtes inutiles. En effet, lorsque l’on sait qu’aucun cache ne dispose de la donnée, il est inutile d’émettre une requête malgré tout pour invalider des lignes de cache inexistantes. Or, ces requêtes encombrent inutilement les bus d’interconnexion ce qui nuit aux performances.

Voir aussi

Liens externes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.