# Symmetrisches Multiprozessorsystem

Ein symmetrisches Multiprozessorsystem (SMP) ist in der Informationstechnologie eine Multiprozessor-Architektur, bei der zwei oder mehr identische Prozessoren einen gemeinsamen Adressraum besitzen. Dies bedeutet, dass jeder Prozessor mit derselben (physischen) Adresse dieselbe Speicherzelle oder dasselbe Peripherie-Register adressiert. Die meisten Mehrprozessorsysteme heute sind SMP-Architekturen.
Eine SMP-Architektur erlaubt es, die laufenden Prozesse dynamisch auf alle verfügbaren Prozessoren zu verteilen – dagegen muss beim asymmetrischen Multiprocessing jeder CPU eine Aufgabe fest zugewiesen werden (z. B. führt CPU0 Betriebssystemaufrufe und CPU1 Benutzerprozesse aus), da nicht alle Aufgaben auf jedem Prozessor durchgeführt werden können. Es gibt aber auch Anwendungsdomänen (z. B. Regelungstechnik mit harten Echtzeitanforderungen), bei denen eine statische Zuordnung der Prozesse auch auf einer SMP-Architektur vorteilhafter ist.
Werden keine Aufteilungen der Hardware in Partitionen oder CPU-Sets genutzt, wird ein SMP-System auch als Single System Image (SSI) bezeichnet – nur ein Betriebssystemkern steuert die gesamte Maschine.

## Details

Die ersten SMP Systeme wurden Ende der 1970er Jahre mit der Z80 von Zilog entwickelt. Symmetrisches Multiprocessing ist seit Ende der 1980er Jahre die Standard-Architektur für Multiprozessor-Maschinen mit bis zu 16 CPUs. Die Forderung, dass jede CPU jeden Prozess ausführen können muss, führt jedoch bei größeren Systemen dazu, dass der Speicherbus zum Flaschenhals wird. Mit jeder zusätzlichen CPU sinkt der relative Leistungsgewinn, da die Speichersubsysteme die Daten nicht mehr schnell genug liefern können, um alle vorhandenen CPUs auszulasten.
Ein weiteres Problem bei SMP ist das CPU Hopping, bei dem Prozesse ständig zwischen den einzelnen CPUs wechseln. Normalerweise wäre dies kein Problem, aber da in SMP-Systemen häufig CPUs mit sehr großen und mehrfach gestaffelten Caches zum Einsatz kommen, um die bereits geschilderte Auslastung des Speichersystems zu vermindern, führt der schnelle Wechsel der laufenden Prozesse zusätzlich zu einer Leistungsverminderung durch sogenanntes Cache Thrashing. Darunter versteht man den ständigen Wechsel der Cache-Inhalte durch unterschiedliche Prozesse, welche in der Regel auf unterschiedliche Datenbereiche zugreifen. Man kann dem Effekt jedoch durch Zuweisen einer höheren Affinität der Prozesse zu der jeweils ausführenden CPU entgegenwirken.
Bei Weiterentwicklungen wie zum Beispiel der NUMA (Non-Uniform Memory Architecture) werden diese Probleme vermindert.
Prinzipiell eignen sich alle modernen CPU-Architekturen mehr oder weniger gut für den Einsatz in SMP-Systemen. Unterschiede gibt es allein in der benötigten Zusatzhardware und der zu erwartenden Leistungssteigerung pro CPU. Während mit einigen CPU-Varianten bereits relativ einfach 2- oder 4-fach-Systeme gebaut werden können, da im CPU-Bus bereits Teile der benötigten Funktionalität implementiert sind (z. B. alle Intel-Systeme mit GTL+ Bus), sind bei anderen Systemen relativ aufwändige Punkt-zu-Punkt-Verbindungen notwendig (AMD K7 und DEC/Compaq/HP Alpha mit EV6-Bus). Zurzeit gehen die Hersteller aus Gründen der Leistungsfähigkeit dazu über, auch die benötigten Speichercontroller in die CPU zu integrieren. Dadurch ist es wiederum sinnvoll, auf dem Chip mehrere CPU-Kerne zu integrieren, da ein einziger Kern die zur Verfügung stehende Datenrate des Speichersystems nicht immer auslasten kann. Solche Mehrkernprozessoren sollten nicht mit Hyper-Threading-fähigen Prozessoren verwechselt werden, da es sich hierbei um komplett eigenständige Kerne mit zugehöriger Infrastruktur (L1/L2-Caches, FPU etc.) handelt.