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