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

DSM-FIGUR

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.

Image
Zustandsdiagramm eines Speicherblocks in einem DSM. Ein Block ist "im Besitz", wenn einer der Knoten den Block im Zustand EM hat.

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.

Sequentielle Aufrufe und Antworten in DSM

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