Parallelverarbeitung und Cluster-Computing (RESH)

Kommunikationssoftware

Als Kommunikations- und Administrationssoftware für das am Institut betriebene Rechnerbündel Carla verwenden wir die hier entwickelte und von der ausgegründeten Firma ParTec AG zur Marktreife gebrachte ParaStation Software. Sie erlaubt einen hohen Durchsatz beim Datenaustausch zwischen den Prozessen einer parallelen Anwendung. Die Kommunikationsschicht ist hauptsächlich auf MPI-Anwendungen ausgerichtet. Daher wurde sie im Jahr 2002 um einen Netzwerktreiber erweitert, der eine Ethernetverbindung simuliert. Mit diesem Modul können existierende Anwendungen ohne eine Anpassung oder Neuübersetzung das Hochgeschwindigkeitsnetzwerk für TCP/IP-Verbindungen nutzen. Als Evaluation diente das parallele Dateisystem PVFS, das in Zusammenarbeit mit der Arbeitsgruppe für Elementarteilchen- und Computergestützte Physik der Universität Wuppertal auf dem dort betriebenen Rechnerbündel ALiCE eingesetzt wird. Für realistische Anwendungen mit großem Ein-/Ausgabebedarf, wie sie bei Simulationen der QCD verwendet werden, konnte eine sehr gute Performanz erreicht werden. Die Ergebnisse werden im laufenden Jahr publiziert.

Parallele Programmierumgebungen

Im Projekt "Paralleles und verteiltes Programmieren von Rechnerbündeln in Java" untersuchen wir die Vorteile von Java bei der effizienten Nutzung der Ressourcen eines Rechnerbündels. Die hierfür entwickelte Sprache JavaParty erweitert Standard-Java um transparente entfernte Objekte. JavaParty wird von unseren Projektpartnern im DFG-Projekt RESH und von vielen externen Anwendern benutzt.

JavaParty realisiert einen verteilten Objektraum über entfernten Methodenaufruf (RMI). Parallele Kontrollfäden arbeiten darin an einer gemeinsamen Aufgabe und wechseln bei Bedarf in entfernten Aufrufen zu anderen Knoten.

Weiterhin wurden Vorüberlegungen zur Realisierung eines Sicherungsmechanismus für verteilte Anwendungen angestellt. Durch eine regelmäßige Sicherung des Programmzustandes kann der Verlust von in langen Programmlaufzeiten gewonnenen Daten vermieden werden. Dieser Vorgang soll möglichst transparent für die Anwendung und kostenoptimal im Hinblick auf die verwendeten Ressourcen (Zeit im Verhältnis zur Gesamtrechenzeit, Haupt- und Plattenspeicher, Netzlast) ablaufen. Die Sicherung einer verteilten Anwendung ist jedoch aufwändiger als die einer Einzelanwendung, weil Abhängigkeiten beachtet werden müssen, die durch die Kommunikation der einzelnen Prozesse entstehen und die Konsistenz der globalen Sicherungspunkte gefährden. Hierfür gibt es eine Zahl von Strategien, die jedoch auf nachrichtenbasierte Systeme ausgerichtet sind. Eine JavaParty-Erweiterung für verteilte Sicherungspunkte stellt dagegen einen Ansatz auf der Sprach- und damit auf einer abstrakteren Ebene dar, von dem wir uns die Möglichkeit weitergehender Optimierungen versprechen.

Weitere Informationen zu JavaParty und KaRMI finden Sie unter https://svn.ipd.kit.edu/trac/javaparty/wiki/JavaParty.

Paralleles Dateisystem

Clusterfile ist ein paralleles Dateisystem für Rechnerbündel. Das Jahr 2002 war geprägt von einer Verbreiterung des Anwendungsgebietes. Der frühere Entwurf zielte darauf ab, die interne Parallelität der Anwendungen effizient auszunutzen. Interne Parallelität entsteht durch den E/A-Zugriff mehrerer Prozesse, die zu derselben Anwendung gehören. Im Gegensatz dazu tritt externe Parallelität bei gleichzeitigem Zugriff verschiedener Anwendungen auf. Die Erweiterungen sprechen diese externe Parallelität an, indem nicht nur anwendungsspezifische, sondern auch systemweite Optimierungen eingeführt werden.

