Συνοχή κρυφής μνήμης σε πολυπύρηνα/πολυεπεξεργαστικά συστήματα ΙΙΙ 1 lalis@inf.uth.gr
Απλοποιημένο μοντέλο συστήματος CPU/cores πάνω σε δίαυλο/δίκτυο (bus/interconnect) για απλότητα, εδώ CPU = core Η κυρίως μνήμη είναι ξεχωριστή από τις CPU Η ταχύτητα πρόσβασης της μνήμης είναι αργή, σε σχέση με την ταχύτητα εκτέλεσης της CPU Αν η CPU προσπελάζει την μνήμη πολύ συχνά, επιβραδύνεται σημαντικά η εκτέλεση του κώδικα Στόχος Α: μείωση της αλληλεπίδρασης με την μνήμη Στόχος Β: επικάλυψη της επικοινωνίας με εκτέλεση ΙΙΙ 2 lalis@inf.uth.gr
Κρυφή μνήμη Κάθε CPU έχει ξεχωριστή κρυφή μνήμη Η ταχύτητα πρόσβασης της κρυφής μνήμης είναι πολύ μεγαλύτερη από αυτή της κυρίως μνήμης Στην κρυφή μνήμη τοποθετούνται δεδομένα (και εντολές!) που χρησιμοποιεί συχνά η CPU Μειώνονται (ιδανικά εξαλείφονται) οι «διπλές» φορτώσεις δεδομένων από την μνήμη Μειώνεται (ιδανικά εξαλείφεται) ο αριθμός «ενδιάμεσων» αποθηκεύσεων στην μνήμη Η καλή χρήση κρυφής μνήμης είναι διπλά σημαντική για την επίτευξη καλής απόδοσης μειώνει την καθυστέρηση φόρτωσης/αποθήκευσης μειώνει την κίνηση πάνω από το bus/interconnect ΙΙΙ 3 lalis@inf.uth.gr
CPU CPU CPU memory system cache cache cache main memory bus fast slow very slow external memory ΙΙΙ 4 lalis@inf.uth.gr
Μοντέλο προσπέλασης μνήμης Η μνήμη ως «ανεξάρτητο» υποσύστημα Προσφέρει «υπηρεσίες» αποθήκευσης Η αλληλεπίδραση γίνεται μέσα από τις λειτουργίες πρόσβασης για διάβασμα/γράψιμο της μνήμης Φόρτωμα/Διάβασμα (load): αίτηση προς την μνήμη, και απάντηση (με την τιμή) από την μνήμη Αποθήκευση/Γράψιμο (store): αίτηση της CPU προς την μνήμη θεωρούμε ότι δεν αποτυγχάνει Οι λειτουργίες θεωρούνται ατομικές ΙΙΙ 5 lalis@inf.uth.gr
Βασικά προβλήματα Memory consistency Οι σειρά με την οποία αλλάζουν τα περιεχόμενα της μνήμης δεν είναι δεδομένη / προφανής Σημασία έχει και η σειρά με την οποία μεταδίδονται αλλαγές που γίνονται σε διαφορετικές μεταβλητές Cache coherence Η συνέπεια των «αντιγράφων» των δεδομένων που βρίσκονται μέσα στο σύστημα της μνήμης της δεν είναι δεδομένη / προφανής Σημασία έχει το αν και πως μεταδίδονται οι αλλαγές που γίνονται σε μεμονωμένες μεταβλητές ΙΙΙ 6 lalis@inf.uth.gr
Πρόβλημα συνέπειας κρυφής μνήμης program view P1 tmp=a; a=tmp+1; load store variable a load store P2 tmp=a; a=tmp+2; hardware view CPU Main Memory CPU memory system a cache a a cache bus ΙΙΙ 7 lalis@inf.uth.gr
Στόχοι cache coherence Single Writer Multiple Reader (SWMR) invariant: για κάθε διεύθυνση μνήμης Α, ανά πάσα (λογική) στιγμή, είτε το πολύ μια CPU μπορεί να γράψει-διαβάσει την θέση Α, είτε μια ή περισσότερες CPU μπορούν (μόνο) να διαβάσουν την Α Value invariant: η τιμή που αντιστοιχεί στην διεύθυνση μνήμης Α στην αρχή μιας «εποχής πρόσβασης» είναι ίδια με αυτήν στο τέλος της πιο πρόσφατης «εποχής γραψίματος-διαβάσματος» Cache controller: ο μηχανισμός που διαχειρίζεται την κρυφή μνήμη και υλοποιεί αυτές τις ιδιότητες ΙΙΙ 8 lalis@inf.uth.gr
Cache & memory controller interactions CPU Memory coherence agnostic stores loads vals Cache Cache Controller LLC/Memory Controller Last Level Cache outgoing coherence requests/replies incoming coherence requests/replies outgoing coherence replies incoming coherence requests bus/interconnect ΙΙΙ 9 lalis@inf.uth.gr
Cache coherence protocol Η CPU ζητά να προσπελάσει μια διεύθυνση μνήμης, είτε για διάβασμα (load) είτε για γράψιμο (store) Αν δεν υπάρχει αντίστοιχη άδεια χρήσης τότε στέλνεται μια αίτηση σε έναν ή περισσότερους cache controllers ή/και τον memory controller Coherence protocol: Το πρωτόκολλο / κανόνες της αλληλεπίδρασης των cache και memory controllers Ορίζεται ως finite state machine Αφορά ολόκληρα memory blocks (cache lines) Υλοποιείται σε hardware ΙΙΙ 10 lalis@inf.uth.gr
Απλό πρωτόκολλο: καταστάσεις Valid (V): το μπλοκ στην cache είναι read-write, πιθανώς dirty και σίγουρα επίκαιρο (το μπλοκ στην μνήμη μπορεί να είναι παλιό) nvalid (): το μπλοκ είτε δεν υπάρχει στην cache είτε δεν είναι εγγυημένα επίκαιρο V*: το μπλοκ έχει ζητηθεί αλλά δεν έχει ληφθεί ακόμα (ενδιάμεση κατάσταση, από Ι προς V) Στην μνήμη, ένα μπλοκ μπορεί να είναι V ή Write-back caches: οι αλλαγές στο μπλοκ μένουν τοπικά γράφονται πίσω στην μνήμη μόνο όταν ένα μπλοκ εξωθείται λόγω έλλειψης χώρου (eviction) ΙΙΙ 11 lalis@inf.uth.gr
Απλό πρωτόκολλο: αλληλεπιδράσεις Μοντέλο επικοινωνίας Totally ordered broadcast: τα μηνύματα φτάνουν σε όλους και με την ίδια σειρά (π.χ., κοινό bus) Atomic requests: μόνο μια αίτηση μπορεί να βρίσκεται καθοδόν ανά πάσα χρονική στιγμή Atomic transactions: η απάντηση σε μια αίτηση στέλνεται άμεσα, χωρίς παρεμβολή άλλης αίτησης Αλληλεπιδράσεις GetD transaction: αίτηση και παραλαβή μπλοκ PutD transaction: αποθήκευση μπλοκ στην μνήμη ΙΙΙ 12 lalis@inf.uth.gr
Διάγραμμα καταστάσεων* *χωρίς ενδιάμεσες καταστάσεις V V o-getd my-putd my-getd GetD PutD Cache Memory ΙΙΙ 13 lalis@inf.uth.gr
Cache controller FSM for cache & memory controller CPU Events my transactions Bus Events other transactions states load / store evict my-getd my- my-putd o-getd o- o-putd GetD V* V* stall stall nop V hit PutD+ copy/hit V nop nop nop nop (Α) (Α) (Α) Memory controller Bus Events states GetD PutD+ V ΙΙΙ 14 lalis@inf.uth.gr nop copy V
Ενδεικτικό σενάριο εκτέλεσης cycle Cache CPU1 Cache CPU2 MEM Request on bus on bus nit V 1 load miss; GetD V* 2 GetD (CPU1) 3 nop nop 4 5 copy & hit V nop nop 6 store miss; GetD V* 7 GetD (CPU2) 8 nop nop 9 10 nop copy & hit V nop 11 load miss; GetD V* 12 GetD (CPU1) 13 nop nop 14 15 copy & hit V nop nop 16 evict; Put+ 17 Put (CPU1) 18 nop nop copy V ΙΙΙ 15 lalis@inf.uth.gr
Καλύτερο πρωτόκολλο: καταστάσεις MS Modified (M): Το μπλοκ είναι valid, exclusively owned για read-write, πιθανώς dirty και επίκαιρο (το αντίγραφο στην μνήμη πιθανώς να είναι παλιό) Shared (S): Το μπλοκ είναι valid, αλλά non-exclusive owned για read-only και non-dirty (άλλα caches πιθανώς να έχουν και αυτά αντίγραφα σε S mode) nvalid (Ι): Το μπλοκ δεν μπορεί να χρησιμοποιηθεί, είτε γιατί τα περιεχόμενα δεν υπάρχουν τοπικά, είτε γιατί πιθανώς να μην είναι πλέον επίκαιρα Στην μνήμη, ένα μπλοκ έχει είτε κατάσταση SM (επίκαιρο) είτε κατάσταση (πιθανώς παλιό) Όπως πριν, τo cache είναι write-back ΙΙΙ 16 lalis@inf.uth.gr
Καλύτερο πρωτόκολλο: αλληλεπιδράσεις Μοντέλο επικοινωνίας (όπως πριν) Totally ordered broadcast Atomic requests & transactions Αλληλεπιδράσεις GetS transaction: αίτηση και παραλαβή μπλοκ με άδεια read-only GetΜ transaction: αίτηση και παραλαβή μπλοκ με άδεια read-write PutD transaction: αποθήκευση μπλοκ στην μνήμη ΙΙΙ 17 lalis@inf.uth.gr
Διάγραμμα καταστάσεων* Μ *χωρίς τις αντίστοιχες ενδιάμεσες καταστάσεις o-gets my-getm o-getm my-putd S SΜ o-getm silent my-gets GetM GetS PutD Cache States Memory States ΙΙΙ 18 lalis@inf.uth.gr
FSM for cache controller CPU Events my transactions Bus Events other transactions states load store evict my-gets my-getm my-put my- o-gets o-getm o-put GetS S* GetM M* nop nop nop nop S* stall stall stall nop M* stall stall stall nop copy/hit S copy/hit M (A) (A) (A) (A) (A) (A) S hit GetM SM* nop nop nop SM* hit stall stall nop copy/hit M (A) (A) (A) M hit hit PutD+ S ΙΙΙ 19 lalis@inf.uth.gr
FSM for memory controller Bus Events my transactions states GetS GetM PutD+ nop SM* nop copy SM nop SM* (A) (A) copy SM SM SM nop ΙΙΙ 20 lalis@inf.uth.gr
Παρατηρήσεις Στο GetS transaction, αν το memory δεν έχει την επίκαιρη έκδοση (κάποιο cache είχε πάρει άδεια Μ), υποκλέπτει την μετάδοση ενός μπλοκ ανάμεσα στο cache που είχε άδεια Μ και το cache που λαμβάνει άδεια S έτσι αποκτά πάλι την επίκαιρη έκδοση Αν ένα cache έχει άδεια S, σε περίπτωση eviction ή παραχώρησης άδειας M, «αγνοεί» το μπλοκ χωρίς καμία επικοινωνία με άλλα caches ή το memory Οι αιτήσεις GetS και GetM εξυπηρετούνται από όποιον έχει άδεια M, διαφορετικά από το memory ΙΙΙ 21 lalis@inf.uth.gr
Ενδεικτικό σενάριο εκτέλεσης cycle Cache CPU1 Cache CPU2 MEM Request on bus on bus nit SM 1 load miss; GetS S* 2 GetS (CPU1) 3 nop nop SM 4 5 copy & hit S nop nop 5 store miss; GetM M* 6 GetM (CPU2) 7 nop nop 8 9 nop copy & hit M nop 10 load miss; GetS S* 11 GetS (CPU1) 12 nop S SM* 13 14 copy & hit S nop copy SM 15 evict 16 evict ΙΙΙ 22 lalis@inf.uth.gr
Snooping protocols Τα προηγούμενα πρωτόκολλα βασίζονται στην υπόθεση ότι οι cache & memory controllers βλέπουν κάθε μήνυμα που στέλνεται, ακόμα και όταν το μήνυμα δεν προορίζεται για αυτούς Ονομάζονται και snooping protocols Αυτά τα πρωτόκολλα έχουν πρόβλημα κλιμάκωσης Είναι δύσκολο (και ακριβό) να υλοποιηθούν κανάλια επικοινωνίας totally ordered broadcast για μεγάλο αριθμό πυρήνων/επεξεργαστών Η λύση του κοινού διαύλου περιορίζει την απόδοση, αφού ο δίαυλος γίνεται κεντρικό σημείο συμφόρησης ΙΙΙ 23 lalis@inf.uth.gr
Directory-based protocols Η κατάσταση του συστήματος (ποια caches έχουν πιο μπλοκ σε ποια κατάσταση) καταγράφεται σε ένα κεντρικό σημείο/κατάλογο: directory Ο κατάλογος είναι συνήθως στον memory controller Οι αιτήσεις στέλνονται μόνο στον κατάλογο Ο κατάλογος είτε στέλνει την απάντηση άμεσα είτε προωθεί την αίτηση στον «ιδιοκτήτη» του μπλοκ Η επικοινωνία βασίζεται σε point-to-point ανταλλαγή μηνυμάτων, και μπορεί να γίνει χωρίς να υπάρχει κάποιος κοινός δίαυλος επικοινωνίας (bus) Καλύτερη κλιμάκωση, αλλά μεγαλύτερη καθυστέρηση ΙΙΙ 24 lalis@inf.uth.gr
Απλό directory-based MS protocol GetS transaction memory S/M: στέλνεται το μπλοκ memory Ι: η αίτηση προωθείται στον owner GetM transaction memory M: στέλνεται το μπλοκ memory Ι: η αίτηση προωθείται στον owner memory S: στέλνεται το μπλοκ, και ειδοποιούνται όλοι οι sharers να ακυρώσουν το μπλοκ αναμονή για επιβεβαιώσεις PutS/PutM transaction memory: ακύρωση άδειας / & αποθήκευση μπλοκ ΙΙΙ 25 lalis@inf.uth.gr
Ι S: directory is owner/sharer requestor directory S GetS S/M S S S ΙΙΙ 26 lalis@inf.uth.gr
S: other cache is owner requestor directory owner S GetS S Fwd-GetS M S S S S S ΙΙΙ 27 lalis@inf.uth.gr
M: directory is owner requestor directory M GetM M [acks=0] M M ΙΙΙ 28 lalis@inf.uth.gr
M: other cache is owner requestor directory owner M GetM Fwd-GetM M [acks=0] M M ΙΙΙ 29 lalis@inf.uth.gr
/S M: other caches are sharers requestor directory sharer sharer M S SM GetM S nv [acks=2] S S nv-ack nv-ack M M SM M ΙΙΙ 30 lalis@inf.uth.gr
S : directory may become owner requestor directory S S PutS Put-Ack S S/M* (*) if #sharers = 0 S ΙΙΙ 31 lalis@inf.uth.gr
M : directory becomes owner requestor directory M M PutM+ M Put-Ack M ΙΙΙ 32 lalis@inf.uth.gr
FSM for cache controller load store evict F-GetS F-GetM nv GetS S D GetM M A,D S D stall stall stall stall M A,D stall stall stall stall stall M A stall stall stall stall stall S hit GetM SM A PutS S A SM A,D hit stall stall stall stall SM A hit stall stall stall stall M hit hit PutM, M A M A stall stall stall S A stall stall stall ΙΙΙ 33 lalis@inf.uth.gr A stall stall stall (+d) S (+d) S A A nv-ack nv-ack M A,D nv-ack A Put- Ack nop nop nop Dir/0 cpy/hit S cpy/hit M hit M Dir/N cpy/hit M A hit SM A Ownr cpy/hit S cpy/hit M hit M nv-ack ack--; ack==0 M ack--; ack==0 M ack--; ack==0 M ack--; ack==0 M
FSM for memory controller (directory) GetS GetM PutS PutM+ Ownr PutM+ non-ownr M S Put-Ack Put-Ack share += req; own = req; S share += req; nv to all sharers own = req; Put-Ack share -= req; share==0 M Put-Ack share -= req; Fwd-GetS to own S D share += req; share += own; own = 0; Fwd-GetM to own own = req; Put-Ack Put-Ack,cpy M own = 0; Put-Ack S D stall stall Put-Ack share -= req; Put-Ack share -= req; cpy S ΙΙΙ 34 lalis@inf.uth.gr
Μη ατομικότητα requests/transactions, ξεχωριστά κανάλια επικοινωνίας Μηνύματα διαφορετικού τύπου μπορεί να στέλνονται πάνω από ξεχωριστές συνδέσεις επικοινωνίας Μπορεί να προκύψουν «παράδοξα» φαινόμενα CPU: nv σε κατάσταση S D directory λαμβάνει GetS από την CPU1, και στέλνει στην CPU1 την άδεια S μαζί με τα δεδομένα directory λαμβάνει GetM από την CPU2, και στέλνει nv στην CPU1, που φτάνει πριν τα CPU1: Fwd-GetS σε κατάσταση M A directory λαμβάνει GetM από την CPU1, και στέλνει nv στις CPU με άδεια S, που στέλνουν nv-ack στην CPU1 directory λαμβάνει GetS από την CPU2, και προωθεί στην CPU1 αίτηση Fwd-GetS, που φτάνει πριν τα nv-acks Παρόμοια φαινόμενα υπάρχουν και στο directory ΙΙΙ 35 lalis@inf.uth.gr
Πολλές διαφορετικές υλοποιήσεις Υπάρχουν πολλές παραλλαγές πρωτοκόλλων, τόσο snooping όσο και directory-based Η γενική αρχή είναι να εισάγονται περισσότερες ενδιάμεσες/τελικές καταστάσεις έτσι ώστε να αποφεύγονται τα «περιττά» stalls ή/και μεταδόσεις δεδομένων πάνω από το bus / interconnect Βεβαίως, όσο περισσότερες (ενδιάμεσες) καταστάσεις τόσο μεγαλύτερη η πολυπλοκότητα υλοποίησης ΙΙΙ 36 lalis@inf.uth.gr