Herunterladen Inhalt Inhalt Diese Seite drucken

System Halted; Performance - Siemens Rmos3 Bedienungsanleitung

Echtzeit-betriebssystem rmos3 rmos3 v3.50 benutzerhandbuch
Inhaltsverzeichnis
Betriebssystem-Eigenschaften von RMOS3
8.2 Multiprocessing unter RMOS3
8.2.11

SYSTEM HALTED

Ausgehen der SMRs bzw. SRBs
Wenn auf einem Prozessorkern die SMRs bzw. SRBs ausgehen, werden alle
Prozessorkerne angehalten.
8.2.12

Performance

Geschwindigkeitsgewinn
Das Vorhandensein von zwei Prozessorkernen bedeutet auch bei einer Multithreaded-
Applikation nicht unbedingt, dass die Anwendung mit doppelter Geschwindigkeit läuft. Ein
1967 von Gene Amdahl aufgestelltes Gesetz beschreibt, wie der Performancegewinn einer
Anwendung bei Verwendung mehrerer Prozessoren durch Threads eingeschränkt ist, die
nicht parallelisiert werden können. Laut Amdahl steigt die Geschwindigkeit einer
Multithreaded-Anwendung nie linear mit der Anzahl der Prozessoren. Weitere Performance-
Einbußen entstehen durch beschränkte Systemressourcen, wie der zur Verfügung
stehenden Bandbreite des bei SMP-Systemen gemeinsam benutzten Arbeitsspeichers.
Programme, bei denen der Aufwand für die Synchronisierung von Threads und Daten höher
ist als der Zeitgewinn durch parallele Abarbeitung, sind für Multithreading nicht geeignet. Sie
würden in jedem Fall langsamer ablaufen als eine Singlethreaded-Variante - selbst bei
mehreren Prozessoren. Besonders einfach und effektiv ist Multithreading hingegen, wenn
sich große Datenmengen in unabhängige Segmente aufteilen lassen.
Singlethreaded-Anwendungen sind in einem Multiprozessorsystem nicht schneller als in
einem Singleprozessorsystem, da die Prozessoren in ständiger Kommunikation stehen und
beispielsweise laufend ihre Cache-Inhalte abgleichen. Dieser Overhead für die
Synchronisierung bremst die jeweilige Anwendung.
Cache-Line
Die Performance wird erheblich verringert, wenn mehrere Prozessoren auf die gleiche
Cache-Line (z. B. 64 Byte) zugreifen. Dabei spielt es keine Rolle, ob gelesen oder
geschrieben wird. Eigentlich wäre zu erwarten, dass der Performanceverlust nur auftritt,
wenn in die Cache-Line geschrieben wird, weil durch den Schreibvorgang vom ersten
Prozessorkern ständig der Cache des zweiten Prozessorkerns aktualisiert werden muss.
Diese Erkenntnis zeigt, dass einzelne Variablen mindestens 64 Byte auseinander liegen
sollten. Ebenso sollten alle Variablen 16 Byte aligned sein.
Beispiel:
struct _NowRead
{
volatile char dummy0[64]; /* optimize data fetch */
volatile uint cpu0;
volatile char dummy1[62]; /* optimize data fetch */
volatile uint cpu1;
volatile char dummy2[62]; /* optimize data fetch */
};
typedef struct _NowRead NowRead;
90
RMOS3 V3.50 Benutzerhandbuch
Bedienhandbuch, 07/2012, A5E03692290-01
Inhaltsverzeichnis
loading

Inhaltsverzeichnis