Symmetrisches Multiprocessing (SMP) und asymmetrisches Multiprocessing (AMP)

Einführung

Bei Multicore-Prozessoren gibt es verschiedene Techniken, die zur Verbesserung der Gesamtsystemleistung eingesetzt werden können. Es gibt zwei Haupttypen von Multiprocessing: Symmetrisches Multiprocessing (SMP) und asymmetrisches Multiprocessing (AMP).

Bei SMP werden alle Prozessoren oder CPU-Kerne als gleichwertig betrachtet und teilen sich dieselben Systemressourcen wie das Betriebssystem, den Adressraum des Hauptspeichers und die Ein-/Ausgabe (E/A) oder Peripheriegeräte. Bei AMP hingegen hat jeder Prozessor oder CPU-Kern seine eigene Software und verarbeitet Anwendungen unabhängig von den anderen Prozessoren oder Kernen.

Typischerweise wird SMP verwendet, wenn Anwendungen mehr CPU-Leistung zur Bewältigung ihrer Arbeitslast benötigen, da SMP-Systeme Aufgaben parallel ausführen können, was die Gesamtverarbeitungszeit verkürzen und den Systemdurchsatz erhöhen kann. AMP hingegen bietet Einfachheit in Design und Implementierung und kann die Gesamtsystemleistung und -effizienz verbessern.

Verwendung von SMP

Symmetrisches Multiprocessing wird in der Regel im High-End-Computing eingesetzt. Diese Computerumgebungen erfordern große Mengen an Rechenleistung, um Anwendungsaufgaben und -prozesse durchzuführen. Die meisten Multiprozessorsysteme verwenden die SMP-Architektur. SMP ist besonders nützlich für Timesharing- und Multithreading-Timesharing-Systeme. Timesharing ist die Verteilung von Rechenressourcen an mehrere Benutzer gleichzeitig. In ähnlicher Weise ist Multithreading eine Funktion der Zentraleinheit (CPU), die es einem einzelnen Prozess ermöglicht, mehrere Aufgaben gleichzeitig auszuführen. Genauer gesagt, ermöglicht Multithreading die unabhängige Ausführung mehrerer Threads von Anweisungen, die sich alle dieselben Verarbeitungsressourcen teilen. Timesharing-Betriebssysteme verwenden ebenfalls SMP. Der Grund dafür ist, dass Rechenressourcen unter mehreren Benutzern aufgeteilt werden können und mehrere Prozesse parallel laufen können. Dieser Prozess wird durch SMP unterstützt, das so konzipiert ist, dass mehrere Prozesse auf verschiedenen Verarbeitungseinheiten ausgeführt werden können. Aus demselben Grund ist SMP multithreadingfähig. Der Grund dafür ist, dass Multithreading mehrere Prozesse gleichzeitig abwickelt, während SMP die Threads auf die einzelnen Prozessoren aufteilt. SMP wird jedoch im Allgemeinen nicht auf PCs oder Anwendungen verwendet, die nicht für die Multithreading-Programmierung angepasst wurden. Anwendungen und Programme sollten so konzipiert sein, dass sie Multithreading ermöglichen. Dadurch können Threads auf verschiedenen parallelen Prozessoren geplant werden.

Gemeinsame Nutzung von Speicherplatz und E/A durch mehrere CPUs mit SMP

Symmetrisches Multiprocessing in Einzel-Betriebssystemen - Linux nutzt mehrere CPU-Kerne

Meistens läuft auf einem Computersystem ein einziges Betriebssystem wie Linux. Bei SMP kann das Betriebssystem die Vorteile mehrerer Prozessoren oder CPU-Kerne nutzen, um die verschiedenen Anwendungen des Systems auszuführen.

Symmetrisches Multiprocessing in Hypervisor-Lösungen - Echtzeit-Linux nutzt mehrere CPU-Kerne

Der Einsatz mehrerer Betriebssysteme auf einem einzigen Computersystem wird immer häufiger, insbesondere bei industriellen Anwendungen. In einer Hypervisor-Lösung, die SMP nutzt, können mehrere verschiedene Betriebssysteme (z. B. Windows + Echtzeit-Linux) jeweils eine Gruppe von mehreren Prozessoren oder CPU-Kernen unabhängig voneinander nutzen.

