Component-Level Leistungszustandsverwaltung
Ab Windows 10 ermöglicht das Power Management Framework (PoFx) einem Treiber, einen oder mehrere Gruppen von individuell anpassbaren Leistungszuständen für einzelne Komponenten innerhalb eines Geräts zu definieren. Der Treiber kann Leistungszustände verwenden, um die Workload einer Komponente zu drosseln, um gerade genug Leistung für die aktuellen Anforderungen bereitzustellen.
Übersicht über Leistungszustände
In Windows 8 und Windows 8.1 stellt PoFx Leerlaufzustände (F-Zustände) für Energieeinsparungen auf Komponentenebene durch Strom- und Taktschienen-Gating bereit, wenn ein bestimmter F-Zustand eingegeben wird. Dieses Modell spart Energie, wenn sich eine Komponente in einem Leerlaufzustand (nicht F0) befindet, bietet jedoch keinen Mechanismus zum Optimieren des Energieverbrauchs oder zum Ausgleich der Leistungsanforderungen, wenn die Komponente aktiv ist. Obwohl eine Komponente aktiv (in F0) ist und eine Anforderung verarbeitet, erfordert sie möglicherweise nicht die volle Leistung des Geräts. Beispielsweise muss ein Grafik-Karte möglicherweise nur einen blinkenden Cursor aktualisieren, was möglicherweise nicht die volle Leistung benötigt.
Variable Leistungszustände beheben dieses Problem, indem der Treiber die Komponente eines Geräts drosseln kann, um gerade genug Leistung für seine aktuellen Anforderungen bereitzustellen. In Windows 8 und Windows 8.1 muss jeder Treiber, wenn eine Komponente Leistungszustände unterstützt, einen proprietären, treiberinternen Leistungszustandsauswahlalgorithmus implementieren und bei Bedarf das Plattformerweiterungs-Plug-In (PEP) auf proprietäre Weise benachrichtigen. Pep ist eine Softwarekomponente, die Energieverwaltungsaufgaben ausführt, die für eine bestimmte Produktlinie von Prozessor- oder SoC-Modulen (System on a Chip) spezifisch sind. Treiberspezifische proprietäre Leistungszustandslösungen haben den Nachteil, dass sie eng mit pep gekoppelt sind und können nicht einfach debuggt werden.
Ab Windows 10 stellt PoFx eine API für die Leistungszustandsverwaltung bereit. Diese API hat zwei Standard Ziele:
- Es bietet eine Standardmethode für Gerätetreiber, den PEP über Leistungszustandsänderungen zu benachrichtigen, damit der PEP die entsprechenden Maßnahmen ergreifen kann.
- Es bietet eine Standardmethode für Treiber, das Betriebssystem über Leistungszustandsänderungen für die Protokollierung und Analyse in Windows Leistungsanalyse (WPA) zu benachrichtigen, ohne ein benutzerdefiniertes Plug-In für jeden Treiber zu benötigen.
Einführung in die PoFX-API für Component-Level Leistungszustände
PoFx ermöglicht es einem Gerät, die folgenden Arten von Leistungszuständen für jede Komponente zu definieren:
- Eine diskrete Anzahl von Zuständen in den Frequenzeinheiten (gemessen in Hz), Bandbreite (gemessen in Bits pro Sekunde) oder eine undurchsichtige Indexnummer.
- Eine kontinuierliche Verteilung der Zustände zwischen einem minimalen und einem maximalen Wert.
Leistungszustände sind in Mengen organisiert und werden komponentenweise registriert. Die Leistungszustände innerhalb eines Satzes müssen monoton erhöht werden. Von den meisten Treibern wird erwartet, dass sie einen einzelnen Satz von Leistungszuständen pro Komponente definieren. Beispielsweise kann ein Treiber einen Satz von Leistungszuständen definieren, um die Taktfrequenz für eine Komponente zu steuern. Einige Treiber müssen jedoch möglicherweise mehrere Leistungszustandssätze definieren, um mehrere Dimensionen von Leistungszuständen für eine Komponente zu steuern. Beispielsweise kann ein Treiber zwei Sätze von Leistungszuständen definieren, um die Taktfrequenz und die Busbandbreite zu steuern.
Um eine Gerätekomponente für die Leistungszustandsverwaltung von PoFx zu registrieren, führt ein Treiber die folgenden allgemeinen Schritte aus:
Der Treiber registriert die Gerätekomponenten, die von PoFx verwaltet werden sollen. Weitere Informationen finden Sie unter Energieverwaltung auf Komponentenebene.
Der Treiber registriert die Unterstützung für Leistungszustände, indem er PoFxRegisterComponentPerfStates aufruft. Im Rahmen des Registrierungsaufrufs können Treiber entweder den Leistungszustand einer bestimmten Komponente selbst definieren oder an das Plattformerweiterungs-Plug-In (PEP) zurückstellen, um sie stattdessen zu definieren.
Entweder der Gerätetreiber oder der PEP muss Über Kenntnisse über die Leistungszustände verfügen, einschließlich der Anzahl der Leistungszustandssätze pro Komponente, des Typs des Leistungszustands (diskret oder bereichsbasiert) sowie der Details zu den Werten und der Anzahl der tatsächlichen Leistungszustände. Wenn pep keine Leistungszustände unterstützt, kann sich der Treiber weiterhin für die Unterstützung des Leistungszustands bei PoFx registrieren und das Betriebssystem über Leistungszustandsänderungen für die Protokollierung und Analyse in Windows Leistungsanalyse (WPA) benachrichtigen.
In beiden Fällen verfügt der Treiber nach erfolgreichem Abschluss von PoFxRegisterComponentPerfStates über eine PO_FX_COMPONENT_PERF_INFO-Struktur , die die registrierten Leistungsstatussätze enthält.
Wenn der Treiber entscheidet, dass eine Komponente den Leistungsstatus ändern soll, ruft er PoFxIssueComponentPerfStateChange oder PoFxIssueComponentPerfStateChangeMultiple auf. PoFx ruft die vom Treiber bereitgestellte ComponentPerfStateCallback-Routine auf, wenn die Leistungszustandsänderung abgeschlossen ist.
Der Treiber wird von der ComponentPerfStateCallback-Routine darüber informiert, ob pep die Änderung des Leistungszustands erfolgreich war oder verweigert hat. Wenn pep die Änderung erfolgreich war, führt der Treiber alle Aufgaben aus, die er ausführen muss, um den Leistungszustand aus seiner Perspektive zu ändern. Wenn pep die Änderung verweigert hat, kann der Treiber entscheiden, nichts zu tun oder die Anforderung mit demselben oder einem alternativen Leistungszustand erneut zu versuchen.