From 59408f5a12e9fb35332a345571fc55c8b1443289 Mon Sep 17 00:00:00 2001 From: Marco Ammon Date: Mon, 23 Sep 2019 18:22:13 +0200 Subject: [PATCH] DSM: erster Entwurf --- 2-7-dsm.tex | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/2-7-dsm.tex b/2-7-dsm.tex index 3449d34..b382344 100644 --- a/2-7-dsm.tex +++ b/2-7-dsm.tex @@ -1 +1,55 @@ -\subsection{Distributed Shared-Memory (DSM)} \ No newline at end of file +% !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} \ No newline at end of file