Windows: die Probleme mit Hyperthreading und Bulldozer

Wer eine Intel-CPU mit Hyperthreading einsetzt, sollte schleunigst auf Windows 7 upgraden, denn ältere Versionen des Microsoft-Betriebssystems bis einschließlich Vista können mit Hyperthreading gar nicht richtig umgehen. Wer eine brandneue Bulldozer-CPU von AMD hat, kann sich ganz sicher sein: Es gibt überhaupt keine Windows-Version, die diese CPUs richtig bedient.

Für Bulldozer-CPU gibt es jetzt immerhin einen Patch. Der ist aber so experimentell, dass man beim Support von Microsoft nachfragen muss, um ihn zu bekommen.

Das Problem ist, dass Windows bis einschließlich Vista alle logischen CPUs, die dem Betriebssystem vorgegaukelt werden, gleich behandelt, was nicht immer richtig ist. Angenommen eine Single-Threaded-App lastet eine logische CPU komplett aus. Startet man eine zweite Single-Threaded-App teilt Vista dieser eine zweite logische CPU zu.

Läuft die erste App auf CPU 0 und die zweite auf CPU 1, dann hat die Hyperthreading-Falle zugeschlagen. Bei einem Prozessor mit Hyperthreading sind die logischen CPU 0 und 1 nämlich auf demselben Core. Das Betriebssystem müsste die beiden Apps auf die logischen CPUs 0 und 2 legen, damit sie auf getrennten Cores und damit schneller laufen.

Das hat Microsoft mit Windows 7 dann auch verstanden und das Scheduling entsprechend angepasst. Bei Bulldozer-CPUs ist aber wieder alles anders: Laufen zwei Threads auf den CPUs 0 und 2, dann werden zwei Bulldozer-Module benutzt, die keinen gemeinsamen Level-2-Cache besitzen. Liefen sie auf den logischen CPUs 0 und 1, könnten sie schneller auf den gemeinsamen L2-Cache zugreifen. Außerdem kann im Turbo-Modus höher getaktet werden, da nur ein Bulldozer-Modul beansprucht wird.

Allerdings gilt das nur, wenn keine Floating-Point-Befehle im Code enthalten sind. Bei Bulldozer-CPUs teilen sich die beiden Integer-Cores eines Bulldozer-Moduls eine gemeinsame FPU. Bei Anwendungen mit vielen Floating-Point-Befehlen sollten lieber getrennte Bulldozer-Module genutzt werden, etwa die logischen CPUs 0 und 2.

Insofern dürfte der jetzt verfügbare Patch nur bedingt helfen, denn der Kernel weiß ja gar nicht, ob und wie viele Floating-Point-Befehle im Code enthalten sind. Dieses Problem kann Microsoft auf die Schnelle nicht lösen. Denkbar wäre, dass Entwickler Threads künftig kennzeichnen können, ob sie viele Floating-Point-Operationen ausführen oder nicht. Diese Information könnte der Scheduler nutzen.

Im Endeffekt kann man kann es aber drehen und wenden wie man will: Dass die Art der verwendeten Befehle einer Anwendung Einfluss darauf hat, wie man Prozesse und Threads am besten auf die logischen CPUs verteilt, ist keine wirklich gute Situation. Vielleicht hat ja AMD ein Einsehen und spendiert in Zukunft wieder jedem Kern eine FPU.

ZDNet.de Redaktion

Recent Posts

Gefahren im Foxit PDF-Reader

Check Point warnt vor offener Schwachstelle, die derzeit von Hackern für Phishing ausgenutzt wird.

2 Tagen ago

Bitdefender entdeckt Sicherheitslücken in Überwachungskameras

Video-Babyphones sind ebenfalls betroffen. Cyberkriminelle nehmen vermehrt IoT-Hardware ins Visier.

2 Tagen ago

Top-Malware in Deutschland: CloudEye zurück an der Spitze

Der Downloader hat hierzulande im April einen Anteil von 18,58 Prozent. Im Bereich Ransomware ist…

2 Tagen ago

Podcast: „Die Zero Trust-Architektur ist gekommen, um zu bleiben“

Unternehmen greifen von überall aus auf die Cloud und Applikationen zu. Dementsprechend reicht das Burg-Prinzip…

3 Tagen ago

Google schließt weitere Zero-Day-Lücke in Chrome

Hacker nutzen eine jetzt gepatchte Schwachstelle im Google-Browser bereits aktiv aus. Die neue Chrome-Version stopft…

3 Tagen ago

Hacker greifen Zero-Day-Lücke in Windows mit Banking-Trojaner QakBot an

Microsoft bietet seit Anfang der Woche einen Patch für die Lücke. Kaspersky-Forscher gehen davon aus,…

3 Tagen ago