Das Dateisystem ist zu einem Teil auf der Benutzer-Ebene und zum anderen Teil im Kern des Betriebssystems Linux implementiert. Mittels eines Kern-Moduls, das die VFS (Virtual Filesystem Switch) Schnittstelle unterstützt, lässt sich Clusterfile in dem lokalen Verzeichnisbaum jedes Knotens montieren. Die Metadaten werden durch Kooperation des Kern-Moduls mit einem zentralen Manager verwaltet. Es wurden kollektive E/A-Operationen eingeführt, um gleichzeitige Zugriffe von mehreren Rechenknoten auf dieselbe Datei zu optimieren. Darüber hinaus wurde eine MPI-IO-Schnittstelle für Clusterfile implementiert, die zur Zeit mit anderen MPI-IO-Implementierungen verglichen wird.

In Zukunft planen wir die Performanz und Skalierbarkeit der Anwendungen durch Einführung von kooperativem Caching zu erhöhen. Diese Erweiterung soll in Zusammenarbeit mit dem Teilprojekt "Skalierbare Dienste auf Rechnerbündeln" durchgeführt werden. Darüber hinaus soll auch die Skalierbarkeit bei der Verwaltung der Metadaten durch die Dezentralisierung verbessert werden. Wir untersuchen zur Zeit mögliche Verfahren, wie zum Beispiel die Verteilung oder die Replikation der Metadaten auf den Rechenknoten der Rechnerbündels.

Abwickler-Strategien auf Rechnerbündeln

Verfahren zur Gruppen-Abwicklung (Gang Scheduling) koordinieren Prozesswechselentscheidungen auf Mehrprozessorsystemen zwecks Leistungsverbesserung. Sie bringen Gruppen intensiv miteinander kommunizierender Prozesse gleichzeitig zum Ablauf. Dadurch sollen Prozesswechsel durch Warten auf gerade nicht ablaufende Kommunikationspartner (Prozess-Flattern) vermieden werden.

Während Gruppen-Abwicklung bei klassischen parallelen Rechnern etabliert ist, stellen Rechnerbündel neue Herausforderungen. Die über Anwendungen lose gekoppelten Betriebssystemkerne arbeiten weitgehend unabhängig voneinander; Rechnergrenzen übergreifende Prozesskoordinierung kann durch betriebssysteminterne, höherpriore Aufgaben (Hardwareunterbrechungen, Speicherauslagerung) unterlaufen werden. Die durch die lose Kopplung hohe Kommunikationslatenz begrenzt die erzielbare Genauigkeit der Koordinierung.

Im Berichtszeitraum wurde im Linux-Kern ein Mechanismus zur entfernten Auslösung prozessgruppenorientierter Prozesswechsel auf Basis von ICMP-Paketen implementiert. Zur Validierung wurden der Kern instrumentiert und Analyse-Werkzeuge entwickelt, mit denen die erhoffte Wirkung des Mechanismus anhand der resultierenden Prozessabläufe nachgewiesen werden konnte. Darauf aufbauend sollen verschiedene Abwickler-Strategien entwickelt, evaluiert und optimiert werden.

Skalierbare Dienste auf Rechnerbündeln

Dieses Projekt zielt darauf ab, Rechnerbündel als leistungsfähige Plattform zur Entwicklung skalierbarer Dienstgeber zu verwenden. Unsere Arbeit konzentriert sich auf zwei Richtungen. Zum einen versuchen wir, effiziente Mechanismen für den Lastausgleich und kooperatives Caching zwischen Rechenknoten zu entwickeln. Zum anderen sind wir daran interessiert, einen performanten Ausgleich zwischen den konträren Zielen Lastausgleich und hoher Datenlokalität zu erreichen.

Im letzten Jahr haben wir in den beiden erwähnten Richtungen deutliche Fortschritte gemacht. Zunächst haben wir CARDs ("Cluster Aware Remote Disks") entwickelt. CARDs sind Plattentreiber im Kern, deren Betrieb auf kooperierenden Caching-Algorithmen aufbaut. Wir haben einen solchen Algorithmus entworfen und entwickelt, den wir "Home-Based Serverless Cooperative Caching" (HSCC) nennen. Für weitere Informationen über CARDs, HSCC und ihre Bewertung siehe http://www.ipd.uka.de/RESH/publ.html.

Ferner haben wir mit "Home-Based Locality-Aware Request Distribution" (HLARD) eine Anfrageverteilungspolitik entworfen und entwickelt, die HSCC mit der Migration von TCP-Verbindungen vereinigt. Über die Migration von TCP-Verbindungen können zwei Dienstgeber in einem Cluster einen Verbindungs-Endpunkt tauschen. HLARD verteilt ankommende Anfragen entsprechend der über HSCC bekannten Lokalität der angeforderten Daten.