DSM: erster Entwurf
This commit is contained in:
parent
8d290ac526
commit
59408f5a12
56
2-7-dsm.tex
56
2-7-dsm.tex
@ -1 +1,55 @@
|
||||
\subsection{Distributed Shared-Memory (DSM)}
|
||||
% !TeX spellcheck = de_DE
|
||||
\subsection{Distributed Shared-Memory (DSM)}
|
||||
\begin{itemize}
|
||||
\item Probleme: \begin{itemize}
|
||||
\item möglichst wenige Nachrichten
|
||||
\item Verwaltung der verteilten Speicherbereiche (Eigentümer, Kopien, konkurrierende Zugriffe)\begin{itemize}
|
||||
\item zentral (\begriff{verzeichnisbasiert})
|
||||
\item vollständig \begriff{repliziert}
|
||||
\item weiterleitungsbasiert
|
||||
\end{itemize}
|
||||
\item Behandlung von Caching
|
||||
\end{itemize}
|
||||
\item \begriff{Protokolle} (z.B. Single-Writer, Multiple-Writer, \textellipsis) implementieren \begriff{Modelle} (z.B. sequentiell, \enquote{faul}, \textellipsis)
|
||||
\item simple Beispiel-Implementierung basierend auf MPI: \begin{itemize}
|
||||
\item Zugriff auf globale Daten dürfen nur unter einem Lock (für Datenstrukturen, nicht Seiten!) erfolgen
|
||||
\item \enquote{Dämon}-Thread pro Instanz behandelt eingehende Nachrichten
|
||||
\item \enquote{globaler} Adressbereich wird lokal mit \texttt{mmap} gemappt, dann Zugriff durch \texttt{mprotect} entzogen
|
||||
\item Zugriff auf globalen Adressbereich $\rightarrow$ Fehler $\rightarrow$ Signalbehandlung: \begin{itemize}
|
||||
\item Seite von anderer Instanz anfordern
|
||||
\item Zugriff mit \texttt{mprotect} freigeben
|
||||
\item falls nicht Eigentümer, Registrierung der Seite am Lock
|
||||
\item Wiederholung der vorherigen, fehlgeschlagenen Operation
|
||||
\end{itemize}
|
||||
\item \texttt{lock}-/\texttt{unlock}-Verwaltung: pro Thread Stapel von \texttt{lock}/\texttt{unlock}-Paaren mit Seitenliste (enthält pro Eintrag Seitennummer und Zugriffsart), Abarbeitung bei Aufruf von \texttt{lock}/\texttt{unlock}
|
||||
\item bei Multiple-Writer: Lock dient hauptsächlich der Verfolgung der Zugriffe
|
||||
\item bei Single-Writer: Lock außerdem für exklusiven Zugriff (muss dann verteilt sein): wenn nicht Halter, Anforderung per expliziter Nachricht
|
||||
\item \texttt{unlock} bei schreibendem Zugriff: Diff zwischen aktuellem Zustand der Seite und dem bei der Einlagerung (\begriff{Zwilling}) wird an Eigentümer übertragen
|
||||
\item Optimierungsmöglichkeiten:\begin{itemize}
|
||||
\item Sammeln von Diffs vor Versenden
|
||||
\item Invalidierung (Senden der Änderungen an den Eigentümer) statt Aktualisierung (Broadcast der Änderungen an alle)
|
||||
\item Read-Only-Zugriff (keine Invalidierung bei \texttt{unlock} notwendig)
|
||||
\item Zugriff durch einen einzigen Thread (\texttt{lock} führt zum Wechsel des Eigentümers)
|
||||
\item Schreibhinweise/\begriff{Staffelstabweitergabe}: \begin{itemize}
|
||||
\item statt Umweg über Eigentümer, direkte Übertragung der Daten (und des Locks) an nächsten Zugreifer
|
||||
\item zur Verwaltung mehrerer Änderungen können Vektoren logischer Uhren verwendet werden mit Maximum aus eigener und fremder Zeit (bei \texttt{lock}) und Erhöhen der eigenen Zeit (bei \texttt{unlock})
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\item Beispiele für DSM-Implementierungen:\begin{itemize}
|
||||
\item Übertragung der Daten zum benutzenden Thread:\begin{itemize}
|
||||
\item Shasta (verwendet \begriff{Binary Rewriting}):\begin{itemize}
|
||||
\item zusätzlicher Code vor jedem Speicherzugriff
|
||||
\item Threads werden verteilt statt lokal erzeugt
|
||||
\item Abbildung von Adressen auf Cache-Zeilen mit drei Zuständen (invalid, shared, exclusive)
|
||||
\end{itemize}
|
||||
\item C Region Library (CRL) bietet C-Funktionen, deren Schnittstelle obigem Beispiel mit Single-Writer-Semantik ähnelt
|
||||
\end{itemize}
|
||||
\item Wechsel des Kontrollflusses zu den Daten:\begin{itemize}
|
||||
\item MCRL erweitert CRL und überträgt die aufrufende Funktion (mitsamt des aktuellen Stackframes) an den entfernten Knoten
|
||||
\item Large Virtual-Address-Space Machine (LVM) überträgt ganzen Thread auf entfernten Knoten:\begin{itemize}
|
||||
\item Compiler baut vor jedem Objektzugriff Lokalitätstest ein
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\end{itemize}
|
Loading…
Reference in New Issue
Block a user