Konzepte und Beispiele paralleler Rechnerarcharhitekturen (lV):

Parallel agierende Minis bieten Fehlertoleranz

12.07.1985

Von CW-Mitarbeiter Egon Schmidt

Rechner mit mehreren, parallel operierenden Bearbeitungselementen können primär mit dem Ziel konzipiert werden, einen höheren Durchsatz zu erreichen. Als andere Zielsetzung ist möglich, bei Ausfall eines Teils des ganzen Komplexes die Operation des Gesamtsystems dennoch fortsetzen zu können Läuft alIes nach Plan, bietet der Gesamtkomplex dabei einen höheren Durchsatz als jene Minimalkonfiguration, die zum "Gerade-noch-Aufrechterhalten" des Betriebes notwendig ist.

Wie ein Computer der skizzierten Auslegung aussehen kann, schilderte unlängst auf einem Fachkongreß Hermann Johannes von der Firma Nixdorf, Paderborn. Er beschrieb diesen Rechner als einen Allzweck-Supermini, der aus mehreren einzelnen Minis besteht, die ihrerseits wiederum aus Mikrocomputern aufgebaut sind. Darüber hinaus sind alle Einheiten, deren Ausfall kritische Folgen haben würde, mindestens doppelt vorhanden.

Solch eine Art Computer, so Johannes, sei besonders gut für moderne Transaktions-Systeme geeignet, die schärferen Anforderungen gerecht werden müßten als herkömmliche Stapel-Rechner. Also für Anwendungen, in denen man Wert darauf legt, daß alle Datenbestände permanent aktuell sind, daß das System ein Höchstmaß an Verfügbarkeit aufweist, daß die Integrität aller Datenbestände gesichert ist, daß niemand lange auf Antworten warten muß und daß sich die ganze Maschinerie bei zunehmender Belastung schrittweise ausbauen läßt.

Fehlertolerante Computer werden in dem Maße zunehmend verlangt,

wie immer mehr Menschen in immer mehr Lebensbereichen vom korrekten Funktionieren dieser Transistor-Hirne abhängen. Schon heute sind es vor allem Anwendungen mit Publikumsverkehr, etwa Reservierungssysteme für Reisen und dergleichen, wo eigentlich niemand es sich leisten kann, plötzlich mit einer stillstehenden Anlage konfrontiert zu werden.

Ähnlich wichtig ist es in der industriellen Produktion, daß Steuerungssysteme, etwa für ein aufwendiges Lager und dergleichen, laufend einsatzbereit sind.

Fehlertoleranz und modulare Ausbaubarkeit kann nach Johannes Ausführungen zum Beispiel ein System bieten, das aus mindestens zwei und maximal 32 Minicomputern besteht, die alle jeweils Prozessoren, Speicher und Peripherieeinheiten besitzen und über schnelle Systembusse miteinander gekoppelt sind. Fällt einer dieser Rechner aus, können die anderen seine Last übernehmen.

Allerdings muß man klar sehen, daß Fehlertoleranz schon noch etwas mehr erfordert als nur eine Gruppe parallel nebeneinander werkelnder Rechner. Dazu gehört auch, von Software-Aspekten einmal ganz abgesehen, die Installation fehlertoleranter Datenwege. Diese Wege müssen sowohl in den System- als auch in den Peripheriebussen (Daten-Sammelleitungen) fehlertolerant ausgelegt sein. Ferner müssen auch die Stromversorgungen zweifach vorhanden sein und ebenso natürlich die Plattenspeicher.

Was den Punkt Ausbauarbeit betrifft, ist bemerkenswert, daß dank der "inneren" wie "äußeren" modularen Struktur des von Johannes beschriebenen Konzepts zweigleisig gefahren werden kann: Das System läßt sich, wie schon gesagt, durch Hinzufügen weiterer kompletter Rechner erweitern, aber auch dadurch, daß man die einzelnen Minis einfach intern bis zur jeweiligen Höchstgrenze ausbaut, indem man zusätzliche Mikroprozessoren und Speicher-Platinen vorsieht. So soll es möglich sein, erstens kurze und zweitens auch noch "vorhersagbare" (Johannes) Antwortzeiten an den Terminals zu erzielen.

Wie nun sieht der einzelne Mini innerhalb solch eines fehlertoleranten Parallel-Systems aus "Intern", so sagt Johannes, "ist jeder Computer ein Multi-Mikroprozessorsystem auf der Basis von Mikroprozessoren der Serie 68000 von Motorola." Diese 32-Bit-Mikros sind das Kernstück der einzelnen dedizierten Prozessoren, die untereinander alle über einen lokalen, also Mini-internen, 32 Bit breiten Bus mit 20 Megabyte pro Sekunde Datenrate kommunizieren und die alle parallel arbeiten.

