Ich habe mich noch einmal mit dem Energiemanagment von Windows auseinandergesetzt und scheine nun verstanden zu haben warum Haswell-E so Probleme bereitet.
Bisher war ich davon ausgegagen, dass der "minimale Leistungszustand" als Schwellwert funktioniet, welcher das Hochtakten auslöst. Es ist jedoch so, dass dieser Wert tastächlich als unterster Wert funktioniert. Der ideale Wert wäre daher 0%, sodass der Prozessor sich zwischen Vollleistung (100%) und maximalem Stromsparen (0%) bewegen kann. Theoretisch ist es daher sinnfrei einen Wert einzutragen der höher ist. Ich bin mit Cinebench und mit HWinfo einmal alle interessanten Stufen durgegangen und habe mir angesehen wie der Prozessor reagiert. Vielleicht wird das mit der Tabelle und den Screenshots klarer.
minimaler
Leistungszustand | Takt auf Abruf bei Last | IdleVerbrauch | SingleCore Verbrauch | MultiCore Vebrauch | R15 SingleCore Score | R15 MultiCore Score |
0 | 1200 MHz | 90W | 125W | 315W | 149 | 1718 |
5 | 1200 MHz | 90W | 125W | 315W | 149 | 1725 |
25 | 1200 MHz | 90W | 125W | 315W | 155 | 1723 |
50 | 1600 MHz | 90-97W | 125W | 315W | 147 | 1719 |
75 | 2400 MHz | 90-107W | 125W | 315W | 158 | 1725 |
85 | 2600 MHz | 90-107W | 125W | 315W | 157 | 1744 |
95 | fehlt | 90-107W | 125W | 315W | 152 | 1738 |
97 | 3000 MHz (Basistakt) | 90-107W | 125W | 315W | 169 | 1737 |
100 (= Profil Höchstleistung) | 4500 MHz (max.Turbo) (OC) | 90-135W | 137W | 315W | 173 | 1741 |
* Als Orientierung: 4770k mit 4.4Ghz Turbo (ebenfalls Haswell) erreicht 165 SingleCore Punkte.
Etwas klarer wird es wenn wir uns das
Taktverhalten unter Win 7 64Bit ansehen:
minimaler Leistungszustand 0%
bekanntes Bild. Jeder Kern taktet individuell. Das Betriebsystem versucht alle Kerne bis auf den Kern mit Last im Idle (1200MHz) zu halten. Beim hin- und herschubsen des Threads reicht die Zeit nicht aus um schnell genug vom Idle in den Turbo zu kommen.
minimaler Leistungszustand 5%
genauso bei 5%. Ein häufiges Bild. Häufig reicht die Zeit gerade aus um den Basis-Takt zu erreichen.
minimaler Leistungszustand 25%
ähnliches Verhalten. Interessant ist, dass der beim Übergang von einem Thread zum nächsten auch manchmal 2 Cores bereits höher Takten. Der Score wird besser ist aber weiterhin schlecht.
minimaler Leistungszustand 50%
zum ersten Mal fällt auf, dass die CPU bei SingleCore-Last alle anderen Cores im Takt hebt. Das Ergebnis weiterhin schlecht. 1600MHz sind halt auch nicht die Welt.
minimaler Leistungszustand 75%
Das Ergebnis wird "etwas" besser. Der erhöhte Ausgangstakt reicht dennoch nicht aus um den Tubro dauerhaft und direkt zu halten.
minimaler Leistungszustand 85%
kaum Besserung, trotz 2600MHz Ausgangsbasis.
minimaler Leistungszustand 97%
Die goldene Mitte. Das Energiemanagement funktioniert fast perfekt. Die Erklärung ist sehr einfach. Der Ausgangstakt ist nämlich exakt der Basistakt der CPU. Jetzt steht das OS nur noch vor der Frage "Turbo zünden: ja/nein". Das ganze Drama davor entfällt.
Idle Verhalten 97%
Auch im Idle funktioniert der Prozessor (fast) wie er soll. Der Idle Takt von 1200MHz wird genutzt. An den Kleinstaufgaben erkennt man, dass die CPU direkt in den Basistakt geht. Es gibt also nur noch 3 grobe Taktstufen für den Prozessor: Idle, Basistakt, Turbo
Der SingleCore-Score im R15 erreicht vereinzelt 169 Punkte und liegt knapp am Maximum von 173.
Dennoch zeigt die Plattform reproduzierbar ein merkwürdige Verhalten. Nach längerer Last zB Games liegt dauerhaft ein höherer Idle-Verbrauch von 110Watt an. Dieser bewegt sich auch nach Stunden nicht mehr nach unten, obwohl der Takt von 1200Mhz im Idle anliegt. Erst nach einem Neustart sind die bekannten 90 Watt zu sehen.
minimaler Leistungszustand 100%
Bei SingleCore-Last liegt der Takt über alle Cores hinweg beim Maximum. Auch im Idle verhält sich die CPU ähnlich zu den 97%. Die 1200Mhz werden genutzt, trotz 100%. Das hat mich doch sehr überrascht. Es heißt, dass die einzelnen Cores weiterhin Energiesparen wollen, jedoch ist das Verhalten derart "spritzig", dass der Verbrauch bei kleinsten Prozessen (Webseite öffnen) auf 130W und mehr hochschießt.
Warum das Enegiemanagement für alle anderen Prozessoren ideal ist und warum es Haswell-E/Broadwell-E das Genick bricht.
Nicht jede Aufgabe sollte mit dem Tubro-Takt abgearbeitet werden. Ein niedriger Takt bedeutet eine höhere Effizienz. Das Beispiel mit den 100% zeigt, dass Kleinstaufgaben wie das Öffnen einer Webseite oder Hintergrundprozesse mit geringem Takt abgearbeitet werden sollten. Hierfür sorgt die Trägheit des Enegiemanagments, welche es erlaubt die Arbeiten abzuschließen bevor der Prozessor in den Turbo wechseln muss. Für Prozessoren, welche alle Cores als gesamtes takten ist das ideal, da beim Übergeben eines Task auf einen anderen Core einfach mit dem gleichen Takt weitergearbeitet wird. Der Prozessor kann so den Takt durchgehen erhöhen und eben auch halten.
Für Haswell-E und Broadwell-E bricht genau dieses Verhalten dem Prozessor das Genick. Die Trägheit ist zu groß. Selbst bei 85% "minimaler Leistungszustand" und einem Ausgangstakt von 2600MHz vergeht schlicht zuviel Zeit bis der Basistakt erreicht und anschließend der Turbo genutz wird. 2600MHz -> 3000MHz (Basistakt) -> Tubro ja/nein
Erst wenn das ganze Taktverhalten unter dem Basistakt entfällt, läuft die CPU fast wie sie soll. Fast weil die ganzen Taktstufen natürlich auch einen Sinn haben - Nämlich Aufgaben ohne hohe Prio mit höchst möglicher Effizenz abzuarbeiten.
Win 10
Mittlerweile bin ich auf Win10 umgestiegen um selbst zu testen ob es besser läuft.
Und siehe da, ja tut es. Der Minimale Leistungszustand steht aktull bei 5% und auf Anhieb 169 Punkte im R15.
Das Problem hat man auch gut gelöst, ähnlich zu Intels Software für Broadwell-E. Anscheinend erkennt das Management nun Singlethread-Last und versucht den Task auf einen Core(Thread) festzupinnen. Die Welchsel finden deutlich seltener statt. Teilweise lief der Bench zur Hälfte durch bevor ein Welchel auf einen anderen Core statt fand! Manchmal dann wieder alle 2-3 Sekunden ein Wechsel, dann wieder 10 Sekunden auf einem Core. Bemerkenswert.
Das hat natülich auch einen positiven Effekt auf den Idle-Verbrauch. Dieser sinkt durch Win10 auf 88Watt. Einfach erklärt entfällt ein hin- und hergeswitche der Aufgaben und einige Kerne dürfen länger in den tiefsten Schlafzuständen bleiben.
Werde das weiter beobachten.