Blog Alkis Blog #36 - GPU-Powerlimiter

Incredible Alk

Moderator
Teammitglied
In gefühlt jedem zweiten GPU-OC Thread kommt immer mal wieder das Thema der Powerlimiter auf den Tisch mit den Fragen was das ist, wie es funktioniert, was man einstellen kann und soll und so weiter und so fort. Also werde ich mal versuchen die Hintergründe und Technik der ominösen Limiter etwas zu beleuchten.
Um das ganze etwas detaillierter zu verstehen werde ich wie üblich in meinen Blogs etwas ausholen müssen, für weniger im Thema befindliche Leute verspreche ich aber einige interessante Sichtweisen auf ihre Hardware die man so ohne weiteres normalerweise nicht hat.

Fangen wir zunächst mal damit an, was ein „PowerLimiter“ eigentlich ist. Es handelt sich recht simpel um eine Vorrichtung (wie auch immer die technisch aussieht) die verhindert, dass eine Grafikkarte mehr elektrische Leistung aufnimmt als sie soll. Um zu verstehen, warum das überhaupt notwendig ist – rund zwei Jahrzehnte sind 3D-Grafikkarten ja auch ohne sowas ausgekommen – muss man sich ein wenig mit moderner GPU-Entwicklung auseinandersetzen.

In frühen Jahren waren GPUs nicht mehr als Prozessoren, die vergleichsweise schnell viele Dreiecke zeichnen und eine Textur draufpappen konnten. Die Architektur der Chips war so gesehen relativ simpel und auch der Leistungshunger solcher Chips einfach vorhersagbar, denn man wusste wenn der Chip seine maximale Polygon/Texturleistung bringen musste und er sozusagen voll ausgelastet war verbrauchte der Chip beispielsweise 20 Watt.
Mit fortschreitender Entwicklung wurden die Aufgaben an eine solche GPU immer vielfältiger. Sie sollte auch die Beleuchtung/Schatten übernehmen, sollte durch weiterführende Befehle Bildelemente beeinflussen können (solche Algorithmen sind die „Shader“…), sollten Bildsamples in verschiedenen Auflösungen erstellen und miteinander verrechnen können (Antialiasing-Modi) bis hin zu Dingen berechnen, die mit Grafik an sich gar nichts mehr zu tun haben (Physik, Compute-Shaders,…) und vieles mehr – und das natürlich mit immer schnelleren Rechengeschwindigkeiten.

Durch diese Anforderungen wurden GPUs immer komplexer und leistungsfähiger was begrüßenswert ist, aber ab einem gewissen Punkt was die Leistungsaufnahme angeht Probleme bereitet. Heutzutage, bei extrem komplexen GPUs, sind die Chips in der Realität quasi niemals intern voll ausgelastet, da all diese verschiedenen Einheiten niemals alle gleichzeitig voll mit Berechnungen sind (bitte nicht mit einer „Auslastungsanzeige“ verwechseln, diese zeigt vereinfacht gesagt nur an, wie viele Befehle die GPU pro maximaler Anzahl gerade noch annehmen kann, sprich 100% Last bedeutet nicht dass jede Shadereinheit was zu tun hat sondern nur dass die „Auftragsannahme“ voll ist).

Nun wurde es schwierig mit der Leistungsaufnahme, denn man musste die GPUs so auslegen, dass unter „normaler“ hoher Last, etwa bei einem fordernden Spiel, die gewünschte Leistungsaufnahme, evtl. mit einem gewissen Sicherheitspolster, in etwa getroffen wurde. Wie extrem es theoretisch werden kann wenn hat ein Ingenieur von AMD mal in einem Interview erzählt – würden alle Transistoren in einer modernen GPU (oder CPU…) gleichzeitig schalten müssen und die Stromversorgung des Chips ausreichend Power dafür liefern würde der Chip mehrere Tausend Watt haben wollen und augenblicklich verdampfen.