Der Message-Prozessor übernimmt die Kommunikation

Von diesen Prozessoren übernimmt ein sogenannter "Message-Prozessor" die Kommunikation mit den anderen maximal 32 Minis der Gesamtkonfiguration, wobei dieser Datenaustausch über zwei parallel

angeordnete Systembusse mit je 16 Megabyte pro Sekunde läuft. Das

entspricht also einer Architektur, bei der die Gesamtleistung des Systems in dem Maße, wie Minis eingefügt werden, immer stärker davon abhängt, wie gut die Inter-Computer-Busse der Belastung gewachsen sind.

Der Message-Prozessor hat neben der Kommunikation mit den Message-Prozessoren der übrigen Minis noch eine zweite Funktion: Auf ihm

läuft, erläutert Johannes, der Betriebssystem-Kern ab. Wobei an dieser Stelle noch zu notieren wäre, daß das Betriebssystem diese Konfiguration von bis zu 32 Minis "nach außen wie einen Computer erscheinen"

läßt. Denn laut Johannes sorgt es für den fehlertoleranten Betrieb und für ein hohes Maß an Parallelität in der Ausführung von Programmen und Systemfunktionen. Dabei soll es den Anwendungsprogrammierer sogar "von jeglichen Präventivmaßnahmen zur Fehlertoleranz" befreien.

Zurück zum inneren Aufbau der einzelnen Minis. Die nächste Einheit wird als "Application-Doppelprozessor" bezeichnet und baut sich aus zwei Motorola-CPUs und einer zugehörigen Speicherverwaltungseinheit auf. Dabei hat letztere die Aufgabe, den virtuellen Speicher zu managen. Diese beiden CPUs bearbeiten anwendungsnahe Systemprogramme und natürlich auch die gelegentliche Anwendungsprogramme .

Nummer 4 unter den Mini-internen Prozessoren ist ein - wahlweise auch zweifach vorhandener - eigener Disc-Prozessor, der sich neben den Platten auch gleich um die angeschlossenen Magnetbänder kümmert und der zu diesem Zweck einen eigentlichen Datenpfad zur Speicher-Peripherie besitzt; nämlich einen mit einer Datenrate von 2,8 Megabyte pro Sekunde.

Als letzter Prozessor sei schließlich dann noch der

Ein-/Ausgabe-Prozessor Jedes Minis erwähnt, der gleichfalls einen separaten Draht zur Außenwelt besitzt und auf ihm Daten mit einer Rate von zwei Megabyte pro Sekunde transferieren kann. Er ist, wie kaum besonders erwähnt werden muß, zur Steuerung der übrigen Peripheriegeräte, also der Terminals, der Drucker, der Kommunikationsleitungen etc. da. Auch dieser Prozessor kann mehrfach vorhanden sein.

Weiterhin verfügen die einzelnen Minis Aber Speichermodule von je einem oder vier Megabyte, die mit einer automatischen Fehlererkennungs- und -korrekturlogik ausgestattet sind. So können sie 1-Bit-Fehler automatisch korrigieren und Mehrbit-Fehler wenigstens erkennen und melden.

Im Normalfall arbeiten die Systeme parallel

Koppelt man mehrere dieser Computer zusammen, so können sie fehlertolerant und, im Normalfall, parallel arbeiten. Denn sollte einmal ein Teil eines der Minis ausfallen, wird der Computer abgeschaltet und "ein anderes System führt die laufenden Programme nahezu ohne Unterbrechung fort". Ist aber alles in Ordnung, so arbeiten die Computer, laut Johannes, alle an verschiedenen Aufgaben. Dies ist eine Arbeitsweise, die in der Fehlertoleranz-Fachwelt unter dem Stichwort "aktive Redundanz" bekannt ist.

Damit die Computer überhaupt "erkennen" können, ob tief in ihrem Inneren ein Defekt vorliegt oder nicht, sitzen auf jeder ihrer Platinen eigene Diagnose-Chips. Das gilt nicht nur für eine Fehlererkennungsschaltung der Speicherplatinen. Beispielsweise auch die Daten- und Adreßleitungen werden mit Hilfe besonderer Parity-Generatoren und -tester überprüft. Doch die Krönung dieses Konzepts sind besondere Diagnose-Mikroprozessoren, die sich auf jeder einzelnen Platine des Rechners finden, und die, je nach den benötigten Funktionen, spezialisierte, platinenspezifische Diagnoseprogramme ausführen.

