Hallo liebe Community!
Ich melde mich aus der Corona-Kurzarbeit und mit entsprechend vergleichsweise viel Zeit, um mal wieder einen Blogeintrag zu verfassen. Es ist aber nicht (nur) Langeweile, sondern durchaus ein konkreter Anlass bzw. konkretes Thema, das die letzten Wochen wieder sehr gehäuft im Forum auftritt. Es geht wie so oft um CPU-Temperaturen.
Bereits vor einiger Zeit hab ich mal einen Blogeintrag hier abgesetzt der sich rund um das Thema CPU-Temperaturen gedreht hatte, einfach weil das nicht nur ein kontroverses Thema ist sondern auch weil die breite Wahrnehmung der Nutzergemeinde auch weit von dem abweicht, was technisch tatsächlich hinter der Thematik steht. Die technischen Neuerungen und vor allem Eigenheiten, die ZEN2 in Form der Ryzen3000 Desktopserie da mit sich gebracht hat, haben leider erneut zu vielen Missverständnissen geführt, auf die ich hier näher eingehen möchte. Die Informationen aus dem ersten Temperaturblog würde ich da gerne weitestgehend als bekannt voraussetzen, daher schlage ich vor falls nicht schon geschehen, diesen Eintrag zuerst zu lesen (Siehe hier: https://extreme.pcgameshardware.de/...lkis-blog-35-vorsicht-heisse-oberflaeche.html)
Nachdem dem geneigten Leser auch des anderen Blogeintrages nun durchaus schon klar ist, dass beispielsweise 90°C Lasttemperatur technisch kein Thema für einen 3700X als Beispiel ist und auch diese CPUs nicht zu heiß werden können weil sie vorher drosseln und abschalten würden, verhält sich Ryzen3000 aber generell etwas anders als man es von älteren Generationen, insbesondere auch Intel-CPUs, gewohnt ist. Dies führt häufig zu Threads im Forum wie 55°C Idle Temperatur! Hilfe zu hoch! oder Temperatur schwankt extrem sowie Folgeprobleme wie CPU Lüfter dreht ständig auf!. Warum das so ist und wie man gewisse Dinge ganz einfach abstellt möchte ich gerne erläutern und wie immer sollten, wenn verstanden werden soll warum sich Dinge so verhalten wie sie es nunmal tun, erst einige Grundlagen geklärt werden. Also was ist/macht Ryzen3000 eigentlich?
Die Gründe für das auf den ersten Blick seltsame Temperaturverhalten von Ryzen3000 CPUs sind hauptsächlich folgende:
- Messverfahren
- Boostverhalten
- Chipaufbau / 7nm
- Scheduling
Fangen wir mal beim Messverfahren an. Klassische CPUs haben in aller Regel pro CPU-Kern einen Temperatursensor, der an notorisch wärmeren Stellen eines Kerns angebracht ist und von Tools ausgelesen werden kann. Das sollte nichts Neues sein. ZEN2 ist nun darauf ausgelegt, extrem schnelle und feine Taktanpassungen vorzunehmen abhängig davon, in welchem Zustand sich der Chip gerade befindet. Ein dazu nötiger Parameter ist eine schnelle und genaue Messung von Chiptemperaturen. Ein Chip, der im Millisekundenbereich seinen Boost anpassen will muss entsprechend genaue und schnelle Temperaturangaben haben. Dafür reichen die bekannten Sensoriken bei weitem nicht aus. ZEN-CPUs haben daher sehr viel mehr und schnellere Temperatursensoren verbaut als der Normalanwender das so gewohnt ist wie viele genau es sind weiß nur AMD alleine(*), bestätigt sind aber weitaus mehr als einer pro Kern, das wurde bereits vor Jahren auf Folien zu ZEN1 gezeigt.
_____
(*)EDIT: Ein Paper bei Wikichip gibt folgende Daten an:
"The CCX incorporates 48 high-speed power supply monitors, 20 thermal diodes, and 9 high-speed droop detectors."
Bedeutet ein 3950X als Beispiel hat 192 Leistungssensoren, 36 Spannungssensoren und 80 Temperatursensoren. Also 308 Sensorwerte. Das wollt ihr nicht alles angezeigt bekommen, oder?
_____
Nun kann und will AMD natürlich keine sagen wir mal 100 verschiedene Temperaturwerte an irgendwelche Auslesetools ausgeben und damit nicht nur Tool und Benutzer sondern auch den I/O völlig überfordern diese Sensorwerte werden nur vom Boostmechanismus zu Regelzwecken verwendet. Der Nutzer will aber nun auch eine CPU-Temperatur haben um beispielsweise seine Lüfter regeln zu können also macht AMD was ziemlich simples: Immer wenn eine Anfrage nach der CPU Temperatur kommt gibt die CPU den jeweils höchsten gerade gemessenen Wert aller vorhandenen Sensoren zurück. Bitte den letzten Satz nochmal lesen und kurz darüber nachdenken was das alles bedeutet (dazu später noch mehr nach den Grundlagen)
Schauen wir uns mal das Boostverhalten an. Ryzen3000 verfügt über äußerst aggressive Boost- und Stromsparmechanismen. Von PowerGating, also dem völligen Abschalten von Kernen bei 0,2 V Betriebsspannung bis hin zu Overboost und maximalem Singlecoretakt bei bis zu 1,5 V Spannung ist alles machbar und zwar innerhalb von Millisekunden und für jeden Kern einzeln. Dies führt dazu, dass ganz gezielt in den Chipbereichen die gerade gebraucht werden in kürzester Zeit sehr hohe Performance (und Verbrauch und Abwärme) erzeugt werden kann während andere Chipteile schlafen und es führt insbesondere auch dazu, dass kleine Bereiche des Chips in passenden Szenarien Energiemengen verbrauchen können die eigentlich in anderen Szenarien für den ganzen Chip gedacht sind. Diese Boosts können so extrem sein, dass Kerne aus ihren P-States springen wenn nur der Mauszeiger bewegt wird!
Schauen wir auch kurz auf den Chipaufbau. Wie vielleicht bekannt ist bestehen Ryzen3000 CPUs aus einem recht großen I/O-Die in der Mitte des Packages (in 12 nm gefertigt) und je nach Modell einem oder mehreren kleinen Chiplets aus der 7 nm Fertigung. Die bei weitem größte Energie und damit auch Abwärme wird in den Chiplets umgesetzt und da diese als sehr kompakte 7 nm Chips eine sehr hohe Leistungsdichte haben (also Watt pro Quadratmillimeter Chipfläche) begünstigt das sehr schnelle und hohe lokal begrenzte Temperatursprünge. Diese Chiplets sind nun physikalisch auch nicht in der Mitte unter dem Heatspreader (Deckel) der CPU sondern versetzt was je nach Aufbau des verwendeten Kühlers ebenfalls nachteilig sein kann, da die meisten Kühler so konstruiert sind, dass sie die maximale Abwärme mittig aufnehmen können. Insbesondere Kühler, deren Heatpipes direkten Kontakt mit der CPU haben können da Probleme bekommen.
Dieser etwas ausgefallenere Chipaufbau macht auch eine besondere Form des Schedulers notwendig (ein Scheduler ist der Organisator der schaut welche, Aufgabe wann von welchem Kern erledigt werden sollte um das schnellste Ergebnis zu erzielen). Dieser muss wenn man beispielsweise einen 3950X verwendet (2 Chiplets mit jeweils 2 CCX-Untereinheiten zu je 4 Kernen), welche Aufgabe zu welchem Chiplet und in welchem CCX auf welchem Kern bearbeitet werden soll. Diese Aufgabenaufteilung erfolgt sinnigerweise so, dass Aufgaben, die aus dem gleichen Programm stammen, möglichst nah beieinander bearbeitet werden wenn ein Programm 4 Threads bedient wird der Scheduler bemüht sein diese 4 Threads auf einen einzelnen CCX zu legen da das weitaus schneller ist als die Aufgaben zu verteilen und die Threads ständig über irgendwelche Umwege zwischen CCX und Chiplets miteinander kommunizieren zu lassen. Andererseits wird er auch bemüht sein, die CPU gleichmäßig auszulasten um nicht Kernen, die sowieso schon maximal boosten und heiß sind noch mehr aufzuladen während andere Kerne nichts tun. Das ist ein großes eigenständiges Thema wie sowas sinnvoll arrangiert wird was hier zu weit führen würde, es geht nur darum zu verstehen, wie die grundlegende Vorgehensweise ist.
Und jetzt? Schauen wir mal auf so manches Beispiel, was all diese Dinge mit den angezeigten Temperaturen so zu tun haben
Beispiel 1: Meine Idletemperatur ist viel zu hoch!!
Sehen wir uns mal einen PC an, der augenscheinlich gerade GAR NICHTS tut. Die CPU bemerkt dass keine Last anliegt und schickt so viele Kerne wie möglich in den Schlaf 0,2 V Deep Sleep, Abwärme im Milliwattbereich, quasi Null. Im Idealfall würde die CPU-Temperatur sich der Umgebungstemperatur annähern, da sie keinerlei nennenswerte Abwärme mehr abgibt (den I/O-Teil der nicht abgeschaltet werden kann ignorieren wir mal).Nun gibts bei modernen Systemen aber kein GAR NICHTS, es laufen immer zig Hintergrundprozesse die noch das Bild anzeigen, Speicher verwalten, Treiber schubsen und so weiter. Die Last ist minimal, dennoch kann der oben genannte 3950X nicht alle 16 Kerne schlafen legen da das System dann einfrieren würde. Ein einzelner Kern bleibt also immer wach und erledigt den Kleinkram. Durch den beschriebenen aggressiven Boost auch sehr schnell wenn ein Treiber irgendwas vor hat taktet die CPU den einen Kern 100 Millisekunden lang auf 4 GHz rum hoch, erledigt alles und taktet sofort wieder runter. Viel schneller als das ausgelesen werden könnte. Dieser Kern hat sich in den 100 Millisekunden lokal ziemlich stark erwärmt, beispielsweise von 30 auf 55°C, und Wärme ist wesentlich träger als Takt (er wird also nicht in 100 Millisekunden wieder abkühlen). Die physikalische Realität ist also gerade: 15 von 16 Kernen schlafen bei 30°C, einer hat 0,1s hochgetaktet um kurz was zu machen und wurde lokal kurz 55°C warm. Was zeigt die CPU als Temperatur dem Nutzer an? Richtig, 55°C. Dass das nur ein stecknadelkopfgroßer Bereich des Chips ist der vielleicht ne halbe Sekunde kurz so warm war weiß der Nutzer nicht und glaubt, seine Idletemperaturen seien hoch
Beispiel 2: Idle ist im Windows viel höher als im BIOS!
Auch gerne genommen Windows zeigt die genannten 55°C an aber wenn man im BIOS ist werden nur 40°C angezeigt. Der Hintergrund ist folgender: So lange man sich im BIOS aufhält läuft die CPU mehr oder weniger im Notlaufmodus. Es gibt keine Stromsparfunktionen, es gibt keine Boosts, da nunmal noch keinerlei Treiber und Funktionen geladen sind. Basistakt, Basisspannung, fertig. Der 3950X verharrt bei 3,5 GHz und etwa 1 V auf allen Kernen.Was hat das zur Folge? Keine Kerne können abschalten und keine können boosten entsprechend kühlt kein Kern auf 30°C runter und keiner kann sich lokal irgendwie aufheizen. Statt wie im ersten Beispiel 15 Kerne haben 30°C und einer hat 55°C haben dieses Mal alle 16 Kerne 40°C und das wird als höchste Temperatur eben ausgegeben.Kurioserweise ist der ganze Chip insgesamt also deutlich wärmer im BIOS als er es im Windows-Idle ist obwohl die ausgegebene Temperatur 15 Kelvin niedriger ausfällt. Gut, was?
Beispiel 3: Meine Temperaturen springen und die Lüfterdrehzahl auch!
Dass es sehr hohe Sprünge in der angezeigten Temperatur gibt ist eine logische Folge der oben genannten Gegebenheiten. Angenommen ein Programm/Spiel startet und hat für 10 Kerne was zu tun. Der Scheduler organisiert die Aufgaben zu den einzelnen Kernen, die Kerne takten im Rahmen ihrer Umgebungsbedingungen aggressiv hoch und beginnen zu rechnen. Es entsteht in kleinen Bereichen der Chiplets durch hohe Taktraten und Spannungen eine hohe Abwärme, was die Temperatur in diesen Bereichen in kürzester Zeit massiv steigen lässt. Der Auslesemechanismus gibt den höchsten Wert aus und zack stehen nach 50°C eine Sekunde später 80°C auf der Uhr. Darauf nicht angepasste Lüftersteuerungen (und leider Gottes sind Hersteller was das angeht erstens sehr langsam und zweitens von der breiten Masse angeschoben die 80°C unsinnigerweise für bedenklich hält) reagieren sofort mit dem aufdrehen der Lüfter. Nun ändert sich die Last auf mehr oder andere Kerne, die Maximaltemperatur sind auf einmal nur noch 65°C und die Lüfter drehen sofort wieder runter und eine Sekunde später ggf. wieder rauf. Das ist natürlich wahnsinnig nervend und auch völlig unnötig.Die Lösung ist denkbar einfach: Eine manuelle Einstellung die alles unter 80°C à Mindestdrehzahl enthält, darüber nach Belieben nach oben, beispielsweise bis 95°C à volle Drehzahl. Nun kann die CPU-Temperaturangabe zwischen 20 und 80°C so wild hin und her springen wie sie will und der Lüfter wird sich nicht aus der Ruhe bringen lassen.
Beispiel 4: Teillast ist viel heißer als Vollast?!
Ja, auch das kann passieren bzw. ist sogar die Regel in diesem System! Schauen wir näher hin warum. Angenommen man ballert seine 16 Kerne mit brachialer Vollast zu. Cinebench, Prime95, was auch immer. Was tut nun die CPU? Sie wird versuchen, auf allen Kernen den maximal möglichen Takt zu halten ohne eines der gesetzten Limits, zum Beispiel Maximaltemperatur oder Leistungsaufnahme, zu überschreiten. In aller Regel limitiert hier die Leistungsaufnahme vor der Temperatur wenn man nicht grade den mitgelieferten Minikühler verwendet. Der 3950X wird also seine erlaubten 142 W nehmen die er im Boost verbrauchen darf (TDP x 1,35), diese auf 16 Kerne verteilen und mit dem damit stabil möglichen Takt rattern. Rund 120 W (etwa 20W verbraucht der I/O) verteilt auf 16 Kerne entsprechen da etwa 7,5 W pro Kern. Diese 7,5 W schlagen selbstverständlich dann auch als Abwärme pro Kern auf. Ein guter Kühler hält das auf unter 80°C. Wunderbar.
Dann sagen wir doch mal zu Prime, es soll bitte nur 8 Threads statt derer 32 starten für unseren 3950X! Was passiert? Zuerst mal bemerkt der Scheduler, dass er die Kerne nicht mehr auslasten kann da nur noch 8 Threads da sind. Weiterhin bemerkt er, dass alle 8 Threads aus einem Programm stammen und dass diese Threads auch noch die gleichen Dinge rechnen (genauer auf die gleichen Speicherbereiche zugreifen wollen, was tatsächlich gerechnet wird kann er nicht wissen) da ists doch naheliegend, diese Aufgaben alle ins gleiche CCX zu legen dass die Threads sich ihre Daten alle schön aus dem Cache daneben sammeln können und nicht beispielsweise auf andere Chiplets suchen gehen müssen. Also haben die 4 Kerne eines CCX die physikalisch direkt nebeneinander auf dem gleichen Chiplet liegen alle Hände voll zu tun, der Rest der CPU macht (fast) nichts. Was macht nun der Boost? Der erkennt dass 4 von 16 Kernen viel Arbeit haben und die anderen 12 keine Arbeit. Also werden die 4 Kerne möglichst hoch geboostet und die anderen möglichst runtergefahren. Nun stehen für die 4 arbeitenden Kerne aber das GESAMTE Powerbudget zur Verfügung, sprich die gleichen 120 W! Theoretisch könnte also jeder einzelne Kern statt obigen 7,5 W nun ganze 30 W fressen! Das wird real nicht passieren, da hier andere Limitierungen vorher begrenzen, dennoch werden die 4 Kerne wenn der Rest der CPU schläft viel höher takten und viel mehr pro Kern verbrauchen (Größenordnung 12-15 W pro Kern) als sie es noch konnten wenn alle Kerne unter Last waren. Das Resultat: Die CPU wird in diesem arbeitenden Bereich deutlich wärmer werden, das eine CCX geht vielleicht auf 90°C hoch, die anderen 3 CCX bleiben bei vielleicht 50°C. Was wird angezeigt? Richtig.
Von diesen Beispielen gibt es noch viele weitere, ich denke aber dass der Leser, der die beschriebenen Zusammenhänge verstanden hat schnell die Lösung dafür vor Augen hätte. Sollte dennoch jemand hier ankommen (etwa weil er meinem Faulenzer-Link in einem Thread gefolgt ist) und noch Restfragezeichen übrig haben: Ich bin ja hier. Also die nächsten paar Wochen wohl ziemlich viel.
Ich melde mich aus der Corona-Kurzarbeit und mit entsprechend vergleichsweise viel Zeit, um mal wieder einen Blogeintrag zu verfassen. Es ist aber nicht (nur) Langeweile, sondern durchaus ein konkreter Anlass bzw. konkretes Thema, das die letzten Wochen wieder sehr gehäuft im Forum auftritt. Es geht wie so oft um CPU-Temperaturen.
Bereits vor einiger Zeit hab ich mal einen Blogeintrag hier abgesetzt der sich rund um das Thema CPU-Temperaturen gedreht hatte, einfach weil das nicht nur ein kontroverses Thema ist sondern auch weil die breite Wahrnehmung der Nutzergemeinde auch weit von dem abweicht, was technisch tatsächlich hinter der Thematik steht. Die technischen Neuerungen und vor allem Eigenheiten, die ZEN2 in Form der Ryzen3000 Desktopserie da mit sich gebracht hat, haben leider erneut zu vielen Missverständnissen geführt, auf die ich hier näher eingehen möchte. Die Informationen aus dem ersten Temperaturblog würde ich da gerne weitestgehend als bekannt voraussetzen, daher schlage ich vor falls nicht schon geschehen, diesen Eintrag zuerst zu lesen (Siehe hier: https://extreme.pcgameshardware.de/...lkis-blog-35-vorsicht-heisse-oberflaeche.html)
Nachdem dem geneigten Leser auch des anderen Blogeintrages nun durchaus schon klar ist, dass beispielsweise 90°C Lasttemperatur technisch kein Thema für einen 3700X als Beispiel ist und auch diese CPUs nicht zu heiß werden können weil sie vorher drosseln und abschalten würden, verhält sich Ryzen3000 aber generell etwas anders als man es von älteren Generationen, insbesondere auch Intel-CPUs, gewohnt ist. Dies führt häufig zu Threads im Forum wie 55°C Idle Temperatur! Hilfe zu hoch! oder Temperatur schwankt extrem sowie Folgeprobleme wie CPU Lüfter dreht ständig auf!. Warum das so ist und wie man gewisse Dinge ganz einfach abstellt möchte ich gerne erläutern und wie immer sollten, wenn verstanden werden soll warum sich Dinge so verhalten wie sie es nunmal tun, erst einige Grundlagen geklärt werden. Also was ist/macht Ryzen3000 eigentlich?
Die Gründe für das auf den ersten Blick seltsame Temperaturverhalten von Ryzen3000 CPUs sind hauptsächlich folgende:
- Messverfahren
- Boostverhalten
- Chipaufbau / 7nm
- Scheduling
Fangen wir mal beim Messverfahren an. Klassische CPUs haben in aller Regel pro CPU-Kern einen Temperatursensor, der an notorisch wärmeren Stellen eines Kerns angebracht ist und von Tools ausgelesen werden kann. Das sollte nichts Neues sein. ZEN2 ist nun darauf ausgelegt, extrem schnelle und feine Taktanpassungen vorzunehmen abhängig davon, in welchem Zustand sich der Chip gerade befindet. Ein dazu nötiger Parameter ist eine schnelle und genaue Messung von Chiptemperaturen. Ein Chip, der im Millisekundenbereich seinen Boost anpassen will muss entsprechend genaue und schnelle Temperaturangaben haben. Dafür reichen die bekannten Sensoriken bei weitem nicht aus. ZEN-CPUs haben daher sehr viel mehr und schnellere Temperatursensoren verbaut als der Normalanwender das so gewohnt ist wie viele genau es sind weiß nur AMD alleine(*), bestätigt sind aber weitaus mehr als einer pro Kern, das wurde bereits vor Jahren auf Folien zu ZEN1 gezeigt.
_____
(*)EDIT: Ein Paper bei Wikichip gibt folgende Daten an:
"The CCX incorporates 48 high-speed power supply monitors, 20 thermal diodes, and 9 high-speed droop detectors."
Bedeutet ein 3950X als Beispiel hat 192 Leistungssensoren, 36 Spannungssensoren und 80 Temperatursensoren. Also 308 Sensorwerte. Das wollt ihr nicht alles angezeigt bekommen, oder?
_____
Nun kann und will AMD natürlich keine sagen wir mal 100 verschiedene Temperaturwerte an irgendwelche Auslesetools ausgeben und damit nicht nur Tool und Benutzer sondern auch den I/O völlig überfordern diese Sensorwerte werden nur vom Boostmechanismus zu Regelzwecken verwendet. Der Nutzer will aber nun auch eine CPU-Temperatur haben um beispielsweise seine Lüfter regeln zu können also macht AMD was ziemlich simples: Immer wenn eine Anfrage nach der CPU Temperatur kommt gibt die CPU den jeweils höchsten gerade gemessenen Wert aller vorhandenen Sensoren zurück. Bitte den letzten Satz nochmal lesen und kurz darüber nachdenken was das alles bedeutet (dazu später noch mehr nach den Grundlagen)
Schauen wir uns mal das Boostverhalten an. Ryzen3000 verfügt über äußerst aggressive Boost- und Stromsparmechanismen. Von PowerGating, also dem völligen Abschalten von Kernen bei 0,2 V Betriebsspannung bis hin zu Overboost und maximalem Singlecoretakt bei bis zu 1,5 V Spannung ist alles machbar und zwar innerhalb von Millisekunden und für jeden Kern einzeln. Dies führt dazu, dass ganz gezielt in den Chipbereichen die gerade gebraucht werden in kürzester Zeit sehr hohe Performance (und Verbrauch und Abwärme) erzeugt werden kann während andere Chipteile schlafen und es führt insbesondere auch dazu, dass kleine Bereiche des Chips in passenden Szenarien Energiemengen verbrauchen können die eigentlich in anderen Szenarien für den ganzen Chip gedacht sind. Diese Boosts können so extrem sein, dass Kerne aus ihren P-States springen wenn nur der Mauszeiger bewegt wird!
Schauen wir auch kurz auf den Chipaufbau. Wie vielleicht bekannt ist bestehen Ryzen3000 CPUs aus einem recht großen I/O-Die in der Mitte des Packages (in 12 nm gefertigt) und je nach Modell einem oder mehreren kleinen Chiplets aus der 7 nm Fertigung. Die bei weitem größte Energie und damit auch Abwärme wird in den Chiplets umgesetzt und da diese als sehr kompakte 7 nm Chips eine sehr hohe Leistungsdichte haben (also Watt pro Quadratmillimeter Chipfläche) begünstigt das sehr schnelle und hohe lokal begrenzte Temperatursprünge. Diese Chiplets sind nun physikalisch auch nicht in der Mitte unter dem Heatspreader (Deckel) der CPU sondern versetzt was je nach Aufbau des verwendeten Kühlers ebenfalls nachteilig sein kann, da die meisten Kühler so konstruiert sind, dass sie die maximale Abwärme mittig aufnehmen können. Insbesondere Kühler, deren Heatpipes direkten Kontakt mit der CPU haben können da Probleme bekommen.
Dieser etwas ausgefallenere Chipaufbau macht auch eine besondere Form des Schedulers notwendig (ein Scheduler ist der Organisator der schaut welche, Aufgabe wann von welchem Kern erledigt werden sollte um das schnellste Ergebnis zu erzielen). Dieser muss wenn man beispielsweise einen 3950X verwendet (2 Chiplets mit jeweils 2 CCX-Untereinheiten zu je 4 Kernen), welche Aufgabe zu welchem Chiplet und in welchem CCX auf welchem Kern bearbeitet werden soll. Diese Aufgabenaufteilung erfolgt sinnigerweise so, dass Aufgaben, die aus dem gleichen Programm stammen, möglichst nah beieinander bearbeitet werden wenn ein Programm 4 Threads bedient wird der Scheduler bemüht sein diese 4 Threads auf einen einzelnen CCX zu legen da das weitaus schneller ist als die Aufgaben zu verteilen und die Threads ständig über irgendwelche Umwege zwischen CCX und Chiplets miteinander kommunizieren zu lassen. Andererseits wird er auch bemüht sein, die CPU gleichmäßig auszulasten um nicht Kernen, die sowieso schon maximal boosten und heiß sind noch mehr aufzuladen während andere Kerne nichts tun. Das ist ein großes eigenständiges Thema wie sowas sinnvoll arrangiert wird was hier zu weit führen würde, es geht nur darum zu verstehen, wie die grundlegende Vorgehensweise ist.
Und jetzt? Schauen wir mal auf so manches Beispiel, was all diese Dinge mit den angezeigten Temperaturen so zu tun haben
Beispiel 1: Meine Idletemperatur ist viel zu hoch!!
Sehen wir uns mal einen PC an, der augenscheinlich gerade GAR NICHTS tut. Die CPU bemerkt dass keine Last anliegt und schickt so viele Kerne wie möglich in den Schlaf 0,2 V Deep Sleep, Abwärme im Milliwattbereich, quasi Null. Im Idealfall würde die CPU-Temperatur sich der Umgebungstemperatur annähern, da sie keinerlei nennenswerte Abwärme mehr abgibt (den I/O-Teil der nicht abgeschaltet werden kann ignorieren wir mal).Nun gibts bei modernen Systemen aber kein GAR NICHTS, es laufen immer zig Hintergrundprozesse die noch das Bild anzeigen, Speicher verwalten, Treiber schubsen und so weiter. Die Last ist minimal, dennoch kann der oben genannte 3950X nicht alle 16 Kerne schlafen legen da das System dann einfrieren würde. Ein einzelner Kern bleibt also immer wach und erledigt den Kleinkram. Durch den beschriebenen aggressiven Boost auch sehr schnell wenn ein Treiber irgendwas vor hat taktet die CPU den einen Kern 100 Millisekunden lang auf 4 GHz rum hoch, erledigt alles und taktet sofort wieder runter. Viel schneller als das ausgelesen werden könnte. Dieser Kern hat sich in den 100 Millisekunden lokal ziemlich stark erwärmt, beispielsweise von 30 auf 55°C, und Wärme ist wesentlich träger als Takt (er wird also nicht in 100 Millisekunden wieder abkühlen). Die physikalische Realität ist also gerade: 15 von 16 Kernen schlafen bei 30°C, einer hat 0,1s hochgetaktet um kurz was zu machen und wurde lokal kurz 55°C warm. Was zeigt die CPU als Temperatur dem Nutzer an? Richtig, 55°C. Dass das nur ein stecknadelkopfgroßer Bereich des Chips ist der vielleicht ne halbe Sekunde kurz so warm war weiß der Nutzer nicht und glaubt, seine Idletemperaturen seien hoch
Beispiel 2: Idle ist im Windows viel höher als im BIOS!
Auch gerne genommen Windows zeigt die genannten 55°C an aber wenn man im BIOS ist werden nur 40°C angezeigt. Der Hintergrund ist folgender: So lange man sich im BIOS aufhält läuft die CPU mehr oder weniger im Notlaufmodus. Es gibt keine Stromsparfunktionen, es gibt keine Boosts, da nunmal noch keinerlei Treiber und Funktionen geladen sind. Basistakt, Basisspannung, fertig. Der 3950X verharrt bei 3,5 GHz und etwa 1 V auf allen Kernen.Was hat das zur Folge? Keine Kerne können abschalten und keine können boosten entsprechend kühlt kein Kern auf 30°C runter und keiner kann sich lokal irgendwie aufheizen. Statt wie im ersten Beispiel 15 Kerne haben 30°C und einer hat 55°C haben dieses Mal alle 16 Kerne 40°C und das wird als höchste Temperatur eben ausgegeben.Kurioserweise ist der ganze Chip insgesamt also deutlich wärmer im BIOS als er es im Windows-Idle ist obwohl die ausgegebene Temperatur 15 Kelvin niedriger ausfällt. Gut, was?
Beispiel 3: Meine Temperaturen springen und die Lüfterdrehzahl auch!
Dass es sehr hohe Sprünge in der angezeigten Temperatur gibt ist eine logische Folge der oben genannten Gegebenheiten. Angenommen ein Programm/Spiel startet und hat für 10 Kerne was zu tun. Der Scheduler organisiert die Aufgaben zu den einzelnen Kernen, die Kerne takten im Rahmen ihrer Umgebungsbedingungen aggressiv hoch und beginnen zu rechnen. Es entsteht in kleinen Bereichen der Chiplets durch hohe Taktraten und Spannungen eine hohe Abwärme, was die Temperatur in diesen Bereichen in kürzester Zeit massiv steigen lässt. Der Auslesemechanismus gibt den höchsten Wert aus und zack stehen nach 50°C eine Sekunde später 80°C auf der Uhr. Darauf nicht angepasste Lüftersteuerungen (und leider Gottes sind Hersteller was das angeht erstens sehr langsam und zweitens von der breiten Masse angeschoben die 80°C unsinnigerweise für bedenklich hält) reagieren sofort mit dem aufdrehen der Lüfter. Nun ändert sich die Last auf mehr oder andere Kerne, die Maximaltemperatur sind auf einmal nur noch 65°C und die Lüfter drehen sofort wieder runter und eine Sekunde später ggf. wieder rauf. Das ist natürlich wahnsinnig nervend und auch völlig unnötig.Die Lösung ist denkbar einfach: Eine manuelle Einstellung die alles unter 80°C à Mindestdrehzahl enthält, darüber nach Belieben nach oben, beispielsweise bis 95°C à volle Drehzahl. Nun kann die CPU-Temperaturangabe zwischen 20 und 80°C so wild hin und her springen wie sie will und der Lüfter wird sich nicht aus der Ruhe bringen lassen.
Beispiel 4: Teillast ist viel heißer als Vollast?!
Ja, auch das kann passieren bzw. ist sogar die Regel in diesem System! Schauen wir näher hin warum. Angenommen man ballert seine 16 Kerne mit brachialer Vollast zu. Cinebench, Prime95, was auch immer. Was tut nun die CPU? Sie wird versuchen, auf allen Kernen den maximal möglichen Takt zu halten ohne eines der gesetzten Limits, zum Beispiel Maximaltemperatur oder Leistungsaufnahme, zu überschreiten. In aller Regel limitiert hier die Leistungsaufnahme vor der Temperatur wenn man nicht grade den mitgelieferten Minikühler verwendet. Der 3950X wird also seine erlaubten 142 W nehmen die er im Boost verbrauchen darf (TDP x 1,35), diese auf 16 Kerne verteilen und mit dem damit stabil möglichen Takt rattern. Rund 120 W (etwa 20W verbraucht der I/O) verteilt auf 16 Kerne entsprechen da etwa 7,5 W pro Kern. Diese 7,5 W schlagen selbstverständlich dann auch als Abwärme pro Kern auf. Ein guter Kühler hält das auf unter 80°C. Wunderbar.
Dann sagen wir doch mal zu Prime, es soll bitte nur 8 Threads statt derer 32 starten für unseren 3950X! Was passiert? Zuerst mal bemerkt der Scheduler, dass er die Kerne nicht mehr auslasten kann da nur noch 8 Threads da sind. Weiterhin bemerkt er, dass alle 8 Threads aus einem Programm stammen und dass diese Threads auch noch die gleichen Dinge rechnen (genauer auf die gleichen Speicherbereiche zugreifen wollen, was tatsächlich gerechnet wird kann er nicht wissen) da ists doch naheliegend, diese Aufgaben alle ins gleiche CCX zu legen dass die Threads sich ihre Daten alle schön aus dem Cache daneben sammeln können und nicht beispielsweise auf andere Chiplets suchen gehen müssen. Also haben die 4 Kerne eines CCX die physikalisch direkt nebeneinander auf dem gleichen Chiplet liegen alle Hände voll zu tun, der Rest der CPU macht (fast) nichts. Was macht nun der Boost? Der erkennt dass 4 von 16 Kernen viel Arbeit haben und die anderen 12 keine Arbeit. Also werden die 4 Kerne möglichst hoch geboostet und die anderen möglichst runtergefahren. Nun stehen für die 4 arbeitenden Kerne aber das GESAMTE Powerbudget zur Verfügung, sprich die gleichen 120 W! Theoretisch könnte also jeder einzelne Kern statt obigen 7,5 W nun ganze 30 W fressen! Das wird real nicht passieren, da hier andere Limitierungen vorher begrenzen, dennoch werden die 4 Kerne wenn der Rest der CPU schläft viel höher takten und viel mehr pro Kern verbrauchen (Größenordnung 12-15 W pro Kern) als sie es noch konnten wenn alle Kerne unter Last waren. Das Resultat: Die CPU wird in diesem arbeitenden Bereich deutlich wärmer werden, das eine CCX geht vielleicht auf 90°C hoch, die anderen 3 CCX bleiben bei vielleicht 50°C. Was wird angezeigt? Richtig.
Von diesen Beispielen gibt es noch viele weitere, ich denke aber dass der Leser, der die beschriebenen Zusammenhänge verstanden hat schnell die Lösung dafür vor Augen hätte. Sollte dennoch jemand hier ankommen (etwa weil er meinem Faulenzer-Link in einem Thread gefolgt ist) und noch Restfragezeichen übrig haben: Ich bin ja hier. Also die nächsten paar Wochen wohl ziemlich viel.