Server-Tuning durch manuelles Scheduling

Unerwünschte Nebeneffekte

Linux ab Kernel 2.6 nutzt einen intelligenteren Verteilungsalgorithmus. Es übergibt kurzzeitig alle Interrupts an einen Prozessor. Dann wählt es zufällig den zuständigen Prozessor für die nächste, relativ kurze Zeitspanne aus. Diese Aufteilung beseitigt zwar den Flaschenhals von langen Zuordnungszeiten, ist aber mit Aufwand verbunden und wählt nicht immer die beste CPU aus.

Obwohl frühere Untersuchungen zur Prozessoraffinität viel versprechend sind [11], kann das unkoordinierte Verteilen von Interrupts auf verschiedene Prozessoren zu negativen Effekten führen [1]. Die Interrupt-Routinen landen wahllos auf den verschiedenen Prozessoren, was zu einem Wettstreit um gemeinsame Ressourcen führt. Zudem wird der Cache-Inhalt - wie etwa der TCP-Kontext - nicht optimal genutzt, wenn jedes neue Netzwerkpaket auf einem anderen Prozessor landet.

Im Folgenden werden die Auswirkungen untersucht, die sich ergeben, wenn eine Anwendung die Prozessoraffinität selbst bestimmt. Man geht davon aus, dass die Anwendung die Charakteristika der eigenen Last bestens kennt. Deshalb kann sie die Verteilung auf einzelne Prozessoren vorteilhafter erledigen als der Scheduler des Betriebssystems.

Die manuelle Zuordnung einzelner Prozesse an einen Prozessor ist dabei relativ einfach. Standard-APIs unter Linux und Windows erlauben es, Anwendungen, Prozesse, Threads und auch Interrupts fest an einzelne CPUs zu binden [8,9]. Die umfangreichen Ergebnisse der Untersuchung zeigen die charakteristischen Vorteile dieses Verfahrens [4]. Details zur Durchführung und eine Zusammenfassung der Ergebnisse finden Sie auf den folgenden Seiten.