Das „treffen“ der gewünschten Leistung bei normaler Vollast wurde von den entsprechenden Herstellern zu jenen Zeiten glücklicherweise aber sehr ordentlich umgesetzt. So verbrauchte die letzte High-End Karte die komplett ohne irgendwelche Limiter auskam, die GTX480, unter normalen Bedingungen recht genau die veranschlagten 250W – waren die Bedingungen „zahmer“ brauchte die Karte entsprechend weniger. Das Problem war, dass es auch vereinzelte Bedingungen gibt, die besonders anspruchsvoll sind. Bestimmte GPGPU-Anwendungen, besonders fordernde Spiele und Einstellungen konnten die GPU stärker belasten als das im eigentlich vorgesehen war und so die Karte dazu bringen, etwas mehr als die gewünschten 250W zu verbrauchen. Auch das wäre noch verkraftbar gewesen da es immer gewisse Sicherheitsspielräume gibt so dass auch 280W die karte nicht gleich umbringen. Was aber ein echtes Problem war sind Programme, die gezielt darauf ausgelegt waren, mit technisch gesehen sinnlosen Berechnungen die GPUs an ihre Leistungsgrenze zu zwingen und so stark zu überlasten. Das bekannteste Werkzeug dieser Art ist der „Furmark“, es gibt aber eine Reihe von Klonen und ähnlichen Tools die zum gleichen Ergebnis führen – als Sammelbegriff für diese Programme hat sich in diesem Zusammenhang „Powervirus“ durchgesetzt. Diese schafften es, dass solche Karten unter Umständen weit über 100W mehr verbrauchten als sie eigentlich durften.

Der recht harte Begriff Powervirus kommt also nicht von ungefähr: Diese Programme waren in der Lage, insbesondere übertaktete Vertreter solcher Grafikkarten so weit über das zu belasten was eigentlich vorgesehen war, dass es in der Regel binnen kurzer Zeit zum Totalausfall führte da meist die Spannungsversorgung auf der Platine diese Belastung nicht lange mitmachte (Videos zu blitzenden und rauchenden Fermi-Grafikkarten gibt’s im Netz zuhauf wenn das jemand sehen will).

Die Hersteller, im genannten Beispiel NVidia, mussten reagieren. Eine Grafikkarte durfte nicht so einfach mit einer Software zerstörbar sein die nichts anderes tat, als den Chip voll zu belasten. Als erste Gegenmaßnahme kam daher ein Treiber, der die „Powerviren“ erkannte und sofern ein solches Programm gestartet wurde die Grafikkarte hart heruntertaktete, beispielsweise auf die Hälfte ihres normalen Taktes, um deren Ableben zu verhindern. Das funktionierte anfangs recht mäßig da die Erkennung schlicht über den Dateinamen des Programmes erfolgte. Sprich wer die „furmark.exe“ ausführte bekam seine Karte gedrosselt, wer die Datei in „drosseln_ist_doof.exe“ umbenannte fuhr weiterhin volle Power.

Im Refresh der GTX400er Karten wurde der Schutz entsprechend tiefer eingebaut und eine GTX580 erkannte einen Powervirus anhand seiner ungewöhnlichen Befehlsstruktur, egal wie die Datei hieß, und konnte drosseln. Aber auch dieser Schutz währte nicht besonders lange, denn kurz darauf waren die Entwickler des bekannten Tools GPU-Z in der Lage, den Schutz mit einem Befehlszeilenparameter komplett zu deaktivieren – wer wollte konnte also nach ein bisschen Recherche den Powerlimiter seiner Karte per Mausklick abschalten.

Es brauchte aus Herstellersicht eine deutlich bessere Lösung – und hier kommt, mit der Kepler-Generation, ein recht genialer Trick zum Einsatz: Warum einen harten Powerlimiter als Schutzeinrichtung integrieren, wenn man eine solche Überwachungsfunktion dynamisch als Feature nutzen und die Leistungsfähigkeit der Karte im Mittel erhöhen kann?
Man kam auf die Idee, die Leistungsaufnahme sowie andere Messwerte der Karte dauerhaft zu überwachen und die Betriebsparameter der Karte, also Takt und Spannung, dynamisch so anzupassen, dass man immer möglichst nahe an der Leistungsgrenze ist aber nie darüber hinaus geht. Der GPU-Boost war geboren. Forderte eine Anwendung die GPU weniger konnte diese sich etwas übertakten weil noch Spielraum übrig war ("boosten"), war die Belastung einer Anwendung sehr groß wurde der Takt reduziert um im Limit zu bleiben – und das wenn nötig sehr stark, so dass Kepler-Karten beim Furmark viele Hundert MHz niedriger Takteten als bei „normaler“ Last.

Aus einem zwingend notwendigen Schutz vor Überbelastung wurde ein Feature, das bei modernen Karten nicht mehr wegzudenken ist und (besonders in moderneren Ausbaustufen) in der Lage ist, abhängig von Umgebungsbedingungen (Leistungsaufnahme, Temperatur, Last,…) die Karte so zu betreiben, dass sie ihre maximale Leistung im zulässigen Bereich bringen kann – die OC-Szene hatte NVidia und AMD quasi dazu gezwungen das Feature zu entwickeln.

