Verteilter gemeinsamer Speicher - Distributed shared memory
In der Informatik ist Distributed Shared Memory ( DSM ) eine Form der Speicherarchitektur, bei der physisch getrennte Speicher als ein logisch gemeinsam genutzter Adressraum adressiert werden können. Hier bedeutet der Begriff „gemeinsam genutzt“ nicht, dass es einen einzigen zentralen Speicher gibt, sondern dass der Adressraum „gemeinsam genutzt“ wird (dieselbe physikalische Adresse auf zwei Prozessoren bezieht sich auf denselben Speicherort). Verteilter globaler Adressraum ( DGAS ) ist ein ähnlicher Begriff für eine breite Klasse von Software- und Hardwareimplementierungen, bei denen jeder Knoten eines Clusters zusätzlich zum nicht gemeinsam genutzten privaten Speicher jedes Knotens Zugriff auf gemeinsam genutzten Speicher hat .
Ein System mit verteiltem Speicher, oft als Multicomputer bezeichnet , besteht aus mehreren unabhängigen Verarbeitungsknoten mit lokalen Speichermodulen, die durch ein allgemeines Verbindungsnetzwerk verbunden sind. Software-DSM-Systeme können in einem Betriebssystem oder als Programmierbibliothek implementiert werden und können als Erweiterungen der zugrunde liegenden virtuellen Speicherarchitektur betrachtet werden . Wenn sie im Betriebssystem implementiert sind, sind solche Systeme für den Entwickler transparent; Das bedeutet, dass der zugrunde liegende verteilte Speicher vollständig vor den Benutzern verborgen ist. Im Gegensatz dazu sind Software-DSM-Systeme, die auf Bibliotheks- oder Sprachebene implementiert sind, nicht transparent und Entwickler müssen sie in der Regel anders programmieren. Diese Systeme bieten jedoch einen tragbareren Ansatz für DSM-Systemimplementierungen. Ein verteiltes Shared-Memory-System implementiert das Shared-Memory- Modell auf einem physikalisch verteilten Speichersystem.
Methoden zum Erreichen von DSM
Es gibt normalerweise zwei Methoden, um verteilten gemeinsamen Speicher zu erreichen:
- Hardware wie Cache-Kohärenzschaltungen und Netzwerkschnittstellen
- Software
Software-DSM-Implementierung
Es gibt drei Möglichkeiten, einen verteilten Softwarespeicher zu implementieren:
- seitenbasierter Ansatz unter Verwendung des virtuellen Speichers des Systems;
- Shared-Variable-Ansatz, der einige Routinen verwendet, um auf Shared-Variablen zuzugreifen;
- objektbasierter Ansatz, der idealerweise durch objektorientierte Disziplin auf gemeinsame Daten zugreift.
Message Passing vs. DSM
| Nachricht übergeben | Verteilter gemeinsamer Speicher |
|---|---|
| Variablen müssen gemarshallt werden | Variablen werden direkt geteilt |
| Kommunikationskosten liegen auf der Hand | Kommunikationskosten sind unsichtbar |
| Prozesse werden durch einen privaten Adressraum geschützt | Prozesse können Fehler verursachen, indem Daten geändert werden |
| Prozesse sollten gleichzeitig ausgeführt werden | Die Ausführung der Prozesse kann mit nicht überlappenden Lebensdauern erfolgen |
Software-DSM-Systeme haben auch die Flexibilität, den gemeinsam genutzten Speicherbereich auf unterschiedliche Weise zu organisieren. Der seitenbasierte Ansatz organisiert gemeinsam genutzten Speicher in Seiten fester Größe. Im Gegensatz dazu organisiert der objektbasierte Ansatz den gemeinsam genutzten Speicherbereich als abstrakten Raum zum Speichern gemeinsam nutzbarer Objekte variabler Größe. Eine weitere , häufig gesehen Implementierung verwendet einen TupleSpace , in dem die Einheit des Teilens ist ein Tupel .
Eine Architektur mit gemeinsam genutztem Speicher kann das Aufteilen von Speicher in gemeinsam genutzte Teile beinhalten, die auf Knoten und Hauptspeicher verteilt sind; oder Verteilen des gesamten Speichers zwischen Knoten. Ein Kohärenzprotokoll , das gemäß einem Konsistenzmodell ausgewählt wird , hält die Speicherkohärenz aufrecht .
Abstrakte Ansicht
Vorteile
- Skaliert gut mit einer großen Anzahl von Knoten
- Nachrichtenübermittlung ist ausgeblendet
- Kann mit komplexen und großen Datenbanken umgehen, ohne die Daten zu replizieren oder an Prozesse zu senden
- Im Allgemeinen günstiger als die Verwendung eines Multiprozessorsystems
- Bietet großen virtuellen Speicherplatz
- Programme sind durch gängige Programmierschnittstellen portierbarer
- Schützen Sie Programmierer vor dem Senden oder Empfangen von Primitiven
Nachteile
- Im Allgemeinen langsamerer Zugriff als nicht verteilter gemeinsamer Speicher
- Muss zusätzlichen Schutz gegen gleichzeitige Zugriffe auf gemeinsame Daten bieten
- Kann eine Leistungseinbuße nach sich ziehen
- Wenig Kontrolle des Programmierers über die tatsächlich generierten Nachrichten
- Programmierer müssen Konsistenzmodelle verstehen, um korrekte Programme schreiben zu können
- DSM-Implementierungen verwenden asynchrones Message-Passing und können daher nicht effizienter sein als Message-Passing-Implementierungen
Kohärenz des Verzeichnisspeichers
Speicherkohärenz ist notwendig, damit das System, das den DSM organisiert, in der Lage ist, den Zustand von Datenblöcken in Knoten über die das System bildenden Speicher hinweg zu verfolgen und aufrechtzuerhalten. Ein Verzeichnis ist ein solcher Mechanismus, der den Zustand von Cache-Blöcken aufrechterhält, die sich im System bewegen.
Zustände
Ein Basis-DSM verfolgt mindestens drei Zustände unter den Knoten für jeden gegebenen Block im Verzeichnis. Es wird einen Zustand geben, um den Block als nicht zwischengespeichert (U) zu diktieren, einen Zustand, um einen Block als exklusiven Besitz oder modifizierten Besitz (EM) zu diktieren, und einen Zustand, um einen Block als gemeinsam genutzt zu diktieren (S). Wenn Blöcke in die Verzeichnisorganisation eintreten, werden sie im Anfangsknoten von U zu EM (Eigentumszustand) übergehen. Der Zustand kann zu S übergehen, wenn andere Knoten mit dem Lesen des Blocks beginnen.
Es gibt zwei Hauptmethoden, um dem System zu ermöglichen, zu verfolgen, wo Blöcke zwischengespeichert werden und in welchem Zustand über jeden Knoten hinweg. Home-centric Request-Response verwendet das Home, um Anfragen zu bedienen und Zustände zu steuern, während Requester-Centric es jedem Knoten ermöglicht, seine eigenen Anfragen über das Home zu steuern und zu verwalten.
Wohnungsbezogene Anfrage und Antwort
In einem heimatzentrierten System vermeidet der DSM, Anforderungs-Antwort-Rennen zwischen Knoten handhaben zu müssen, indem er nur eine Transaktion gleichzeitig zulässt, bis der Heimatknoten entschieden hat, dass die Transaktion abgeschlossen ist – normalerweise, wenn das Haus jede Antwort erhalten hat Antwort des Prozessors auf die Anfrage. Ein Beispiel dafür ist Intels QPI- Home-Source-Modus.
Vorteile
- Datenrennen sind unmöglich
- Einfach zu implementieren
Nachteile
- Langsame, gepufferte Anfrage-Antwort-Strategie, begrenzt durch den Heimatknoten
Anfordererzentrierte Anfrage und Antwort
In einem anfordererzentrierten System ermöglicht das DSM den Knoten, nach Belieben über das Haus miteinander zu sprechen. Dies bedeutet, dass mehrere Knoten versuchen können, eine Transaktion zu starten, dies erfordert jedoch zusätzliche Überlegungen, um die Kohärenz zu gewährleisten. Zum Beispiel: Wenn ein Knoten einen Block verarbeitet und eine Anforderung für diesen Block von einem anderen Knoten erhält, sendet er eine NAck (Negative Acknowledgement), um dem Initiator mitzuteilen, dass der verarbeitende Knoten diese Anforderung nicht sofort erfüllen kann. Ein Beispiel dafür ist Intels QPI-Snoop-Source-Modus.
Vorteile
- Schnell
Nachteile
- Verhindert nicht natürlich Rennbedingungen
- Erzeugt mehr Busverkehr
Konsistenzmodelle
Der DSM muss bestimmte Regeln befolgen, um die Konsistenz bezüglich der Betrachtung der Lese- und Schreibreihenfolge zwischen den Knoten aufrechtzuerhalten, die als Konsistenzmodell des Systems bezeichnet wird .
Angenommen, wir haben n Prozesse und Mi Speicheroperationen für jeden Prozess i und dass alle Operationen sequentiell ausgeführt werden. Daraus können wir schließen, dass ( M1 + M2 + … + Mn )!/( M1 ! M2 !… Mn !) mögliche Verschachtelungen der Operationen sind. Das Problem bei dieser Schlussfolgerung besteht darin, die Korrektheit der verschachtelten Operationen zu bestimmen. Die Speicherkohärenz für DSM definiert, welche Verschachtelungen zulässig sind.
Reproduzieren
Es gibt zwei Arten von Replikationsalgorithmen. Read-Replikation und Write-Replikation. Bei der Read Replication können mehrere Knoten gleichzeitig lesen, aber nur ein Knoten kann schreiben. Bei der Schreibreplikation können mehrere Knoten gleichzeitig lesen und schreiben. Die Schreibanforderungen werden von einem Sequenzer bearbeitet. Die Replikation gemeinsam genutzter Daten tendiert im Allgemeinen zu:
- Reduzieren Sie den Netzwerkverkehr
- Förderung einer erhöhten Parallelität
- Ergebnis in weniger Seitenfehlern
Allerdings kann es schwieriger werden, Kohärenz und Konsistenz zu wahren.
Freigabe- und Eintrittskonsistenz
- Konsistenz freigeben: Wenn ein Prozess einen kritischen Abschnitt verlässt , werden neue Werte der Variablen an alle Sites weitergegeben.
- Eintragskonsistenz: Wenn ein Prozess in einen kritischen Abschnitt eintritt, aktualisiert er automatisch die Werte der gemeinsamen Variablen.
- Ansichtsbasierte Konsistenz: Dies ist eine Variante der Eintragskonsistenz, außer dass die gemeinsamen Variablen eines kritischen Abschnitts automatisch vom System erkannt werden. Eine Implementierung der ansichtsbasierten Konsistenz ist VODCA, das eine vergleichbare Leistung wie MPI auf Cluster-Computern aufweist.
Beispiele
Siehe auch
Verweise
Externe Links
- Verteilter gemeinsamer Cache
- Speicherkohärenz in gemeinsam genutzten virtuellen Speichersystemen von Kai Li, Paul Hudak, veröffentlicht in ACM Transactions on Computer Systems, Volume 7 Issue 4, Nov. 1989