Diese Diagnoseprogramme wiederum sind so gestaltet, daß sie dem Service-Mann im Falle des Falles Hinweise darauf geben, welche Komponenten versagt haben und auf welche Weise er den Rechner am schnellsten wieder funktionsfähig machen kann. Drückt der hilfreiche Experte schließlich wieder die Starttaste des Rechners, so überprüfen besondere Testprogramme erst noch genau, ob alles wie geplant funktioniert. Erst dann schaltet der Rechner sich wieder in das Gesamtsystem ein. Nicht nur die Computer bilden eine parallele Konfiguration, auch "alle Datenwege" sind doppelt vorhanden, hebt Johannes hervor. Schließlich läßt sich das System so konfigurieren, daß auf je einem Plattenspeicher und auch auf je ein Peripheriegerät zwei Computer Zugriff haben. Wie schon erwähnt, kann man die Daten jeweils auf zwei Plattenspeicher halten, also doppelt.

Diese Art der Datenspeicherung bietet den besonderen Vorteil, daß bei Leseoperationen stets diejenige der beiden Platten angesprochen werden kann, die auf die gerade gefragten Daten schneller zugreift. Das soll in der Praxis auf eine Halbierung der Zugriffszeit hinauslaufen.

Schließlich sei noch bemerkt, daß jeder Computer über ein eigenes Netzteil und auch seine eigene Notstrom-Batterie verfügt. Sie erlaubt es, die Register-Inhalte für 24 Stunden zu bewahren.

Nun kann aber Hardware noch so raffiniert sein - erst wenn sie effizient genutzt wird, ergibt sich ein brauchbares System aus dem Ganzen. Wie also setzt das zum hier skizzierten Computersystem gehörende Betriebssystem die von der Hardware gebotenen Möglichkeiten in ein fehlertolerantes, paralleles Arbeiten um?

Das Betriebssystem, so betont Johannes, bildet "die Basis der Systemsoftware" und erlaubt den fehlertoleranten Programmablauf "durch softwareseitige Redundanz". Das bedeutet praktisch, daß das Betriebssystem schon von sich aus und ganz automatisch den fehlertoleranten Betrieb der parallel angeordneten Einheiten gewährleistet. Dieser fehlertolerante Betrieb ist also "für den Organisations- und Anwendungsprogrammierer völlig transparent": Er programmiert fehlertolerante Programme "genauso wie nicht fehlertolerant ablaufende Programme auf konventionellen Systemen".

Das läuft folgendermaßen ab: Das Betriebssystem erzeugt für jedes Programm automatisch einen Primär-Prozeß und dann dazu noch auf einem anderen Computer einen Backup-Prozeß. Letzterer ist ein "passiver Prozeß" und stellt somit laut Johannes "nur minimale Anforderungen an Speicherplatz und CPU-Zeit". Dadurch ist es möglich, die restliche Leistung jenes zweiten Minicomputers für weitere Prozesse einzusetzen.

Das Betriebssystem ist nun so gestaltet, daß es den Backup-Prozeß fortwährend "auf dem laufenden" hält, um den Sachverhalt mit einfachen, plastischen Worten zu umschreiben. Das heißt, jener Reserve-Prozeß wird automatisch mit allen Informationen versorgt, deren er bedarf, um bei einem Ausfall des Primär-Prozesses dessen Aufgaben fort führen zu können.

So etwas klingt einfach, bedarf aber doch einiger Kunstgriffe, ehe es

wirklich funktionieren kann. Dabei basieren alle Maßnahmen auf dem Grundgedanken, daß zwei Prozesse, die beim Start den gleichen Zustand aufweisen, dann identisch ablaufen, wenn sie stets die gleichen Eingaben erhalten und die gleichen Ausgaben produzieren.

Demzufolge müssen Primär- und Backup-Prozeß gemeinsam verwaltet werden, daß es für beide in kurzen Abständen immer wieder gemeinsame, gleiche Aufsetzpunkte gibt. Ist der Primär-Prozeß ausgefallen, genügt es dann, dem Backup "einfach" seit dem letzten gemeinsamen Aufsetzen exakt alle die Nachrichten zu übermitteln, die der Primärprozeß bis zu seinem Ausfall verarbeitet hat. Auf diese Weise ist es dann - zumindest in der Theorie - möglich, daß der Backup-Prozeß durch dieses "Nacharbeiten" genau den Zustand erreicht, den eigentlich der Primärprozeß haben sollte. Was bedeutet, daß das Programm fortgeführt werden kann, als wäre nichts geschehen.