Jene OC-Szene hatte aber nun ein ganz anderes Problem: Der tolle neue GPU-Boost mit Powerlimiter (oder „Powertarget (PT)“ wie er heute bei NV heißt) ist nicht besonders viel beeinflussbar und limitiert je nach Kartenmodell so früh, dass die Karte eingebremst wird bevor ihr eigentlicher OC-Spielraum ausgereizt werden kann. Also musste man an dem Ding als Übertakter irgendwie vorbei. Bis einschließlich der Maxwell-Generation (GTX900) war das noch mit vertretbarem Risiko eines BIOS-Flashes der Karten machbar. Denn das Powertarget ist wie folgt realisiert:

Im BIOS der Grafikkarte ist ein Wert hinterlegt, der die Zielgröße für den Stromverbrauch der Karte unter 3D-Last (P0-State) angibt – beispielsweise 250W. Weiterhin gibt’s ein Limit, wie weit der Nutzer diesen Wert prozentual verändern darf, beispielsweise 50-120% - das ist das, was OC-Tools dann als Einstellung erlauben, sprich man könnte der Karte sagen sie darf von 125W bis 300W verbrauchen, je nach Prozenteinstellung – und dahin würde die Karte auch versuchen zu kommen wenn Last anliegt. Werden diese Werte im BIOS geschickt manipuliert ist es möglich, auch höhere Prozentzahlen anzuwählen oder als Standard gleich 500W zu hinterlegen und somit die Karte komplett „offen“ zu fahren (da sie diese 500W niemals erreichen wird wenn man nicht grade extrem-OCler ist). Bei werksübertakteten Grafikkarten ist es nicht unüblich, dass besonders starke Modelle (deren Platine auch auf sowas ausgelegt ist) im BIOS schon ab Werk höhere Wattzahlen hinterlegt haben – was der Grund ist, warum die Prozentzahlen alleine nicht vergleichbar sind, denn bei einer Karte können 100% 250W bedeuten, bei einer anderen Karte mit der gleichen GPU vielleicht 300W.

Wie auch immer, wieder hatten es die bösen Übertakter geschafft, die Karten über dem zu betreiben was der Hersteller vorgesehen hatte – und wieder mussten Gegenmaßnahmen ergriffen werden. Die folgende Pascal-Generation (GTX1000) hatte also nicht nur einen nochmals verfeinerten Boost eingebaut, sondern auch ein verschlüsseltes BIOS, das es (stand heute) nicht erlaubt, Manipulationen an BIOS-Werten vorzunehmen ohne dass die Karte ihren Dienst komplett verweigert. Und wieder fuhren die OC-ler ins Limit. Und wieder gibt’s natürlich einen Weg für Hartgesottene die Sperre zu umgehen.

Da man am BIOS, also der Steuerung der Karte, nichts mehr manipulieren konnte, gab es nur noch einen Weg Einfluss zu nehmen: Man musste die Messwerte fälschen und der Steuerung falsche Sensorwerte liefern – etwa so, wie die unrühmlichen Powerboxen es bei Autos tun deren Besitzer zu geizig ist um das Steuergerät vernünftig neu zu programmieren.

Bei Grafikkarten wird die Leistungsaufnahme die es hier zu manipulieren gibt über kleine Widerstände an der Stromversorgung der Karte gemessen, sogenannte „Shunts“. Hier wird ein Spannungsabfall gemessen, aus dem man den aktuellen Stromfluss und da die Betriebsspannung bekannt ist auch die aktuelle Leistungsaufnahme bestimmen kann. Diese Shunts sind auf GTX1000er Karten sofern man den Kühler abmontiert offen zugänglich. Der Trick ist einfach – man schafft einen Kurzschluss des Shunts indem man seine beiden Pole beispielsweise mit Silberleitlack oder Flüssigmetallwärmeleit-„Paste“ verbindet. Dadurch wird der Stromfluss durch den Shunt geringer und auch die ausgelesene Spannung kleiner. Resultat ist, dass die Karte wenn sie gerade 300W frisst „denkt“, sie würde nur 150W verbrauchen da die Hälfte des Messstromes gar nicht durch den Shunt sondern durch den Leitlack fließt. Und schon ist der PowerLimiter ohne Funktion und die Karte boostet sofern dem sonst nichts entgegenspricht voll durch.