AMP verwenden

Herkömmliche Einzelprozessorsysteme bieten eine Ausführungsumgebung, die der Funktionsweise des asymmetrischen Multiprocessing sehr ähnlich ist. Es bietet eine relativ einfache Möglichkeit zur Portierung von Legacy-Code und einen direkten Mechanismus zur Kontrolle der CPU-Nutzung. In den meisten Fällen können Sie mit Standard-Debugging-Tools und -Techniken arbeiten. AMP-Systeme können entweder homogen sein (auf jeder CPU läuft der gleiche Typ und die gleiche Version des Betriebssystems) oder heterogen (auf jeder CPU läuft ein anderes Betriebssystem oder eine andere Version des gleichen Betriebssystems). Darüber hinaus wird AMP am ehesten dann eingesetzt, wenn unterschiedliche CPU-Architekturen für bestimmte Aktivitäten optimal sind - wie z. B. ein digitaler Signalprozessor (DSP) und ein Mikrocontroller (MCU). In einem AMP-System besteht die Möglichkeit, auf jedem Prozessor oder CPU-Kern ein anderes Betriebssystem einzusetzen.

Wenn Ihr Betriebssystem ein bestimmtes verteiltes Programmiermodell unterstützt, können Sie die Vorteile mehrerer CPUs in einer homogenen Umgebung voll ausschöpfen. Anwendungen, die auf einer bestimmten CPU laufen, können transparent mit Anwendungen und Systemdiensten (z. B. Protokollstapel, Gerätetreiber usw.) auf anderen CPUs kommunizieren, ohne die hohe CPU-Belastung, die durch die herkömmliche Interprozessorkommunikation entsteht. In heterogenen Systemen müssen Sie sich entweder für zwei Betriebssysteme entscheiden, die eine gemeinsame Infrastruktur nutzen (meist IP-basiert), oder ein proprietäres Kommunikationsschema für die Interprozessorkommunikation implementieren. Die Betriebssysteme sollten auch Mechanismen für den Zugriff auf gemeinsam genutzte Hardwarekomponenten bereitstellen, um Ressourcenkonflikte zu vermeiden. Bei AMP müssen die von den Anwendungen gemeinsam genutzten Hardwareressourcen auf die CPUs aufgeteilt werden. Ressourcen wie Peripheriegeräte, physischer Speicher und Interrupt-Verarbeitung werden in der Regel während des Bootvorgangs statisch zugewiesen. Eine dynamische Zuweisung der Ressourcen würde zu einer komplexen Koordination zwischen den CPUs führen. In einem AMP-System läuft ein Prozess immer auf derselben CPU, selbst wenn andere CPUs im Leerlauf sind. Dies kann dazu führen, dass die CPU unterversorgt oder überlastet wird. Um dieses Problem zu beheben, können Systeme es Anwendungen ermöglichen, dynamisch von einer CPU zur anderen zu wechseln. Dies kann jedoch eine komplexe Überprüfung von Zustandsinformationen erfordern, die den Dienst unterbrechen kann, wenn eine Anwendung auf einer CPU angehalten und auf einer anderen neu gestartet wird. Auch wenn auf den CPUs unterschiedliche Betriebssysteme laufen, wäre eine solche Migration schwierig, wenn nicht gar unmöglich.

Partitionierung von Speicher und E/A auf verschiedenen CPUs mit AMP

Asymmetrisches Multiprocessing in Hypervisor-Lösungen - Mehrere Linux-Instanzen

In einer Hypervisor-Lösung, auf der mehrere Linux-Betriebssysteme laufen, kann der Hypervisor die Hardware so partitionieren, dass jede Instanz des Linux-Betriebssystems einem bestimmten CPU-Kern mit bestimmten Ressourcen zugewiesen wird.

Asymmetrisches Multiprocessing in Hypervisor-Lösungen - Mehrere Echtzeit Linux-Instanzen

In einer Echtzeit-Hypervisor-Lösung mit mehreren Echtzeit-Linux-Betriebssystemen muss der Hypervisor die Hardware partitionieren und sicherstellen, dass jede Instanz von Echtzeit-Linux ein bestimmter CPU-Kern und bestimmte Ressourcen zugewiesen werden.