MSI vs MESI vs MOESI : les protocoles de cohérence comparés

MSI, MESI et MOESI sont des protocoles qui attribuent un état aux lignes des caches de chaque cœur d’un processeur multicœur afin que les données d’une même adresse ne divergent pas. MSI est la forme de base, avec seulement trois états : Modified, Shared et Invalid. MESI ajoute Exclusive (seul ce cache possède la ligne, dont le contenu est identique à la mémoire), ce qui évite tout trafic sur le bus lors d’une écriture sur des données qu’aucun autre cœur ne possède. MOESI ajoute en plus l’état Owned, qui permet de partager des données modifiées avec d’autres caches sans les réécrire en mémoire.

CritèreMSIMESIMOESI
Nombre d’états3 (M, S, I)4 (M, E, S, I)5 (M, O, E, S, I)
Modified (M)Seul ce cache possède la ligne ; son contenu diffère de la mémoireIdentiqueIdentique
Shared (S)D’autres caches peuvent aussi posséder la ligne. Contenu identique à la mémoireIdentiqueD’autres caches peuvent aussi posséder la ligne. Le contenu peut différer de la mémoire (lorsqu’une ligne est à l’état O)
Exclusive (E)AbsentSeul ce cache possède la ligne ; contenu identique à la mémoirePrésent (comme dans MESI)
Owned (O)AbsentAbsentContenu différent de la mémoire, mais d’autres caches partagent aussi la ligne à l’état S. Ce cache est responsable de la réécriture en mémoire
Lecture d’une donnée qu’aucun autre cœur ne possèdeChargée à l’état SChargée à l’état EChargée à l’état E
Écriture sur cette donnéePour passer de S à M, une requête d’invalidation des autres copies est émise sur le bus, etc.Passage de E à M sans communicationPassage de E à M sans communication
Un autre cœur lit une ligne à l’état MRéécriture en mémoire ; les deux passent à l’état SRéécriture en mémoire ; les deux passent à l’état S (la donnée peut aussi être transmise directement depuis le cache)Transmission de la donnée sans réécriture ; ce cache passe à l’état O, l’autre à l’état S
Réécriture en mémoireÀ chaque lecture d’une ligne modifiée par un autre cœurÀ chaque lecture d’une ligne modifiée par un autre cœurPeut être différée jusqu’à l’éviction de la ligne à l’état O
Bits d’état et complexité2 bits. Le plus simple2 bits. Intermédiaire3 bits. Le plus complexe

Les valeurs indiquées sont des ordres de grandeur typiques et varient selon la génération de procédé et le produit.

Quand choisir l'un ou l'autre ?

MSI
Forme de base pour apprendre le fonctionnement de la cohérence, ou lorsqu’on veut des transitions d’état aussi simples que possible.
MESI
Lorsque les lectures et écritures portent souvent sur des données utilisées par un seul cœur. Grâce à l’état E, une lecture suivie d’une écriture ne demande aucune communication. Il sert de base aux protocoles de nombreux CPU multicœurs.
MOESI
Lorsque les cœurs s’échangent fréquemment des données modifiées, ou lorsqu’on veut réduire les réécritures en mémoire pour économiser la bande passante mémoire.

Questions fréquentes

Quel est l’intérêt de l’état E de MESI ?

Une donnée qu’aucun autre cœur ne possède est chargée à l’état E, et lors d’une écriture ultérieure, la ligne peut passer à l’état M sans prévenir les autres cœurs. Avec MSI, dans le même cas, la ligne est chargée à l’état S, et chaque écriture exige une requête d’invalidation. On réduit ainsi le trafic sur le bus pour les traitements « lecture puis écriture » sur des données utilisées par un seul thread.

Quel est l’intérêt de l’état O de MOESI ?

Lorsqu’un autre cœur lit une donnée modifiée (état M), MESI la réécrit en mémoire avant de la partager, alors que MOESI la transmet de cache à cache sans réécriture, le cache d’origine restant responsable de la réécriture à l’état O. On réduit ainsi les écritures en mémoire.

Quelle différence entre l’état E et l’état M ?

Dans les deux cas, seul son propre cache possède la ligne. À l’état E, le contenu est identique à la mémoire : aucune réécriture n’est nécessaire lors de l’éviction. À l’état M, le contenu a été modifié et diffère de la mémoire : il faut le réécrire lors de l’éviction.

Ces protocoles s’utilisent-ils avec l’espionnage (snooping) ou avec un répertoire ?

Avec les deux. MSI, MESI et MOESI définissent les états d’une ligne ; la façon d’informer les autres caches (snooping, qui surveille un bus partagé ou équivalent, ou répertoire, qui enregistre qui possède une ligne) est une question distincte.

