Server-Tuning durch manuelles Scheduling

Prozessverteilung unter SMP

Der TCP-Overhead bei der datenkommunikation ist gut untersucht [2, 3], den Overhead durch das Scheduling und die Interrupt-Verwaltung übersah man jedoch meist. Obwohl dabei nur wenige CPU-Takte benötigt werden, haben aber beide speziell bei Mehrprozessorsystemen einen entscheidenden Einfluss auf die Effektivität des Cache-Systems.

Der Scheduler von typischen SMP-Betriebssystemen versucht, die Last gleichmäßig auf die CPUs zu verteilen. Dazu verschiebt er Prozesse von stark ausgelasteten Prozessoren auf weniger beschäftigte. Allerdings zollt man jedes Mal Tribut, wenn das planmäßige Scheduling oder ein externer Interrupt einen Prozess auf eine andere CPU verschiebt. Der Prozess muss dann auf der neuen CPU zunächst die prozessorinternen Caches mit seinen Daten füllen, bevor er mit voller Geschwindigkeit arbeiten kann.

Speziell die Hardware-Interrupts sind dabei problematisch, da die Betriebssysteme sie nicht gleichmäßig über die Prozessoren verteilen können. Der I/O Advanced Programmable Interrupt Controller (APIC) auf dem Mainboard ist verantwortlich dafür, die Interrupts der verschiedenen Hardware-Komponenten an die prozessorinternen APICs weiterzuleiten. Je nach Konfiguration verteilt der externe APIC die Interrupts gemäß seiner Programmierung in der I/O APIC Redirection Table. Alternativ wählt er die CPU für die Verarbeitung des Interrupts, die geraden den Prozess mit der niedrigsten Priorität bearbeitet.

Sowohl Windows NT als auch Linux nutzen in der SMP-Standardkonfiguration die zweite Möglichkeit. Da der Kernel die Prioritätslisten aber nur sporadisch aktualisiert, landen alle Interrupts für längere Zeit auf einer einzigen CPU. Dieser Prozessor erreicht bei hohem Datendurchsatz der Netzwerkkarten einen Sättigungszustand, wodurch das ganze System gebremst wird.