Performance: Die Basis im System

Der zweite Teil der Serie geht auf eine Reihe weiterer Veränderungen beim Windows Server 2003 ein, mit denen die Performance des Gesamtsystems erhöht wird. Dazu zählt beispielsweise der Support für NUMA (Non-Uniform Memory Architecture).

Im ersten Teil der Serie wurden vor allem Änderungen auf Kernel-Ebene behandelt. Neben NUMA werden in diesem Teil Themen wie die Änderungen bei den Funktionen für die Ein- und Ausgabe auf Festplatte und im Netzwerk und Optimierungen bei verschiedenen Diensten und Anwendungen besprochen. Außerdem werden auch die optimierten Funktionen für die Performance-Analyse näher betrachtet.

NUMA

NUMA steht für Non-Uniform Memory Access. Dabei handelt es sich um Systeme, bei denen technisch gesehen auf einer physischen Maschine mehrere Knoten vorhanden sind, die jeweils getrennt auf Speicher zugreifen. Jeder Knoten, meist aus vier Prozessoren bestehend, verfügt über eigenen Speicher. Er kann aber auch Speicher anderer Knoten nutzen, wozu er allerdings die Verbindung zwischen den verschiedenen Knoten verwenden muss, was wesentlich aufwendiger ist als der Zugriff auf den lokalen Speicher. Die Herausforderung bei NUMA-Systemen ist daher, den Zugriff auf den Speicher und andere Ressourcen so zu optimieren, dass möglichst mit lokalen Ressourcen gearbeitet werden kann.

Die Unterstützung des Windows Server 2003 für NUMA-Architekturen wurde ebenso verbessert wie die meisten anderen Funktionen für eine höhere Skalierbarkeit. Der Scheduling-Mechanismus des Systems sorgt zunächst dafür, dass neue Prozesse beim Start möglichst gleichmäßig auf die verschiedenen Knoten verteilt werden. Neue Threads eines Prozesses erben dann die Knotenzuordnung des Prozesses, sodass nach Möglichkeit alle Threads im gleichen Knoten ausgeführt werden und damit lokale Ressourcen des Knotens nutzen.

Entsprechend versucht auch der Memory Manager des Betriebssystems, die Speicherressourcen optimiert zuzuweisen. Soweit möglich wird physischer Speicher immer aus dem gleichen Knoten zugeordnet.

Zusätzlich gibt es noch die NUMA APIs. Über diese Schnittstellen können beispielsweise die Knotenzuordnungen von Prozessen und Threads sowie das Cache-Management der Anwendungen in Abhängigkeit von den Knoten eines NUMA-Servers beeinflusst werden.

Die Speichersubsysteme

Auch wenn die Performance-Optimierungen beim Windows Server 2003 ihre Ursache vor allem in Änderungen beim Kernel haben, findet man doch auch noch einige andere Bereiche im System mit Optimierungspotenzial. Einer dieser Bereiche ist die Ein- und Ausgabe zu Speichersubsystemen – und hier natürlich primär Festplatten. Schon durch die wesentlich langsamere Schreib- und Lesegeschwindigkeit im Vergleich zum Hauptspeicher kann hier ein Engpass entstehen.

Andererseits wirken sich die Optimierungen im Kernel auch auf die Performance beim Schreiben und Lesen von Datenträgern aus, weil die entsprechenden Komponenten selbst effizienter arbeiten können. Es gibt aber auch spezifische Anpassungen.

Eine davon ist der so genannte Storport Driver. Dieser Treiber ist eine Alternative zum mit Windows 2000 eingeführten SCSI Port Driver. Er ist deutlich schneller und hat einen höheren Durchsatz vor allem beim Einsatz mit hoch performanten Speichersystemen, wie zum Beispiel optimierten RAID-Adaptern und Fibre Channel-Lösungen. Das hat mehrere Gründe:

  • Der Storport-Treiber arbeitet nur mit einer Warteschlange. Dagegen verwendet der SCSI-Treiber zwei Warteschlangen. Eine arbeitet auf der Ebene des logischen Geräts, die andere auf der Ebene des Adapters, über den die Kommunikation erfolgt. Jeder Ein- und Ausgabevorgang muss also zweimal in die Warteschlange, was die Performance reduziert. Außerdem gibt es in beiden Fällen Mechanismen, mit denen Konflikte durch Sperren adressiert werden, sodass das Risiko größer ist, beim Zugriff wegen einer solchen Sperre warten zu müssen. Der Storport-Treiber arbeitet mit nur einer Warteschlange auf der Ebene der logischen Geräte.

  • Da der Storport-Treiber 255 ausstehende Anforderungen pro logisches Gerät und nicht nur, wie der SCSI-Treiber, pro Adapter unterstützt, können kurzzeitig hohe Anforderungen besser bewältigt werden. Da es in der Regel mehrere logische Geräte pro Warteschlange gibt, können beim SCSI-Treiber typischerweise weniger Anforderungen verarbeitet werden.

  • Der Storport-Treiber arbeitet im Full-Duplex-Modus und kann Ein- und Ausgabe zum gleichen Zeitpunkt verarbeiten, während der SCSI-Treiber ein Spinlock nutzt, wenn Daten an den darunter liegenden Miniport-Treiber übergeben werden. Da ein solcher Locking-Mechanismus auch zwischen dem Miniport-Treiber und der Hardware greift, kann der SCSI-Treiber entweder nur einoder nur ausgehende Anforderungen zu einem Zeitpunkt bearbeiten. Der Storport-Treiber umgeht das, indem er keine IRQ-Levels anheben muss und damit keine Spinlocks benötigt.

  • Generell wurde das Locking-Verhalten des neuen Treibers auch in anderen Bereichen optimiert, um mit granularen, kurzen Locks effizienter arbeiten zu können.

In der Summe führen die Änderungen nach Aussagen von Microsoft zu einer wesentlich verbesserten Performance. Die Steigerungen bewegen sich bei 2-Prozessor-Systemen im Bereich von 100%.