In der konkreten Realisierung dieses Konzepts sieht die Sache so aus, daß beide Prozesse in kurzen Abständen synchronisiert werden und daß vom jeweils letzten Synchronisationspunkt an alle Nachrichten, die der Primär-Prozeß erhält und verarbeitet, für den Backup gespeichert werden. Bei der nächsten Synchronisation werden diese "alten" Nachrichten dann einfach gelöscht und die nächsten neu gespeichert. Der Backup kann somit jederzeit vom letzten, Synchronisationspunkt aus starten und alles nacharbeiten, was der ausgefallene Primär-Prozeß seither bereits verarbeitet hat.

Die Zeit, die diese Rekonstruktion in Anspruch nimmt, beträgt laut Johannes maximal einige Sekunden. Das ist übrigens bewußt so festgelegt worden, denn Ausfälle, so hofft man wenigstens, sollten ja "seltene Ereignisse" sein. Deshalb erschien es sinnvoller, auf hohe Effizienz im Normalbetrieb zu achten, als auf eine sehr schnelle Aufholjagd des

Backup-Prozesses.

Daran läßt sich auch demonstrieren, daß bei jedem fehlertoleranten Parallel-System ein Kompromiß gesucht werden muß, der die Effizienz im Normalbetrieb und die Zeit für die fällige Rekonstruktion in ein vernünftiges Verhältnis zueinander setzt. Wobei es wiederum ganz von den Umständen, unter denen das Gesamtsystem arbeiten soll, abhängt wo dieser Kompromiß konkret liegt. Nicht in jeder Umgebung ist für einen Rekonstruktionsprozeß von mehreren Stunden Dauer Zeit genug vorhanden.

Vom Kern dieses Betriebsystems, das alle hier erwähnten Leistungen erbringt, ist in jedem der am Gesamtsystem beteiligten Minicomputer eine Kopie vorhanden. Dieser Kern nimmt aber nur lokale Funktionen wahr, wie beispielsweise die Erzeugung und Verwaltung der Prozesse, die Verwaltung des Speichers, "System-Calls" und die Verteilung der Nachrichten. Dagegen werden alle die Betriebssystemfunktionen, die systemweit verfügbar sein müssen, vom Kern getrennt und als System-Prozesse implementiert. Zu ihnen gehören beispielsweise der File-, Page- und der Terminal-Server .

"Systemprozesse wie auch Anwenderprozesse kommunizieren über gleiche Mechanismen", sagt Johannes weiter. Damit diese Inter-Prozeß-Kommunikation wirklich effizient stattfindet, wurde das Message-System, das die Übertragung und Verteilung der Nachrichten steuert, direkt in den Kern des Betribssystems integriert.

Dieses Message-System hat aber noch weitere Aufgaben, die dem Zweck der Fehlertoleranz im System paralleler Rechner dienen. Es muß nämlich erstens sicherstellen, daß alle Nachrichten für den Primär-Prozeß, die dieser noch nicht verarbeitet hat, oder die nach der letzten Synchronisation eintrafen, auch vom Backup-Prozeß sicher gelesen werden können. Zweitens muß es dafür sorgen, daß das Betriebssystem des Backup-Computers auch wirklich auf die Daten des Primär-Prozesses zum Zeitpunkt der letzten Synchronisation zurückgreifen kann. Drittens muß gewährleistet sein, daß der Backup-Prozeß während des Recovery-Vorgangs die Nachrichten alle in genau derselben Reihenfolge liest wie davor schon der Primär-Prozeß bereits gesendet hat, nicht erneut sendet.

Parallelverarbeitung

Zu den Themen, die in EDV-Fachkreisen in letzter Zeit mehr und mehr Interesse gefunden haben, gehört auch die parallele Datenverarbeitung, also die Abkehr vom herkömmlichen Uniprozessor. Sie tritt, in zahlreichen Konzepten und Produkten ,in höchst vielseitiger Form zutage und wird auch von Wissenschaftern mit zu den interessantesten Forschungsgebiet der Informatik gezählt .Der CW wird das Gebiet "Parallelverarbeitung" in einer losen Folge themengerichteter Seinen beleuchten ,ohne aber Systematik oder enzyklopädische Vollständigkeit anzustreben. Dabei wird der Bogen der Texte, die die wichtigsten Aspekte des Parallel-Processing abdecken sollen, von der reinen Theorie bis zu praktisch nutzbaren Produkten der einschlägigen Industrie gespannt.

Bisher erschienen:

"Datenverarbeitung im Gänsemarsch stößt an ihre Grenzen"(CW 22, Seite 58),

"Der Mikroprozessor wird attraktiv" (CW 22, Seite 56),

"Gebündelte Mikrorechner liefern MFLOPS zum Discount-Preis"

(CW 25, Seite 76).