Vorige Seite
Inhalt
Nächste Seite
2. Technik von SMP-Systemen
In diesem Kapitel wollen wir die technischen Besonderheiten von Intel-basierten
SMP-Rechnern näher betrachten. Obwohl diese überwiegend aus PC-Standardkomponenten
bestehen, gibt es doch einige Unterschiede zu herkömmlichen PCs. Besonders SMP-Rechner
mit mehr als zwei Prozessoren (üblicherweise Serverboards, z.B. Intel SC450NX MP) sind
intern viel komplizierter aufgebaut, als Rechner mit nur zwei Prozessoren.
Das liegt unter anderem auch an dem gestiegenen Ressourcenbedarf, der nicht mehr durch
Standard-Komponenten gedeckt werden kann. Trotzdem sind diese Rechner aber PC/AT-kompatibel.
2.1. Die Intel-Multiprozessor-Spezifikation
Die von Intel initiierte Multiprozessor-Spezifikation ist eine Erweiterung des PC/AT-Standards um
symmetrische MP-Systeme. Wie oben schon erwähnt, sind solche Systeme überwiegend aus
"normalen" PC-Komponenten aufgebaut. Um eine SMP-Fähigkeit zu gewährleisten, müssen aber sowohl an
Hard- als auch Software Änderungen vorgenommen werden. Eine wesentliche Rolle z.B. bei der Repräsentation
eines SMP-Systems gegenüber der Software spielt das SMP-BIOS, das deswegen auch das "Herz" des
SMP-Konzeptes ist.
Die oben angesprochenen Änderungen werden in der Spezifikation
festgelegt. Betriebssysteme und Hardware, die nach den Richtlinien der MP-Spezifikation angefertigt
werden, sind zu Intel-basierten SMP-Systemen kompatibel. Die Spezifikation liegt mittlerweile in
der Version 1.4 vom Mai 1997 vor und kann unter http://developer.intel.com/design/intarch/MANUALS/242016.htm
heruntergeladen werden.
Folgende Grafik gibt einen Überblick über das durch die MP-Spezifikation definierte Konzept:
Bild 2.1.
Wie aus dem Bild ersichtlich, vermittelt das SMP-BIOS zwischen der Hardware und den Treibern bzw.
der HAL (Hardware Abstraction Layer) des Betriebssystems. Es stellt eine Reihe von SMP-spezifischen Datenstrukturen
zur Konfiguration des Systems (Prozessoranzahl, etc.) bereit, die von einem SMP-Betriebssystem genutzt werden können. Nicht SMP-fähige Betriebsysteme wie MS-DOS
sehen diese Datenstrukturen nicht, können aber die gewohnten PC/AT-Funktionen des SMP-BIOS nutzen und
laufen somit auch auf einem SMP-Rechner. Durch diesen "Trick" gewährleisten derartige Systeme
eine gewisse Rückwärtskompatibilität, wobei man aber sagen muss, daß SMP-Systeme die mit einem
nicht SMP-fähigen Betriebssystem benutzt werden, reine Verschwendung sind.
Selbstverständlich ist das von der MP-Spezifikation angegebene Konzept nicht das einzig mögliche,
um Multiprozessor-Architekturen zu realisieren. Vielmehr sollte PC-Herstellern damit die Möglichkeit gegeben
werden, PC/AT-kompatible MP-Systeme herzustellen, auf denen auch die üblichen Betriebssysteme laufen. Der
wesentliche Aspekt sind hier die Kosten. Die Hersteller müssen Dank der MP-Spezifikation nicht erst ein eigenes proprietäres Betriebssystem
schreiben. Es ist aber auch klar, daß es unter Umständen sinnvoll ist, von der Spezifikation abzuweichen, um
einen Spezialrechner herzustellen, der nur in einem bestimmten Umfeld besser skaliert und schneller
arbeitet als ein normaler SMP-Rechner. Beispielsweise könnte die PC/AT-Kompatibilität keine Rolle spielen, wenn
man einen robusten und schnellen Prozeßrechner bauen möchte, der mit einem eigenen Echtzeitbetriebssystem
arbeiten soll. Solche Rechner werden oft im Produktionsumfeld zur Steuerung komplexer Fertigungswerkzeuge
benutzt (Roboter, Werkzeugmaschinen).
2.2. Eigenschaften eines Intel SMP-Rechners
Rechner, die zur Intel-MP-Spezifikation kompatibel sein sollen, müssen folgende wichtige Anforderungen erfüllen:
- Ausführbarkeit von Standard-PC/AT-Binärdateien als auch von SMP-Binärdateien gewährleistet
- Unterstützung von SMP mit zwei oder mehr zur Intel-Befehlsmenge kompatibler
Prozessoren
-
Unterstützung für gleichberechtigte Interruptbehandlung von I/O-Anfragen mit Hilfe des APIC (Interrruptcontroller für
Intel SMP-Systeme)
- BIOS mit SMP-Unterstützung
- Benutzung von Standard-Bussystemen wie z.B. ISA, EISA, PCI
Die Intel MP-Spezifikation implementiert das in 1.2. vorgestellte Konzept eines
symmetrischen Multiprozessorsystems mit I/O- und Speichersymmetrie. Das folgende Bild gibt einen Überblick über die wesentlichen Hardwarekomponenten
eines solchen Systems:
Bild 2.2.
Wie man in dem Bild sieht, haben alle Prozessoren gleichberechtigt Zugriff auf den Speicherbus. Es existiert auch kein
spezieller I/O-Prozessor, über den alle I/O-Anfragen abgewickelt werden, was ein weiters wichtiges Merkmal von symmetrischen
Multiprozessorsystemen ist. Die Prozessoren können somit frei über den Speicherbus verfügen. Eine weitere wichtige
Komponente, die in Bild 2.2. zu erkennen ist, ist der ICC-Bus (Interrupt Controller Communications). Über ihn
kommunizieren die lokale und die entferente I/O-Controller-Einheit (I/O-APIC).
2.2.1. Prozessoren in Intel-SMP-Systemen
Die schon oft erwähnte Kompatibilität zu PC/AT-Hard- und Software wird unter anderem dadurch erreicht, indem
man Prozessoren der Intel 80x86-Architektur ab dem i80486 in SMP-Systemen einsetzt. Heutige (Stand 07/2000) SMP-Rechner
setzen üblicherweise Pentium Xeon-Prozessoren ein, die im Vergleich zu normalen Pentium III-Prozessoren
u.a. den Vorteil eines größeren und höher getakteten Caches haben. SMP-Systeme mit nicht-Intel 80x86-Prozessoren
(z.B. von AMD, Cyrix oder anderen) sind zwar theoretisch denkbar, jedoch mit den heutigen Boards nicht
möglich. Das liegt zum einen an unterschiedlichen Prozessorbussen (bei AMDs Athlon z.B.) und zum anderen an Einheiten innerhalb
der Prozessoren, die SMP erst ermöglichen, z.B. dem APIC. AMD wird aber in naher Zukunft
eigene SMP-Implementationen vorstellen. Dabei wird man sich wahrscheinlich an der Intel-Spezifikation orientieren,
da in diesem Bereich schon eine große Erfahrung besteht und sich Intel-SMP-Systeme bestens bewährt haben.
Obwohl die Prozessoren laut Definition funktionell identisch und von gleichem Status sind, gibt es beim Start-
und beim Halteprozess doch eine gewisse Einteilung, die aber nur kurz besteht. Dabei unterscheidet man
- Boot (BSP - Bootstrap Processor)- und
- Anwendungsprozessoren (AP - Application Processor).
Welcher der Prozessoren beim Start der Bootprozessor ist, wird entweder durch die Hardware oder durch das SMP-BIOS
bestimmt. Der BSP hat die Aufgabe, das System zu initialisieren und anschließend das Betriebssystem zu booten.
Erst nachdem das Betriebssystem gestartet ist und läuft, werden die APs aktiviert. Die Konsequenz davon
ist aber, daß auch ein nicht SMP-taugliches Betriebssystem auf einem SMP-Rechner gebootet werden kann, da sich zum
Bootprozess der Computer wie ein Einprozessor-System repräsentiert. Hier verwirklicht sich also eine Forderung der
Intel-Spezifikation, daß auch vorhandene Betriebssysteme ohne SMP-Unterstützung auf SMP-Computern laufen müssen.
2.2.2. Intels "Advanced Programmable Interrupt Controller" (APIC)
Die APICs gehören neben den Prozessoren zu den Kernbestandteilen eines Intel SMP-Systemes. Wie in jedem
PC/AT-kompatiblen System, müssen auch auf einem SMP-Rechner die Interrupt-Anfragen von irgendwelchen
Quellen von den Prozessoren beantwortet werden. Da aber kein spezieller I/O-Prozessor existiert, muss
eine solche Anfrage natürlich auf die vorhandenen Prozessoren verteilt werden. Unter anderem
dafür sind die
APICs zuständig. In Intel SMP-Systemen kommen zwei Kategorien von APICs vor:
- lokale APIC-Einheiten und
- I/O-APIC-Einheiten ("entfernt")
Die Wörter "lokal" und "entfernt" beziehen sich hierbei auf den Abstand vom Prozessor. Betrachtet man
nocheinmal Bild 2.2., so stellt man fest, daß jede CPU einen APIC-Bestandteil enthält (laut Spezifikation muss jede CPU zumindest einen ihr zugeordneten APIC haben), den man als lokalen
APIC bezeichnet. Bis auf wenige Ausnahmen (einige frühe Pentium-Prozessoren) weisen fast alle Prozessoren ab dem Intel Pentium
einen solchen APIC auf dem Chip auf. Weiter entfernt vom Prozessor befinden sich die I/O-APICs, die üblicherweise
in den Chipsatz des Rechners integriert sind. Diese beiden Einheiten kommunizieren über den schon erwähnten
Interrupt Controller Communications-Bus und teilen die anstehenden Controller-Funktionen
zwar untereinander auf, bilden aber zusammen eine Einheit. Die lokalen APICs haben neben den obenganannten
Funktionen noch die Aufgabe,
Interprozessor-Interrupts (IPIs) weiterzuleiten. IPIs erlauben es, das ein Prozessor einen Interrupt
an einen anderen sendet, was z.B. für Steuersignale von Nutzen sein kann. Es gibt verschiedene Typen von
IPIs, von denen einige bei Start- und Haltevorgängen eine Rolle spielen. Diese Zusammenhänge macht das folgende
Bild 2.3. nochmals deutlich:
Bild 2.3.
Wir sehen hier die im Abschnitt 2.2.1 erwähnte Unterteilung in Boot- und Anwendungsprozessor, wie sie
beim Systemstart herrscht. Weiterhin sind die in diesem Abschnitt besprochenen Komponenten APIC und ICC
sichtbar. Die Benutzung des ICC-Busses hat auch den Vorteil, eine gewisse Skalierbarkeit des Gesamtsystemes
zu sichern. Denn durch den ICC-Bus wird
- einerseits Aktivität vom Speicherbus genommen, der sonst die Interrupt-Anfragen weiterleiten
würde und somit mehr für die CPU-Benutzung zur Verfügung steht, und
- andererseits die Möglichkeit aufgetan, daß ein Prozessor seine Interruptabarbeitung mit anderen
Prozessoren teilt und somit eine gleichmäßige Lastverteilung herrscht.
2.2.3. Speicherbenutzung in SMP-Systemen
Systeme, die zur Intel-Spezifikation kompatibel sind, benutzen die PC/AT-Speicherarchitektur, d.h.
maximal sind 4 GB physischer Speicher möglich. Der Speicher kann von allen Prozessoren
benutzt werden, deswegen sind SMP-Systeme echte Shared-Memory-Architekturen (Gemeinsamer
Speicher). Das Speicher-Layout (memory map) sieht in einem
SMP-System natürlich etwas anders aus, da einige Komponenten (wie APICs) vorhanden sind, die
es in normalen PCs nicht gibt. Bild 2.4. gibt einen Überblick über das Layout:
Bild 2.4.
Im Vergleich zu einem Einprozessor-System sind an den Speicherbus eines SMP-Systemes wesentlich
höhere Anforderungen gestellt, da unter Umständen alle Prozessoren gleichzeitig Speicher-Transaktionen
durchführen können. Daraus resultiert zum einen, daß ein SMP-Speicherbus breiter als der eines PCs sein sollte.
Zum anderen ist es hier unvermeidlich, mit möglichst großen Caches zu arbeiten, da der Speicherbus
der Flaschenhals eines SMP-Systemes ist, was wir später noch sehen werden. Die Verwendung von Caches
wirft aber gleich ein schwerwiegendes Problem auf: Cache-Kohärenz. Angenommen CPU A liest mehrere
Male vom Hauptspeicher an einer bestimmten Stelle. Die CPU holt sich dabei die Daten in den Cache, so daß
weitere Leseanfragen aus dem Cache beantwortet werden. Ändert aber in der Zwischenzwit eine zweite CPU, sagen
wir CPU B, die Daten im Hauptspeicher, so sind Cache von CPU A und Hauptspeicher inkonsistent; es handelt
sich bei dem Cache-Inhalt um
veraltete Daten (Stale Data). In einer Multiprozessorumgebung mit einem Programm, das auf
mehreren Prozessoren verteilt arbeitet wobei die Prozessoren auf den selben Speicherstellen arbeiten, könnte das
zu ernsten Problemen führen, weshalb man sogenannte
Cache-Kohärenz-Protokolle implementieren muss, die dafür sorgen, daß bei Änderung von Daten die
CPUs eventuell informiert werden. Ein solches Protokoll ist das z.B. das bekannte MESI-Protokoll.
Glücklicherweise sind Cache-Kohärenz-Protokolle schon in den Intel-Prozessoren implementiert.
2.3. SMP-BIOS
Ein PC/AT-BIOS hat im wesentlichen folgende Aufgaben zu erfüllen:
- Test der Systemkomponenten (Grafik-Karte, Tastatur usw.)
- Aufbau der Konfigurationstabellen, die vom Betriebssystem genutzt werden können
- Initialisierung des Prozessors und der übrigen Komponenten
Zusätzlich zu diesen Aufgaben muss ein SMP-BIOS aber noch die folgenden Dinge erledigen:
- Informationen an das (SMP-)Betriebssystem liefern, die alle Prozessoren und zusätzliche SMP-Hardware
identifizieren (z.B. APICs)
- Initialisierung aller Multiprozessor-Komponenten
Minimal muss ein SMP-BIOS die Konfigurationstabelle bereitstellen. Komfortablere BIOS-Programme könnten
aber sogar eine Umkonfiguration der SMP-Konfigurationstabelle während des Betriebes durchführen, falls eine Systemkomponente
ausfällt. Hier ist den Entwicklern durch die Intel MP-Spezifikation eine gewisse "Freiheit" gelassen worden.
Wichtig bei der Erstellung eines SMP-BIOS ist aber, daß der BIOS-Code nur auf einem Prozessor ausgeführt wird.
Dazu müssen ggf. die APs deaktiviert werden. Generell kann man sagen, daß ein einfaches BIOS in einem höheren
Hardware-Aufwand, ein komplexeres BIOS aber in einem höheren Software-Aufwand resultiert. So könnte man z.B.
die Initialisierung verschiedener SMP-Komponenten (z.B. APICs, I/O-APICs) einer Hardware überlassen.
Vorige Seite
Inhalt
Nächste Seite
Copyright © 2000 by Ralph Schlosser, alle Rechte vorbehalten.
Datum der letzten Änderung: 13.07.2000