Doping für CPUs — Möglichkeiten der Leistungssteigerung

Artikel-Index:

Ansätze der Optimierung per Hardware (SMP Fortsetzung)

Sym­me­tric Mul­ti-Pro­ces­sing (Fort­set­zung)
Ein wei­te­res Pro­blem stellt die Kohä­renz der Inhal­te der unter­schied­li­chen Cache-Hier­ar­chien dar. Cache-Kohä­renz bedeu­tet die Wah­rung der Gül­tig­keit der Inhal­te der Caches. Wird bei­spiels­wei­se ein Wert aus dem Arbeits­spei­cher von bei­den Pro­zes­so­ren in den jeweils eige­nen Cache gela­den und von einem anschlie­ßend ver­än­dert wie­der zurück­ge­schrie­ben, muss der zwei­te Pro­zes­sor von die­sem Vor­gang Wis­sen haben, um sei­ne eige­nen Caches ent­spre­chend zu aktualisieren.

SMP-Sys­te­me haben hier­für ein sog. Cache-Kohä­renz Pro­to­koll, wel­ches für die Kor­rekt­heit der Daten sorgt.
Das Pro­to­koll mit der höchs­ten Ver­brei­tung ist das sog. MESI-Pro­to­koll. Jeder der Buch­sta­ben steht hier­bei für einen bestimm­ten Zustand einer Cache-Line, die ein­zel­nen Zustän­de sind wie folgt definiert:

* Modi­fied: Der Inhalt im Arbeits­spei­cher wur­de seit dem spie­geln in den loka­len Pro­zes­sor­cache modi­fi­ziert und stimmt somit nicht mehr überein
* Exclu­si­ve: Der Inhalt im Arbeits­spei­cher stimmt noch mit dem gespie­gel­ten Inhalt im Cache über­ein. Die Cache-Line befin­det sich nur im Cache eines ein­zel­nen Prozessors.
* Shared: Wie Exclu­si­ve, nur mit der Unter­schei­dung dass sich die Cache-Line in meh­re­ren Caches befin­det. Bei Aktua­li­sie­rung der ursprüng­li­chen Daten im Arbeits­spei­cher wer­den alle Caches auf den neu­es­ten Stand gebracht.
* Inva­lid: Der Inhalt im Pro­zes­sor­cache ist ungül­tig, ein Zugriff erzeugt einen Cache-Miss. Die Daten müs­sen neu aus dem Arbeits­spei­cher gela­den werden.

Die Erhal­tung der Kor­rekt­heit der Daten (auf fach­chi­ne­sisch Kohä­renz genannt) kos­tet jedoch ein klein wenig Per­for­mance, was je nach Umset­zung des Pro­to­kolls unter­schied­lich gra­vie­rend aus­fal­len kann.
Eine Erwei­te­rung des MESI-Pro­to­kolls stellt das noch nicht so ver­brei­te­te MOE­SI-Pro­to­koll dar. Es ist im Grun­de genom­men zum MESI-Pro­to­koll 100%ig kom­pa­ti­bel, kennt jedoch noch einen zusätz­li­chen Status: 

* Owner: Zeigt an in wel­chem Cache wel­ches Pro­zes­sors sich die Daten befin­den. Somit kön­nen ande­re Pro­zes­so­ren bei Bedarf die­se Daten aus dem Cache anfor­dern und spa­ren sich den dazu im Ver­gleich sehr lang­sa­men Hauptspeicherzugriff.

Hier­bei pas­siert fol­gen­des: Stellt CPU1 einen Read-Request auf einen bestimm­ten Spei­cher­be­reich (1) wird die­ser in der Regel direkt aus dem Arbeits­spei­cher in den Cache der CPU gela­den. Merkt die Chip­satz­lo­gik jedoch, dass eine wei­te­re sich im Sys­tem befind­li­che CPU genau die­sen Spei­cher­be­reich bereits im Cache hat, so wird der Read-Request vom lan­ge­sa­men Arbeits­spei­cher auf den schnel­len Cache der betref­fen­den CPU umge­lei­tet. (2)
Die betref­fen­de CPU (im Bei­spiel CPU0) über­trägt die Cache-Line anschlie­ßend zum Chip­satz, (3) wel­cher sie direkt wei­ter­lei­tet an CPU1 (4). Somit wer­den mas­siv Takt­zy­klen ein­ge­spart die beim Zugriff auf den im Ver­gleich zum schnel­len Cache um den Fak­tor hun­dert bis eini­ge Tau­send lang­sa­me­ren Arbeits­spei­cher mit Nichts­tun ver­bracht wor­den wären.
Wei­ter­hin pro­fi­tiert auch der Spei­cher­bus von die­ser Tak­tik, da weni­ger Zugrif­fe auf den Spei­cher­bus statt­fin­den und er somit für ande­re Auf­ga­ben ver­füg­bar ist.

Der durch die Wah­rung der Kohä­renz ver­ur­sach­te Per­for­mance­ver­lust wird durch effi­zi­en­te Umset­zung des MOE­SI-Pro­to­kolls anstel­le des MESI-Pro­to­kolls wie­der mehr als wettgemacht.