ipdlogo Forschungsgebiete
Achtung: Es gibt eine neue Webseite des Lehrstuhls
dept-logo unilogo

Was macht das IPD?

Die folgenden Forschungsschwerpunkte werden von uns behandelt:

Multicore Software Engineering

Mit der Stagnierung der Prozessortaktfrequenzen und der Entwicklung von Mehrkernprozessoren, die mehrere CPUs auf einem Chip integrieren, wird die Parallelprogrammierung zur Alltagsaufgabe der Software-Entwickler werden. Parallelisierung wird für Performanz-kritische Anwendungen unverzichtbar sein. Wir entwickeln Software-Engineering-Konzepte, -Methoden und - Werkzeuge für die Entwicklung zuverlässiger paralleler Software aller Art. Insbesondere beschäftigen wir uns mit:

  • Architekturen/Entwurfsmuster/Frameworks/Bibliotheken für Multicore-Programme
  • Autotuning
  • Programmiermodelle und Spracherweiterungen für Multicore
  • Testen und Debugging für parallele Programme
  • Reengineering sequenzieller Programme -> parallele Programme
  • Werkzeuge und Entwicklungsumgebungen für Multicore Software
Unsere Gruppe in der Presse:
Kontakt: PD Dr. Victor Pankratius, Prof. Dr. Walter Tichy

Aktivitäten:

Young Investigator Group "Multicore Software Engineering" (PD Dr. Victor Pankratius)
Internationaler GI-Arbeitskreis: Software Engineering für parallele Systeme (SEPARS)

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 http://www.ipd.uka.de/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.

Softwaretechnik

Empirische Softwaretechnik

Im Jahr 2002 verglichen wir mit einem kontrollierten Experiment Paare von Programmierern mit einzelnen Entwicklern. Letztere wurden durch eine zusätzliche anonyme Durchsicht ihres Programmtextes unterstützt. Motiviert wurde diese Studie durch das Ziel, eine Technik zu finden, die nur 20% der Kosten von Programmiererpaaren hat, aber 80% der Qualität liefert. Da Inspektionen eine anerkannte Technik zur Qualitätssicherung sind, lag es nahe, den Vorbereitungsprozess auf Inspektionen, die Durchsichten, als potentiellen Kandidaten zu untersuchen. Teilnehmer waren 20 Studenten des XP-Praktikums.

Zwei erste Resultate konnten festgehalten werden: Erstens, wenn gleiche Qualität erreicht werden soll, so sind einzelne Entwickler fast genauso teuer wie Entwicklerpaare. Zweitens, wenn gleiche Qualität nicht gefordert ist, sondern nur das Fertigstellen der Aufgabe, so sind die Programme der Paare im Mittel 7 - 13% zuverlässiger bei durchschnittlich jedoch 24% höheren Kosten. Beide Ergebnisse konnten jedoch nicht statistisch untermauert werden.

Planung und Steuerung von Softwareprojekten

Es ist eine schwierige Aufgabe in der Praxis, die verfügbaren Entwickler den Aufgaben in einem Softwareprojekt so zuzuordnen, dass das Projekt möglichst schnell abgeschlossen wird. Die Zuordnung muss berücksichtigen, welche Aufgaben gerade in Arbeit sind, welche Entwickler gut für eine unerledigte Aufgabe geeignet sind, welchen Entwicklungsaufwand die Aufgaben haben und welchen weiteren Verlauf das Projekt nehmen könnte. Eine optimale Zuordnungs-Strategie ist daher schwer zu finden. Manager behelfen sich oft mit einfachen Regeln, z.B. große Komponenten zuerst zu entwickeln.

Aufbauend auf unserem wahrscheinlichkeitstheoretischen Modell für Software-Projekte haben wir ein Werkzeug entwickelt, mit dem man den Verlauf eines Projekts simulieren kann. Aus den Ergebnissen der Simulationsläufe kann man die Wahrscheinlichkeitsverteilung und den Erwartungswert für die Dauer des Projekts berechnen. Beispiele zeigen, dass die Wahl der Strategie einen großen Einfluss auf die Projektdauer hat. Außerdem zeigt sich, dass die Qualität einer Strategie von den Kenndaten des Projekts abhängt, etwa von der Stärke der Kopplung zwischen den Komponenten der Software.

Unsere Forschung wird von der DFG unter dem Projektnamen OASE (Optimale Ablaufsteuerung für die Software-Entwicklung) gefördert.

Leichtgewichtige Software-Prozesse

Extreme Programming und andere leichtgewichtige Software-Prozesse werden viel diskutiert, aber es mangelt an Modellen, mit denen sich der Nutzen und die Kosten dieser Prozesse gegeneinander abwägen lassen. Dazu müssen zunächst einzelne Techniken, z.B. die Paarprogrammierung beim Extreme Programming, bewertet werden. Bei der Paarprogrammierung arbeiten je zwei Entwickler gemeinsam an einer Aufgabe, so dass sich die Personalkosten im Vergleich zur herkömmlichen Entwicklung verdoppeln. Ein Paar von Programmierern ist aber schneller als ein einzelner Programmierer und der entstehende Code meist von höherer Qualität.

Die Frage ist, ob der Nutzen der Paarprogrammierung die erhöhten Personalkosten ausgleicht. Um diese Frage zu untersuchen, haben wir ein Kosten-Nutzen-Modell für Paarprogrammierung entwickelt. Es stellt sich heraus, dass der ökonomische Kontext, in dem ein Projekt abläuft, von entscheidender Bedeutung ist. Ist der Marktdruck besonders hoch, dann kann sich Paarprogrammierung finanziell lohnen. Ist der Marktdruck hingegen niedrig, werden im allgemeinen die Kosten der Paarprogrammierung ihren Nutzen übersteigen.

Methoden der Software-Zuverlässigkeit

Software-Inspektionen sind eine wichtige Technik zur Qualitätssicherung in der Software-Entwicklung. Inspektionen lassen sich auf praktisch alle Dokumente anwenden, die bei der Software-Entwicklung entstehen, also auch Pflichtenhefte oder Entwürfe. Dadurch ist es möglich, Fehler schon weit vor dem Testen zu finden. Um zu entscheiden, ob ein Software-Dokument in die nächste Entwicklungsphase übernommen werden kann oder erst weiter verbessert werden muss, wird anhand der Ergebnisse der Inspektion (z.B. gefundene Fehler je Inspektor) geschätzt, wieviele Fehler noch in dem Dokument enthalten sind.

Bisherige Methoden zum Schätzen der Fehleranzahl nach einer Inspektion sind viel zu ungenau, um in der Praxis brauchbar zu sein. Wir haben einen neuen Ansatz entwickelt, der im Gegensatz zu den bekannten Methoden nicht nur die Ergebnisse der Inspektion selbst, sondern auch die Ergebnisse früherer Inspektionen zur Schätzung ausnutzt. Unser neuer Ansatz liefert auf dem Standardbenchmark für Software-Inspektionen sehr gute Schätzergebnisse: unser Ansatz ist um einen Faktor 4 bis 5 genauer als die bekannten Methoden.


blank
 Login
Login: 
Passwort: 
 Links
  » IPD Tichy
  » JavaParty
  » JPlag
  » ClusterOS
  » Jamaica
  » Education Support Centre
  » CHIL
blank up