Dedizierte Mikrocontroller (MCU) in x86-Prozessoren arbeiten unabhängig von den Prozessorkernen. Die Firmware in diesen MCUs ist dabei auf den jeweiligen Anwendungsfall des Prozessors ausgelegt. So sind beispielsweise für Mobil-Prozessoren die Features für Begrenzung von Taktrate und Stromaufnahme aggressiver ausgelegt, um die Akkulaufzeit zu verbessern. Desktop- und Serverprozessoren, die mit Netzstrom versorgt werden, sind jedoch tendenziell auf maximale Performance ausgerichtet und sparen nur dann Strom, wenn die Performance dadurch nur minimal beeinflusst wird.
Die Wattklasse definieren
Die maximale Leistungsaufnahme für einen Prozessor festzulegen, ist häufig der Ausgangspunkt bei der Definition von Prozessormodellen. Hersteller wählen unterschiedliche Leistungsbereiche, um unterschiedliche Anwendungsfälle mit unterschiedlichen Beschränkungen bei der Leistungsaufnahme abzudecken. Daraus ergibt sich dann auch weitestgehend die mögliche Performance beziehungsweise die Taktrate.
Aktuell werden x86-Prozessoren hauptsächlich über ihre Thermal Design Power (TDP) vermarktet, obwohl es sich um eine Spezifikation handelt, die sich auf die abzuführende Wärmemenge und damit die Kühllösung bezieht und nicht die maximale elektrische Leistung bezeichnet, die der Prozessor verbraucht. In der Realität kann die maximale elektrische Leistungsaufnahme je nach Produkt gleich oder sogar größer als die TDP sein. In diesem Kontext ist im Beitrag also immer die maximale elektrische Leistungsaufnahme eines Prozessors gemeint.
Betriebsabhängige Performance
Der Power-Management-Controller des Prozessors überwacht ständig die wichtigsten Parameter, um sicherzustellen, dass die Prozessorspezifikationen für die maximale Temperatur sowie Leistungs- und Stromaufnahme nicht überschritten werden. Wenn sich aufgrund von Änderungen im Betriebszustand einer dieser Parameter seinem Grenzwert nähert, drosselt der Controller die Performance des Prozessors entsprechend. Diese Drosselung erfolgt in der Regel durch eine Reduzierung der Taktraten der Recheneinheiten (CPU und/oder GPU) mit den größten Leistungsaufnahmen, weil das die größte Wirkung erzielt. Die Taktreduzierung ermöglicht oft auch eine Spannungsreduzierung, was zusätzlich Energie einspart. Eine Verringerung der Leistungsaufnahme reduziert die Temperatur und den Stromverbrauch, sodass der Prozessor innerhalb der Grenzwerte bleibt. Diese Anpassungen können jede Millisekunde erfolgen, um sehr schnell auf Veränderungen im Betriebsumfeld oder sogar in der Auslastung zu reagieren.
Früher konnten x86-Prozessoren nur zwischen diskreten Leistungszuständen wechseln – also zwischen spezifischen Kombinationen von Spannung und Frequenz, unter denen die Cores zuverlässig arbeiteten. Die Sprünge der Taktfrequenz betrugen jedoch mehrere Hundert Megahertz und es war sogar eine Unterbrechung der Berechnungen notwendig, um den Zustand zu wechseln. Neuere x86-Prozessoren ermöglichen hingegen viel feinere Frequenzänderungen. Dies sorgt für eine bessere Effizienz und – zumindest in den aktuellen AMD-Ryzen-Prozessoren – für eine ununterbrochene Rechenperformance.
Leistungshungrige Workloads
Eck-Daten
Aktuelle x86-Embedded-Prozessoren verfügen für das Power-Management über einen integrierten, dedizierten Mikrocontroller. In diesem zweiten Teil zum Thema Power-Management für Embedded-Prozessoren (Teil 1 mit den Grundlagen auf Transistorebene finden Sie auf all-electronics.de unter Info-Direkt 802ei0319), beschreibt AMD am Beispiel der Epyc- und Ryzen-Prozessorfamilien, was diese MCU konkret leistet. So lassen sich zum Beispiel Varianzen der Prozessorkerne gezielt nutzen, um die Leistung des Embedded-Prozessors zu optimieren und es kommen externe Daten zur Maximierung der Performance zum Einsatz – eine Neuheit bei AMD-Prozessoren.
Da der Stromverbrauch aber je nach Workload variiert, ist auch klar, dass ein Core nicht immer seine maximale Taktrate erreichen kann. Was geschieht also, wenn ein sehr leistungshungriger Workload auf einem CPU-Core bei maximaler Taktrate läuft und der Core seine Leistungsgrenze überschreitet? Und was, wenn ein solcher Workload auf mehreren Cores ausgeführt wird, sodass das Limit noch weiter überschritten wird? Auch kann zeitgleich plötzlich auf der integrierten GPU ein Grafik-Workload auftreten. In diesen Fällen bleibt dem Power-Management-Controller wirklich nichts anderes übrig, als den Arbeitstakt zu senken, um die Leistungs- und Stromgrenzen einzuhalten.
Viele Systementwickler gehen allerdings fälschlicherweise davon aus, dass Prozessorhersteller ihre Produkte so konfigurieren, dass die Cores ihre maximale Taktrate bei jedem Workload und in allen Konfigurationen beibehalten können. Das ist aber definitiv nicht der Fall. Dies würde nämlich bedeuten, dass Prozessorhersteller kontinuierlich nach dem Worst-Case-Workload, also dem Workload mit dem größten Leistungsverbrauch suchen müssten. Dann wäre es notwendig, dessen Stromverbrauch für die jeweilige Prozessor-Architektur zu charakterisieren und die maximale Taktrate für jeden Prozessor so niedrig einstellen, dass dieser Workload auf allen Modellen, einschließlich aller Produktvarianzen, sicher betreibbar ist.
Dieses Festfrequenzmodell wird von den meisten x86-Prozessoren im PC- und Embedded-Bereich aber nicht mehr angeboten. Selbst wenn die Tatsache außer Acht bleibt, dass sich ein Worst-Case-Workload im Laufe der Zeit immer wieder ändert, wäre dies in der Realität extrem limitierend und würde den Arbeitstakt einer CPU auf einen Bruchteil ihres Potenzials beschränken, vor allem aufgrund der breiten Streuung der Leistungsaufnahme durch unterschiedliche Workloads. Dies hätte zur Folge, dass selbst weniger leistungshungrige Workloads mit geringerer Leistungsaufnahme auf diesen niedrigeren Arbeitstakt beschränkt blieben, selbst wenn der Prozessor sie mit viel höherem Takt sicher ausführen könnte. Es würde also lediglich eine künstliche Leistungsbegrenzung geschaffen. Der bessere Ansatz für aktuelle Mehrzweck-Prozessoren besteht also darin, die für den jeweiligen Chip größtmögliche Taktrate zu definieren und es dem Power-Management-Controller zu überlassen, in Echtzeit für das jeweilige Betriebsszenario die bestmögliche Performance dynamisch bereitzustellen.
Schnittstellen einbeziehen
Entwickler müssen zudem wissen, dass zu einem Betriebszustand nicht nur die Workloads – also die dedizierten Befehlssequenzen für die Rechenkerne – sondern auch das Timing und die Nutzung der integrierten Peripheriefunktionen und I/Os zählen. Beim hohen Integrationsgrad aktueller Prozessoren darf der Stromverbrauch der I/Os nicht unter den Tisch fallen. Das beinhaltet also auch die Leistungsaufnahme der I/O-Schnittstellen sowie die über die physikalischen I/O-Pins abgegebene Leistung. Zu den I/Os in heutigen Prozessoren zählen beispielsweise Schnittstellen zum Arbeitsspeicher, Serial-ATA, Ethernet, PCI Express, Audio und USB, die auch alle Strom verbrauchen. Die Leistungsaufnahme der I/Os ist dabei hauptsächlich abhängig von der Systemkonfiguration und dem Nutzungsmodell. So integriert beispielsweise ein Netzwerk-Gateway keine SATA-Festplatten, während ein NAS-System (Network Attached Storage) viele Festplatten nutzt. Zudem wird in einem NAS viel Ethernet-Aktivität stattfinden und damit in dieser Logik auch ein hoher Stromverbrauch anfallen, während eine Maschinensteuerung an dieser Stelle – zumindest ohne Industrie-4.0-Interfaces – sehr geringen Stromverbrauch aufweisen kann. Auch die elektrische Leistung der I/Os steht den Recheneinheiten nicht zur Verfügung. Damit können also auch Änderungen in der Peripherie-Konfiguration und -nutzung die erzielbare Rechenleistung beeinträchtigen. Deshalb müssen auch die Systemkonfiguration und die I/O-Nutzung in die Betrachtung des Betriebszustands mit einfließen.
Varianzen ausnutzen
Im Ergebnis liefert ein leistungsbegrenztes Modell gegenüber einem Festfrequenz-Modell maximale Performance für jede Arbeitslast. Allerdings lässt sich dadurch der CPU-Takt bei geänderten Workloads nicht mehr vorhersagen. Bei jedem Szenario, in dem der Workload durch Erreichen der Temperatur- oder Leistungsaufnahmegrenzen gedrosselt wird, lässt sich die Performance gegenüber dem Festfrequenz-Modell herabsetzen. Systementwickler können eine Temperatur-Drosselung verhindern, indem sie die Kühllösung mit genügend Reserve auslegen, sodass die Maximaltemperatur niemals erreicht wird. Letztendlich ist für den Entwickler des OEMs nämlich die maximale Dauerleistung in der Regel eine bekannte Größe und sowohl der Luftstrom also auch die maximale Umgebungstemperatur ist ebenfalls für das Endsystem zu definieren.
Um einer Leistungsdrosselung in allen Prozessoren einer Baureihe mit den oben erwähnten Bauteilvarianzen zu begegnen, gestalten sich die einzuleitenden Maßnahmen schon schwieriger. Zwei Prozessoren derselben Baureihe können andere Leckströme aufweisen, sodass ein Prozessor bereits bei einer niedrigeren durchschnittlichen Frequenz die Leistungsgrenze erreicht, obwohl er denselben Workload bei denselben Betriebsbedingungen ausführt. Die Anbieter nutzen solche Unterschiede gerne für mehr Performance, indem sie den Recheneinheiten mit geringeren Leckströmen mehr Rechenzeit bei höheren Frequenzen erlauben. Zudem können die einzelnen Prozessoreinheiten auch unterschiedliche Spannungen benötigen, um eine gegebene Frequenz zu erreichen. Auch diese Unterschiede kann das Power-Management nutzen, indem es für jede Prozessoreinheit spezifische Spannungs-Frequenz-Kennlinien definiert, sodass sich die Core-Spannung individuell minimieren lässt. Durch diese Reduzierung auf die Wirkleistung können die betroffenen Prozessoreinheiten ihren durchschnittlichen Arbeitstakt erhöhen, bevor sie ihre Leistungsgrenze erreichen. Allerdings benötigen Einheiten mit geringeren Leckströmen höhere Spannungen, um dieselbe Frequenz zu erreichen, sodass sich diese beiden Faktoren glücklicherweise gegenseitig aufheben, anstatt sich aufzuaddieren. Trotzdem kann sich die verbrauchte Leistung unterscheiden.
Peak-Leistung optimieren
In der Realität ist es jedoch oft nicht der Fall, dass ein Prozessor ständig beschäftigt ist. Häufig wartet eine Applikation untätig auf eine Nutzereingabe, verfällt dann in plötzliche Aktivität, um anschließend wieder auf Eingaben zu warten. Dies ist der Fall, wenn der Nutzer ein Programm startet oder eine Webseite aufruft. Solche Perioden der Inaktivität gehen natürlich mit einer geringen Leistungsaufnahme und niedrigen Die-Temperatur einher. Einige Prozessoren können dies ausnutzen, indem sie eine maximale Leistungsaufnahme definieren, die über dem Limit der Dauerleistung liegt. In diesem Fall darf der Prozessor für einen kurzen, thermisch unbedenklichen Zeitraum eine höhere Leistungsaufnahme erreichen. Thermische Lösungen weisen in der Regel eine recht hohe thermische Trägheit auf, sodass es eine Weile dauert, bis der Prozessor einen höheren stabilen Temperaturwert erreicht. Dieses Vorgehen ermöglicht kurze Perioden erhöhter Performance, was vorteilhaft bei Spitzenbelastung ist, allerdings zu Lasten des Performance-Determinismus geht. Dies ist ein weiterer Mechanismus, der sich auf die Performance auswirkt und Workloads müssen möglicherweise mehrere Minuten laufen, bis sie ein stabiles Verhalten erreichen.
Externe Daten nutzen
Da die Begrenzung der Prozessorperformance auf vielen Wegen letztlich über die Begrenzung Leistungsaufnahme bewerkstelligt wird, ist es entscheidend, die Leistungsaufnahme exakt zu bestimmen, um eine maximale Performance zu ermöglichen. Die Messung der Leistungsaufnahme eines Prozessors würde hierfür jedoch eine präzise Strommessung in Echtzeit erfordern, die in Hochgeschwindigkeits-Digitalprozessoren jedoch nicht integriert werden kann.
Bis vor kurzem basierte die Power-Management-Technologie deshalb auf statischen Leistungskurven, die aus Leistungsmessungen auf Basis eines Referenz-Workloads während der Fertigung abgeleitet wurden. Diese Werte wurden in den Prozessor programmiert und mit den Laufzeitdaten komplexer Aktivitätsmonitore in der Logik kombiniert. Management-Algorithmen berechneten hierbei die Leistungsaufnahme, um die Einhaltung der Grenzwerte sicherzustellen. Diese Methode erlaubte zwar gewisse Bauteilvarianzen, erforderte aber dennoch einen moderaten Sicherheitspuffer, um Ungenauigkeiten der Aktivitätsmonitore für die Schätzung der Leistungsaufnahme zu kompensieren. Solche konservativen Schätzungen der Leistungsaufnahme nutzen den Performance-Spielraum aber nicht aus.
Eine Neuheit bei AMD-Prozessoren ist deshalb die Nutzung externer Daten für die Leistungsaufnahme. Sie stammen von den Spannungsreglern für die primären Spannungs-Rails. Echtzeit Spannungs- und Stromdaten erlauben es dem Power-Management, die Gesamtleistungsaufnahme viel exakter zu bestimmen. Auf diese Weise kann jede Bauteilvarianz mit Einfluss auf die Leistungsaufnahme zusammen mit den aktuellen Umgebungsbedingungen – wie beispielsweise der Temperatur – berücksichtigt und zur Leistungssteigerung genutzt werden, was letztlich zu einer optimierten Performance und einem zuverlässigen Betrieb der eingesetzten Prozessorachitektur führt.
Die Prozessoren im Detail
Die Pure-Power-Technologie der Embedded-Prozessoren der Ryzen-Serie (Bilder 1 und 2) nutzt mehr als 100 integrierte Sensoren zur Überwachung der CPU-Temperaturen, Ressourcennutzung und Stromverbrauch, um die Spannungen, Taktraten und Betriebsmodi jeder einzelnen Komponente optimal auf die jeweiligen Leistungsanforderungen einzupegeln. Damit lassen sich nicht benötigte Elemente abschalten, um Energieverbrauch und Wärmeentwicklung zu reduzieren. Sie wird von der Precision-Boost-Technologie unterstützt. Diese erhöht die Prozessorfrequenzen für eine beliebige Anzahl von Kernen und sorgt so für eine höhere Peak-Performance bei Leistungsspitzen. Stehen dem Prozessor ausreichend thermische Reserven zur Verfügung, kann er damit die Taktrate für jede einzelne Anwendung in präzisen 25 MHz Schritten erhöhen – selbst über den nominalen Höchsttakt hinaus.
Obwohl der AMD-Epyc-Embedded-3000-Prozessor (Bild 3) als leistungsstarker Server-Prozessor mit bis zu 16 Cores, 64 PCIe-Lanes und 8 × 10-Gbit/s-Ethernet ausgelegt und für Edge-und Fog-Server gedacht ist, bietet er in der Embedded-Version auch Power-Management-Funktionen, um den Leistungsbedarf zu optimieren. Hier ist die Betrachtung der I/Os natürlich für die Gesamt-Leistungsaufnahme besonders wichtig.
Teil 1 zum Thema Power Management für Embedded Prozessoren finden Sie hier.
Der Beitrag beruht auf Unterlagen von AMD.
(na)