*Update Geforce2000...*
Der Krieg geht weiter: Nachdem bei Pascal-Karten wie beschrieben die Shunts kurzgeschlossen werden konnten hat Nvidia bei den RTX2000er Karten die Sensorik verfeinert: Erkennt die Karte einen "ungewöhnlichen" Wert (etwa 2 GHz Vollast bei RTX2080Ti und nur 100W) wird in den Notlauf geschaltet und die Leistung ist weg. Aktuell muss man also sehr genau überlegen wie man die Karte veralbert - einfach kurzschließen geht nicht mehr. Mittlerweile brauchts also schon passende parallel angelötete Widerstände.
***


So, nach diesem längeren Exkurs in die Geschichte und Funktionsweise des Powertargets sollte recht deutlich geworden sein, um was es hier geht und wie es heutzutage funktioniert. Bleibt die Frage was man denn einstellen sollte…

Grundsätzlich spricht (bei nicht gemoddetem BIOS) nichts dagegen, bei den OC-Versuchen anfangs das PT voll Anschlag aufs Maximum zu parken. Was der jeweilige Hersteller da erlaubt ist ungefährlich für die Karte und man eliminiert beim testen einen Unsicherheitsfaktor so gut es eben ohne Mods geht.

Wenn dann das maximal stabile OC gefunden wurde bietet es sich an, Profile mit verschiedenen PTs anzulegen, beispielsweise 120%, 100%, 80%, 50% die man dann per Tastenkombination anwählen kann. Auf diese Art kann man je nachdem welches Spiel gerade in welchen Einstellungen laufen soll seine Karte auf das anpassen was wirklich nötig ist und so unnötigen Verbrauch und Verschleiß verhindern: Ob ein „Prison Architect“ jetzt mit 200 oder 300 fps läuft sollte egal sein, hier kann man mit dem Powertarget (oder mit einem erzwungenen vSync…) kräftig sparen.

Ein weiterer Hinweis dahingehend: Die Effizienzkurve ist hier alles andere als linear. Sprich nur wenn ich das Powertarget verdopple, etwa von 60 auf 120%, verdopple ich keineswegs die Leistung der Grafikkarte – sondern nur deren Leistungsaufnahme! Die letzten 20% des Powertargets, also bei starken Karten sagen wir die letzten 50W mehr die ich in die Karte schiebe, bringen zumeist nur noch minimal mehr Performance da die Taktraten dann nur noch sehr wenig ansteigen am Limit. Hier muss dann jeder für sich selbst entscheiden ob ich mit 100% PT und 70 fps leben kann oder ob es doch 120% PT und 73 fps koste es was es wolle sein müssen.



So, wie immer Glückwunsch an die, die es durch den ganzen Textblock da geschafft haben und ebenfalls wie immer: Wenn Fragen offen sind gibt’s da unten ne Kommentarfunktion oder ihr wendet euch einfach (was tendentiell öfter passiert wegen den Blogs) direkt per PN an mich.
 
Moin, ich wollte hier einfach mal ein großes Sammellob an Dich vom Stapel lassen. Ich habe in den letzten Tagen peu-á-peu ungefähr die Hälfte deiner sämtlichen Blogs gelesen und bin von Inhalt, Anspruch und Schweibstil schwer begeistert - und habe wirklich viel praxisrelevantes Wissen erworben. Du hast Dein erklärtes Ziel - die Reduktion von Threads und darin gestellten Fragen - jedenfalls was mich angeht erreicht. Also: Weiter so! :daumen:
 
NVIDIA verbessert also Generation für Generation Powerlimit und Boost. Was hat denn NVIDIA zwischen Pascal und Turing verbessert? Das würde mich an dieser Stelle mal interessieren.
 
Speziell in dem Zusammenhang? Turing verfügt über einen feineren Boostmechanismus als Pascal. Mehr Sensorik, mehr überwachte Größen, feinere Taktabstufungen über die Lastszenarien hinweg. Für den Nutzer gibts dann noch das OC-Tool obendrauf das genau diese Abstufung nochmal automatisiert etwas nach oben schieben kann.

Aber zugegeben - das ist mehr eine kleine Evolution als etwas furchtbar neues, viel hat sich nicht getan. Was aber daran liegt dass erstens der Pascal-Boost schon sehr gut ist und zweitens abgesehen von Hardmods die Schutzmechanismen gegen Hardcore-OCler nicht geknackt wurden (BIOS-Verschlüsselung von Pascal). Aber selbst da hat NV etwas nachgebessert: Wo man bei Pascal die Shunts einfach brücken oder lackieren konnte muss man bei Turingkarten schon nen kleineren Widerstandsbereich treffen damit die Karte den Mod nicht erkennt und in einen Failsafe-Modus geht/nicht mehr hochtaktet. ;)
 
Zurück