Transactions bus
Transcription
Transactions bus
Cohérence des caches dans les Multiprocesseurs à mémoire partagée (Bus commun) Thèmes : ¾Le problème de la cohérence des caches ¾Les protocoles d'espionnage A. M'ZOUGHI Le problème de la cohérence du cache P1 P2 U=? 4 C1 P3 U=? 5 C2 C3 U:7 3 U:5 U:5 Bus 1 U:5 Mémoire 1 2 Unitésd’E/S d’E/S Unités Unités d’E/S M1/TC6/V0 Un système de mémoire cohérent : Intuition La lecture d'un emplacement mémoire devrait renvoyer la dernière valeur écrite (par n’importe quel processus). Facile dans les monoprocesseurs : ¾ Excepté pour E/S : cohérence entre les unités d'E/S et les processeurs ¾ Mais situation peu fréquente ainsi des solutions logicielles suffisent – opérations non «cachable», purge de pages, réaliser les E/S à partir des caches On voudrait que cette caractéristique soit maintenue quand des processus s’exécutent sur différents processeurs ¾ C’est-à-dire comme si les processus étaient entrelacés sur un monoprocesseur Le problème de la cohérence est plus prédominant et critique dans la performance des multiprocesseurs ¾ A un plus grand impact sur la conception de matériel 2 M1/TC6/V0 Problème avec l'intuition Rappel : ¾ La valeur retournée après une lecture devrait être la dernière valeur écrite Mais "la dernière" n'est pas clairement bien définie ! Même dans le cas séquentiel : ¾ "la dernière" est définie en terme d'ordre dans le programme, non en temps – – L'ordre des opérations dans le langage machine présenté au processeur "le suivant" est défini de manière analogue, et c’est bien défini Dans le cas parallèle : ¾ On doit définir une sémantique significative ¾ 3 L'ordre programme est défini dans un processus, mais nécessite de comprendre ou de donner un sens des ordres parmi tous les processus La réponse implique à la fois "la cohérence des caches" et un "modèle de consistance mémoire" approprié M1/TC6/V0 Définition formelle de la cohérence Résultats d'un programme : valeurs retournées par ses opérations de lecture Un système mémoire est cohérent si les résultats de toute exécution d'un programme sont tels que, pour chaque emplacement, il est possible construire un ordre série hypothétique de toutes les opérations sur cet emplacement qui est conforme aux résultats de l'exécution et dans lequel : 1. Les opérations émises par un processus se produisent dans l'ordre dans lequel elles seraient émises au système mémoire par ce processus, et 2. La valeur retournée pour chaque lecture est la dernière valeur écrite à cet emplacement dans cet ordre série Nécessite deux critères : ¾ ¾ Propagation des écritures : les écritures doivent être vues par tous Sérialisation des écritures : les écritures faites à un même emplacement doivent être vues par tous dans le même ordre – – 4 Si je vois w1 après w2, vous ne devez pas voir w2 avant w1 Pas besoin d’avoir un ordre série équivalent pour les lectures M1/TC6/V0 Cohérence des caches : solutions (1) Logicielles ¾ But : éviter l’ajout de circuits matériels et de la logique supplémentaire Æ reporter la charge liée à la détection des problèmes de la cohérence sur le compilateur et l’OS – L’approche la plus simple consiste à empêcher la mise en cache des variables partagées : trop prudente peut aboutir à une inefficacité des caches. – Des approches plus efficaces : une analyse approfondie du code par le compilateur lui permettant d’insérer des instructions pour garantir la cohérence dans les moments critiques. ¾ Souvent utilisées dans les grappes (clusters) de stations de travail ou de PCs 5 M1/TC6/V0 Cohérence des caches : solutions (2) Matérielles ¾ Généralement appelées protocoles de cohérences des caches et divisées en deux catégories : – Protocoles "espions" (snoopy) • Dépendent de la diffusion pour observer tout le trafic et maintenir la cohérence • Bien adaptés aux multiprocesseurs à bus et aux systèmes de petite taille • Exemple : SGI Challenge – Protocoles à répertoire (directory) • Utilisent de l'information centralisée pour éviter la diffusion • S'adaptent bien au passage à l'échelle (scalability) : multiprocesseurs avec un grand nombre de processeurs • Exemple : SGI Origin 2000 6 M1/TC6/V0 Caches partagés Les processeurs partagent un simple cache Îécarte essentiellement le problème. Utile pour les machines de petites tailles. ¾ Par exemple : Encore, Alliant FX/8. ¾ Les problèmes sont limitation de la BP cache et interférence cache ¾ Les avantages sont des effets de partage à grain fin et de préchargement P P P Cache partagé Mémoire 7 P P Crossbar Cache partagé entrelacé Mémoire M1/TC6/V0 Protocoles de cohérence de cache à espionnage Idée fondamentale : ¾ Toute activité (action) liée à la cohérence est diffusée à tous les processeurs – par exemple, sur un bus global (commun) ¾ Chaque processeur (ou son représentant) surveille ("espionne") ces actions et réagit à toutes celles qui sont en rapport avec le contenu courant de son cache – Exemples : • • Si un processeur souhaite écrire sur un bloc, tout autre processeur ayant une copie doit "l'invalider" (Invalidate) de son propre cache Si un processeur souhaite lire dans un bloc et qu'un autre processeur en possède une copie modifiée (Modified, dirty copy), celui-ci doit fournir le bloc L'approche la plus employée dans les multiprocesseurs commerciaux ¾ Exemples : – SGI Challenge, SUN Enterprise, Multiprocesseur de PCs, etc. 8 M1/TC6/V0 Implémentation d'un protocole espion Le contrôleur de cache reçoit maintenant des entrées de deux côtés : ¾ Requêtes du processeur, requêtes/réponses de bus de l'espion Dans les deux cas, peut prendre plusieurs actions ou pas du tout ¾ Met à jour l'état, répond avec des données , génère de nouvelles transactions de bus Le protocole est un algorithme distribué : coopération de machines d'état ¾ Ensemble d'états, diagramme de transition d'état, actions Granularité de la cohérence est basée sur le bloc ¾ Comme dans l'allocation du cache et le transfert du/vers le cache 9 M1/TC6/V0 Cohérence avec mise à jour immédiate (Write-Through) P1 C1 Espion de bus Mémoire Pn Cn Transaction Cache-mémoire Unités d’E/S Extensions du cas monoprocesseur : espionnage, invalidation/mise à jour ¾ Pas de nouveaux états ou de transactions bus dans ce cas ¾ Protocoles fondés sur l'invalidation versus protocoles fondés sur la mise à jour Propagation d'écriture : même dans le cas d'invalidation, plus tard les lectures verront la nouvelle valeur ¾ l'invalidation provoque un défaut sur un accès ultérieur et mémoire à jour via la mise à jour immédiate (Write-Through) 10 M1/TC6/V0 Diagramme d'état de la mise jour immédiate WT PrWr/BusWr PrRd/- V BusWr/- PrRd/BusRd I PrWr/BusWr Transaction initiée par un processeur Transaction initiée par un espion de bus Notation : A/B A : type d’opération processeur PrRd : lecture (Read) Processeur PrWr : écriture (Write) Processeur B : type de transaction bus BusRd : lecture (Read) Bus BusWr : Ecriture (Write) Bus — : aucune transaction bus ¾ Deux états par bloc dans chaque cache comme en monoprocesseur – L'état d'un bloc peut être vu comme un vecteur à p états dans un multiprocesseur à p caches ¾ Les bits d'état sont associés seulement aux blocs qui sont dans le cache – Les autres blocs peuvent être considérés comme invalides (non présent) dans ce cache ¾ L'écriture invalidera tous les autres caches (aucun changement d'état local) – Un bloc peut avoir des lecteurs simultanées, mais un seul écrivain infirme les autres lecteurs 11 M1/TC6/V0 Problème avec le Write-Through Nécessite une grande bande passante ¾ Chaque écriture de chaque processeur va au bus partagé et à la mémoire ¾ Considérons un processeur avec :F=500MHz, CPI=1, où 15% des instructions sont des rangements de 8-octets ¾ Chaque processeur génère 75M de rangements/s ou 600 MO/s ¾ Une BP bus de 1GO/s peut supporter 1 seul proc sans saturation ¾ Write-Through est particulièrement impopulaire pour SMPs Write-Back absorbe la plupart des écritures si succès cache ¾ Succès écriture ne génèrent pas de transactions sur le bus ¾ Mais maintenant comment assurons nous la propagation et la sérialisation des écritures ? ¾ Besoin de protocoles plus sophistiqués : domaine de conception large 12 M1/TC6/V0 Protocoles espion avec mise à jour différée (Write-Back) Pas besoin de changer processeur, mémoire centrale, cache… ¾ Etendre contrôleur cache et exploiter le bus (fournit la sérialisation) L'état modifié (dirty) indique maintenant également la propriété exclusive ¾ Exclusif : un seul cache avec une copie valide ¾ Propriétaire : responsable pour fournir le bloc s’il est demandé Le domaine de conception ¾ Protocoles invalidation versus protocoles mise à jour ¾ Ensemble d’états 13 M1/TC6/V0 Protocoles fondés sur l’invalidation L’état “Exclusif” veut dire peut modifier sans informer quiconque ¾ C’est-à-dire aucune transaction bus ¾ Doit d’abord obtenir le bloc dans l’état exclusif avant de l’écrire ¾ Même si déjà dans l’état valide, nécessite une transaction, appelée aussi échec d’écriture Ecrire un bloc non-modifié génère une action bus Read-eXclusive (RdX) ¾ Informe les autres de l’écriture imminente, obtient la proporiété exclusive – Rend l’écriture visible, c’est à dire l’écriture est réalisée – Peut être réellement observée (par un échec de lecture) seulement plus tard – Ecriture avec succès rendue visible (réalisée) qd le bloc màj est dans la cache de l’écrivain ¾ Seulement un RdX peut avoir lieu à la fois pour un bloc : sérialisé par le bus Transactions bus de type Read et Read-exclusive pilotent les actions de cohérence ¾ Les transactions Write-back aussi, mais non causées par des opérations mémoire et sont tout à fait secondaires pour le protocole de cohérence – Note : le remplacement d’un bloc dans l’état non modifié ne nécessite pas de purge 14 M1/TC6/V0 Protocoles fondés sur la mise à jour Une opération d’écriture met la donnée à jour dans les autres caches ¾ Nécessite une nouvelle transaction bus de mise à jour Avantages ¾ Autres processeurs n’échouent pas pour l’accès suivant : réduction de la latence – Dans le cas de l’invalidation, ils peuvent échouer et provoquer beaucoup de transactions (trafic bus) ¾ Une seule transaction bus pour mettre à jour plusieurs caches peut préserver la bande passante – Seul le mot modifié est transféré, pas la totalité du bloc Inconvénients ¾ Plusieurs écritures par le même processeur provoque plusieurs transactions de mise à jour. – Dans le cas de l’invalidation, la première écriture permet d’obtenir la propriété exclusive, les autres écritures sont locales (moins de transactions bus) Détails des échanges sont très complexes 15 M1/TC6/V0 Invalidation versus Mise à jour Dépend du comportement du programme ¾ Est ce qu’un bloc écrit par un proc. est lu par d’autres avant qu’il ne soit réécrit ? Invalidation : ¾ Oui Î les lecteurs vont avoir un échec cache ¾ Non Î plusieurs écritures sans transactions bus supplémentaires – et provoque la suppression (nettoie le cache) des copies qui ne vont pas être réutilisées Mise à jour : ¾ Oui Î les lecteurs n’auront pas un échec cache s’ils ont préalablement une copie – Une seule transaction bus pour mettre à jour toutes les copies ¾ Non Î plusieurs mises à jour inutiles, même si les copies sont des copies mortes Nécessite de considérer le comportement du programme et la complexité matérielle les protocoles d’invalidation sont plus populaires ¾ Certains systèmes fournissent les deux protocoles, ou même un protocole hybride 16 M1/TC6/V0 Protocole MSI Write-Back avec invalidation Etats ¾ I (Invalid) : bloc invalide ¾ S (Shared) : bloc partagé (existe dans un ou plusieurs caches) ¾ M (Dirty or Modified) : existe dans un seul cache Evénements processeur : ¾ PrRd : demande de lecture du processeur ¾ PrWr : demande d’écrirure du processeur Transactions bus ¾ BusRd : demande une copie en lecture sans intention de la modifier (Read) ¾ BusRdX : demande une copie avec intention de la modifier (Read eXclusive) ¾ BusWB : mise à jour mémoire (Write-Back) Actions ¾ Mettre à jour l’état, accomplir transaction bus, purger donnée sur le bus 17 M1/TC6/V0 Diagramme de transition d’état (MSI) PrRd/— Transaction initiée par un processeur PrWr/— M Transaction initiée par un espion de bus BusRd/Purge Notation : A/B A : type d’opération processeur PrRd : lecture (Read) Processeur PrWr : écriture (Write) Processeur PrWr/BusRdX PrWr/BusRdX B : type de transaction bus BusRd : lecture (Read) Bus BusRdX : lecture exclusive (Read eXclusive) Bus — : aucune transaction bus ¾ Ecriture sur un bloc partagé : S BusRdX/Purge PrRd/— PrRd/BusRd BusRd/— BusRdX/— I – Bloc est déjà présent mais re-renvoyé !!! ; peut utiliser (BusUpgr) au lieu de BusRdX ¾ Remplacement change l’état de 2 blocs : sortant et entrant 18 M1/TC6/V0 Satisfaction des critères de la cohérence Le principe de la propagation des écritures est respecté Sérialisation des écritures ? ¾ Toutes les écritures qui apparaîssent sur le bus (BusRdX) sont ordonnées par le bus – BusRdX garantit que seul le cache de l'écrivain a une copie valide quand le bloc est en cours d'écriture (comme le dans le protocole WT) – L'écriture est exécutée dans la cache de l’écrivain avant qu’il ne traite d'autres transactions bus, ainsi ordonnée de la même manière pour tous les processeurs (y compris l'écrivain) en respect des autres transactions bus ¾ Les lectures qui apparaîssent sur le bus sont ordonnées en respect avec ces écritures ¾ Les écritures qui n’apparaîssent pas sur le bus : – séquence de telles écritures entre deux transactions bus pour le bloc sont faites par le même processeur, soit P ce processeur – Dans la sérialisation, la séquence apparaît entre ces deux transactions bus – Les lectures de ce bloc par P les verront dans cet ordre en respect des autres transactions bus – Les lectures par les autres processeurs de ce bloc sont séparées de cette séquence par une transaction bus, qui les met dans l'ordre série en respect des autres écritures – Ainsi les lectures éffectuées par tous les processeurs voient toutes les écritures dans le même ordre. 19 M1/TC6/V0 Choix de bas niveau du protocole BusRd observé dans l’état M : Quelle transition faire ? Dépend des attentes des modèles d’accès ¾ S : hypothèse que je le relirais encore bientôt, plutôt qu’un autre l’écrirait – Bonne pour la plupart des données lues – Quoi au sujet des données “migrantes” • • X lit et écrit, ensuite Y lis et écrit, ensuite Z lit and écrit... Mieux de passer dans l’état I, ainsi X,(Y) n’a pas besoin d’invalider sur l'écritutre de Y,(Z) ¾ Peut être plus judicieux de passer directement de l’état M à I ¾ Les machines Sequent Symmetry et Alewife (MIT ) utilisent des protocoles adaptatifs Choix peuvent affecter la performance du système mémoire 20 M1/TC6/V0 Protocole MESI (4-états) avec invalidation Problème avec le protocole MSI ¾ Lire et modifier une donnée Î 2 transactions bus, même si aucun partage – par exemple le problème apparaît même dans un programme séquentiel – BusRd (I Î S) suivi par BusRdX ou (BusUpgr) (S Î M) Ajouter un état exclusif : donc copie exclusive mais non modifiée Î évite la seconde transaction, mais permet d'écrire localement sans transaction ¾ Etat exclusif Î mémoire centrale est à jour, ainsi le cache n’est pas propriétaire ¾ Etats – – – – Invalid (I) Exclusive ou exclusive-clean (E) (un seul cache a une copie, mais non modifiée) Shared (S) (deux ou plusieurs caches peuvent avoir une copie dans l’état non modifié) Modified (dirty) (M) ¾ I Î E sur PrRd si aucun autre processeur n’a une copie – Nécessite un signal “shared” sur le bus commun : ligne “ou-câblé” activée en réponse au BusRd si au moins un processeur a une copie. 21 M1/TC6/V0 Diagramme de transition d’état (MESI) PrRd/— PrWr/— Les actions et transactions sont similaires à celles du protocole MSI M Transaction initiée par un processeur Transaction initiée par un espion de bus PrWr/— BusRd/Purge BusRdX/Purge Notation : A/B A : type d’opération processeur PrRd : lecture (Read) Processeur PrWr : écriture (Write) Processeur B : type de transaction bus BusRd : lecture (Read) Bus BusRdX : lecture (Read eXclusive) Bus — : aucune transaction bus PrWr/BusRdX E BusRd/ Purge' PrRd/— PrWr/BusRdX PrRd/ BusRd(S) S PrRd/ BusRd(S) BusRdX/Purge’ BusRdX/ Purge’ PrRd/— BusRd/Purge’ ¾ BusRd (S) signifie ligne “shared” affirmée sur transaction BusRd ¾ Purge’ : uniquement si partage de cache-à-cache, un seul cache purge la donnée I ¾ Protocole MOESI : état Owned (propriétaire) : exclusif mais non valide en mémoire 22 M1/TC6/V0 Choix de bas niveau du protocole Qui fournit la donnée sur défaut quand n’est pas dans l’état M : mémoire ou cache ? MESI original (Illinois) : cache Î implanté hors puce et plus rapide que la mémoire ¾ Technique : partage de cache-à-cache Plus vrai dans les systèmes modernes ¾ Intervenir sur un autre cache sur puce peut être plus coûteux que de récupérer en mémoire Partage de cache-à-cache ajoute aussi de la complexité au protocole ¾ Comment la mémoire doit savoir que c’est elle qui doit fournir la donnée (doit attendre les caches !!!) ¾ Algorithme de sélection si plusieurs caches ont la donnée valide Mais utile pour machines à mémoire distribuée avec cache-cohérent ¾ Peut être moins coûteux d’obtenir du cache le plus proche que de la mémoire distante ¾ Surtout quand la machine est construite comme un réseau de noeuds SMP et la mémoire est implantée hors des noeuds (exemple DASH de Stanford) 23 M1/TC6/V0