Vérifier vos connaissances

Quelle combinaison correspond aux quatre états du protocole de cohérence de cache MESI ?

  1. AMemory, Execute, Store, Index
  2. BModified, Exclusive, Shared, Invalid
  3. CMiss, Evict, Swap, Idle
Afficher la réponse et l'explication

Réponse : B. Modified, Exclusive, Shared, Invalid

Dans MESI, chaque ligne de cache se trouve dans l’un des états suivants : Modified (modifiée et détenue par ce seul cœur), Exclusive (non modifiée et détenue par ce seul cœur), Shared (même contenu détenu par plusieurs cœurs) ou Invalid (invalide). L’état change chaque fois que le cœur lit ou écrit, ou qu’il apprend une lecture ou écriture d’un autre cœur, ce qui évite les incohérences entre données d’une même adresse.

Dans le protocole MESI, que signifie l’état Modified (M) d’une ligne de cache ?

  1. ASeul ce cœur détient la ligne, et son contenu diffère de la mémoire principale (réécriture nécessaire)
  2. BPlusieurs cœurs détiennent le même contenu, qui concorde aussi avec la mémoire principale
  3. CLe contenu de la ligne est inutilisable et doit être rechargé pour être lu
Afficher la réponse et l'explication

Réponse : A. Seul ce cœur détient la ligne, et son contenu diffère de la mémoire principale (réécriture nécessaire)

L’état M signifie que ce cœur a écrit et qu’il est seul à détenir la valeur la plus récente. La valeur en mémoire principale étant obsolète, il faut réécrire la valeur récente ou la transmettre directement lorsque la ligne est évincée ou qu’un autre cœur veut la lire. Une ligne en état M peut être écrite autant de fois que voulu sans prévenir les autres cœurs ; les écritures successives d’un même cœur sont donc traitées rapidement.

Dans le protocole MESI, que se passe-t-il lorsqu’un cœur écrit dans une ligne en état Exclusive (E) ?

  1. AIl envoie une demande d’invalidation à tous les autres cœurs avant d’écrire
  2. BL’écriture est impossible ; il écrit d’abord en mémoire principale puis relit
  3. CIl n’a pas besoin de prévenir les autres cœurs et la ligne passe directement à l’état M
Afficher la réponse et l'explication

Réponse : C. Il n’a pas besoin de prévenir les autres cœurs et la ligne passe directement à l’état M

L’état E signifie que seul ce cœur détient la ligne et que son contenu est identique à la mémoire principale. Comme aucun autre cœur n’en a de copie, le passage à l’état M se fait sans notification d’invalidation. L’intérêt de l’état E est d’économiser des échanges dans le cas fréquent où une donnée utilisée par un seul cœur est lue puis écrite. Pour une écriture depuis l’état S, l’invalidation des autres copies est nécessaire.

  1. Dans un protocole de cohérence par invalidation, que se passe-t-il lorsqu’un cœur écrit dans une ligne en état Shared (S) ?
  2. Dans le protocole MESI, quel est le comportement habituel lorsque le cœur 1 veut lire une ligne que le cœur 0 détient à l’état Modified (M) ?
  3. Quelle description de la cohérence de cache par espionnage (snooping) est correcte ?

Questions d'entraînement sur Multicœur et synchronisation

Termes clés expliqués

Protocole MESI
Protocole de cohérence qui gère chaque ligne de cache selon quatre états : Modified, Exclusive, Shared et Invalid. Lors d'une écriture, les copies des autres cœurs sont invalidées.
Cohérence de cache
Mécanisme qui maintient la cohérence du contenu lorsque les caches de plusieurs cœurs d'un CPU multicœur contiennent des données de même adresse. Lorsqu'un cœur écrit, les anciennes copies des autres cœurs sont par exemple invalidées.
Espionnage de bus (snooping)
Méthode de cohérence où chaque cache surveille les lectures et écritures des autres cœurs circulant sur un bus partagé, etc., et met à jour l'état de ses propres lignes. Adaptée à un petit nombre de cœurs.
Ligne de cache
Unité de transfert de données entre le cache et le niveau inférieur, aussi appelée bloc de cache. Elle fait 64 octets sur la plupart des CPU ; les bits de poids faible de l'adresse donnent la position (offset) dans la ligne.
Protocole à répertoire (directory-based)
Méthode de cohérence qui enregistre dans une table quels cœurs détiennent chaque ligne et ne notifie que les cœurs concernés. Utilisée dans les systèmes à grand nombre de cœurs.

Comparatifs associés