10 Kerne, 20 Threads, 30 MByte Cache und Turbo

Intel Xeon E7-4870 im Test - Neue Generation mit Leistungssprung

Anwendungen mit /node /affinity starten

Über die "Processor Affinity" lässt sich unter Windows genau festlegen, auf welchen logischen Prozessoren eine Anwendung laufen soll. Die Maskierung von CPUs erfolgt nach einem einfachen binären Muster. Ein Xeon E7-4870 mit seinen 20 logischen Prozessoren wird über 20 binäre "1" maskiert:

(end) 11111 11111 11111 11111 (begin)

Soll ein Thread also beispielsweise dediziert auf den ersten fünf logischen CPUs des Xeon E7 arbeiten, erfolgt die Maskierung über den Binär-Code:

(end) 00000 00000 00000 11111 (begin)

In Hex-Code umgerechnet ergibt das 1F, für die Zuordnung aller 20 logischen Prozessoren des Xeon E7-4870 wäre FFFFF notwendig. Auf der Kommandozeile lässt sich eine Anwendung mit Prozessoraffinität wie folgt starten:

start /affinity 1F anwendung.exe

Bei der Affinity-Zuweisung ist allerdings wieder bei FFFF FFFF FFFF FFFF wieder Schluss - mehr als diese 64 CPUs lässt die Prozessormaskierung unter Windows nicht zu. Die 80 logischen CPUs bei vier Xeon E7-4870 wären demnach mit FFFFF FFFFF FFFFF FFFFF zu adressieren. Diese Affinity-Zuweisung endet allerdings in einer Fehlermeldung, weil die Maskierung wieder die maximal mögliche Anzahl von 64 in einer Gruppe überschreitet.

Mit Windows Server 2008 R2 gibt es mit dem Service Pack 1 allerdings eine weitere Maskiermöglichkeit über die Nodes im System. Im Beispiel unseres 4-Sockel-Systems mit vier Xeon E7-4870 sieht das Betriebssystem die vier Knotenpunkte Node 0, Node 1, Node 2 und Node 3. Soll beispielsweise eine Anwendung dediziert auf allen 20 logischen Prozessoren des vierten Xeons (Node 3) laufen, so erfolgt dies über den Befehl:

start /node 3 /affinity f0000 anwendung.exe

Durch die Node-Affinität lässt sich auch in Systemen mit mehr als 64 logischen CPUs die Prozessoraffinität anwenden. Aber auch hier gilt: ein Thread kann nicht auf mehreren Nodes mit über 64 logischen Prozessoren laufen.

Arbeiten auf einem Server beispielsweise mehrere CPU-intensive Anwendungen parallel, so ordnet das Thread-Managment von Windows den Threads oft alternierend verschiedene logische CPUs zu. Der dabei entstehende Overhead kostet jedoch Performance. Arbeiten die Anwendungen mit Prozessoraffinität und somit immer auf dedizierten Kernen, so lässt sich die Rechenleistung bei ausgelastetem System um zirka fünf bis 10 Prozent erhöhen.