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%.
Netzwerk-I/O
Im Bereich der Ein- und Ausgabe auf das Netzwerk stellen die Optimierungen beim Windows Server 2003 letztlich nur einen Zwischenschritt dar, da beim Windows Server Longhorn und bei Windows Vista ja ein völlig neuer TCP/IP-Stack zum Einsatz kommt. Dennoch gibt es einige wichtige Änderungen:
-
Mit der Unterstützung für automatisches Tuning von Netzwerkadaptern wird es möglich, dass diese, beispielsweise auf Basis des Netzwerkverkehrs und der Prozessorauslastung, ihr Verhalten optimieren können.
-
Die Größe der Empfangsfenster bei TCP wird automatisch an die ermittelte Netzwerkbandbreite angepasst.
-
Außerdem wurde die Unterstützung für das TCP-Offloading verbessert, sodass mehr Funktionen von einem Adapter übernommen werden können.
Auch hier wurden wieder deutliche Verbesserungen erzielt, die auch im Zusammenhang stehen mit weiteren Anpassungen bei Diensten. Für bestimmte Einsatzsituationen ist die Anzahl der gleichzeitig unterstützten Verbindungen, die theoretisch nun den Wert von einer Million erreichen können, wichtig – das gilt beispielsweise für Online Gaming- und Chat-Server. Im Regelbetrieb liegen die Verbesserungen aber unter 20%.
Optimierungen bei Diensten
Bei den Windows Media Services lassen sich Leistungssteigerungen bis zum Faktor 5 feststellen, wenn mit Streaming Media gearbeitet wird. Auch diese sind, ebenso wie die Performance-Steigerungen um über 100% bei DNS und FTP, nur zum Teil auf die Optimierung des Netzwerk-I/O zurückzuführen.
Ansonsten gibt es die größten Änderungen in der Dienst-Performance der IIS, was an der in Expert’s inside Windows NT/2000 bereits hinlänglich beschriebenen geänderten Architektur liegt. Hier sind je nach Prozessorzahl Leistungssteigerungen von mindestens 80% zu verzeichnen. Systeme mit einer größeren Zahl von Prozessoren profitieren von den zusätzlichen Kernel-Optimierungen überproportional, sodass Microsoft für 8-Prozessor-Systeme Leistungssteigerungen um bis zu 500% bei standardisierten Benchmarks angibt.
Aber auch in anderen Bereichen gibt es Optimierungen. Beim Dateisystem wird durch verbesserte Behandlung von Handles (Verweisen) auf Dateien und der Meta-Daten sowohl die Anzahl der Kommunikationsschritte zwischen Client und Server als auch die Menge der übertragenen Daten reduziert.
Die Komponente, die den Cache aufräumt, kann nun in definierten Intervallen arbeiten. Bei Mehrprozessor-Systemen macht sich vor allem die Zuordnung von Threads zu Prozessoren und der seltenere Prozessorwechsel bemerkbar – also wieder einmal eine Kernel-Optimierung, die sich auch auf einen Dienst auswirkt. Und bei Dateien, die an unterschiedliche Clients geliefert werden müssen, wird auf die gleichen Informationen zugegriffen, statt die Datei intern zu kopieren.
Deutlich wird aber auch hier, dass es letztlich das Zusammenspiel einer Vielzahl von Faktoren ist, das zu einer besseren Performance führt. Insgesamt scheint das beim Windows Server 2003 gut gelungen zu sein.