Protocoles de Cohérence de Cache
Les protocoles de cohérence de cache maintiennent la consistance des multiples caches privés dans un multiprocesseur à mémoire partagée, garantissant que lorsqu'un cœur écrit à un emplacement mémoire, les autres cœurs ne continuent pas à lire des copies en cache obsolètes.
Definition
Un protocole de cohérence de cache est un mécanisme qui maintient une vue cohérente de la mémoire partagée à travers les caches privés de multiples processeurs, en suivant l'état de chaque bloc mis en cache et en coordonnant les lectures et les écritures afin qu'une écriture devienne visible et que les anciennes copies ne soient pas utilisées.
Scope
Ce sujet couvre le problème de cohérence et ses solutions : les protocoles d'invalidation versus de mise à jour, les protocoles d'écoute (snooping) sur un bus partagé, les protocoles basés sur un répertoire pour les systèmes évolutifs, et les machines d'état canoniques telles que MSI et MESI. Il traite de la manière dont le matériel préserve une vue cohérente de la mémoire à travers les caches. Il exclut l'ordonnancement des opérations sur différentes adresses (modèle de consistance de la mémoire, sous shared-memory-and-coherence) et les politiques de cache unique (organisation et politiques de cache).
Core questions
- Que signifie la cohérence pour les caches, et pourquoi est-elle nécessaire ?
- En quoi les protocoles d'invalidation et de mise à jour diffèrent-ils ?
- Comment les protocoles d'écoute (snooping) utilisent-ils une interconnexion partagée pour maintenir la cohérence ?
- Comment les protocoles de répertoire étendent-ils la cohérence au-delà d'un bus partagé ?
Key concepts
- problème de cohérence
- protocoles d'invalidation vs de mise à jour
- protocoles d'écoute (snooping)
- protocoles basés sur un répertoire
- états MSI et MESI
- bus partagé et interconnexion
- faux partage
- sérialisation des écritures
Key theories
- Cohérence basée sur l'état (MSI/MESI)
- Chaque bloc mis en cache est suivi dans un petit ensemble d'états (tels que Modifié, Exclusif, Partagé, Invalide) ; les lectures et les écritures déclenchent des transitions d'état et des messages de cohérence qui garantissent qu'il n'y a qu'un seul rédacteur et que les lecteurs ne voient jamais de données obsolètes.
Mechanisms
Chaque bloc de cache porte un état de cohérence. Dans les protocoles d'écoute (snooping), chaque cache observe (snoope) les transactions du bus et met à jour ou invalide ses copies en conséquence ; dans les protocoles de répertoire, un répertoire enregistre quels caches détiennent chaque bloc et envoie des messages de cohérence ciblés. Une écriture à un bloc partagé invalide d'abord les autres copies (dans un protocole d'invalidation), accordant au rédacteur la propriété exclusive avant qu'il ne modifie les données.
Clinical relevance
La cohérence rend le multiprocesseur à mémoire partagée programmable : le logiciel peut traiter la mémoire comme un unique espace de stockage partagé tandis que le matériel masque l'existence de multiples caches. Cependant, le trafic de cohérence et les effets tels que le faux partage peuvent dominer les performances dans les programmes parallèles, de sorte qu'une prise de conscience de la cohérence est importante pour les logiciels multithreadés évolutifs.
History
Les protocoles de cohérence sont apparus avec les multiprocesseurs basés sur un bus dans les années 1980, où les schémas d'écoute (snooping) tels que l'écriture-invalidation et la famille MESI sont devenus la norme. À mesure que les systèmes ont dépassé les limites d'un bus unique, des protocoles basés sur un répertoire ont été développés pour la mémoire partagée distribuée, et la cohérence demeure un problème de conception central dans les processeurs multicœurs.
Debates
- Cohérence par écoute (snooping) versus par répertoire
- L'écoute est simple et rapide sur de petits systèmes à bus partagé, mais ne s'adapte pas à l'échelle, tandis que les répertoires s'adaptent à de nombreux cœurs au prix d'une complexité et d'un coût de stockage accrus ; les grandes conceptions combinent souvent des approches hiérarchiques ou hybrides.
Key figures
- David E. Culler
- Mark D. Hill
- James R. Goodman
- John L. Hennessy
Related topics
Seminal works
- hennessy2019
- culler1999
Frequently asked questions
- Quelle est la différence entre cohérence et consistance ?
- La cohérence concerne un emplacement mémoire unique : tous les caches doivent finalement s'accorder sur sa valeur et voir les écritures dans l'ordre. La consistance (le modèle de consistance de la mémoire) concerne l'ordonnancement des opérations sur différents emplacements tel qu'observé par différents processeurs. La cohérence est nécessaire mais non suffisante pour un modèle de consistance bien défini.
- Qu'est-ce que le faux partage ?
- Le faux partage se produit lorsque des variables indépendantes utilisées par différents cœurs se trouvent par hasard dans le même bloc de cache. Étant donné que la cohérence opère à la granularité du bloc, les écritures par un cœur invalident le bloc dans les autres, même s'ils accèdent à des variables différentes, ce qui entraîne un trafic de cohérence inutile et un ralentissement.