Freigeben über


NVMe

In diesem Abschnitt wird erläutert, wie der In-Box NVMe-Treiber (StorNVMe) von Microsoft Energie verwaltet und welche Konfigurationsoptionen verfügbar sind. Mit der NVMe-Spezifikation können NVMe-Geräte bis zu 32 Leistungszustände melden. Jeder Energiezustand weist die folgenden Parameter auf:

  • Maximaler Stromverbrauch (MP)
  • Betriebsfähig oder nicht betriebsfähig
  • Eingabelatenz (ENLAT)
  • Ausstiegslatenz (EXLAT)
  • Relative Leistungswerte (relativ zu anderen Leistungszuständen)

StorNVMe ordnet Betriebsleistungszustände (das Gerät kann E/A in diesen Zuständen verarbeiten) zu logischen Leistungszuständen (a.k.a. P-States) zu. Ebenso ordnet der Treiber nicht betriebsbereite Leistungszustände (das Gerät behandelt E/A in diesen Zuständen nicht) logischen Leerlauf-Leistungszuständen (a.k.a. F-Zustände) zu. Mit StorNVMe wird der Übergang zu diesen Zuständen weitgehend vom Gesamtsystemstromzustand bestimmt. Die NVMe-Spezifikation definiert ein ApST-Feature (Autonomous Power State Transition). Für die Unterstützung des modernen Standbymodus unterstützt StorNVMe keine Geräte mit aktivierter APST.For Modern Standby support, StorNVMe does not support devices with APST enabled.

Energieverwaltungsmodi des Geräts

StorNVMe kann sich entscheiden, das Gerät in einen F-Zustand zu übertragen, nachdem eine bestimmte Zeit im Leerlauf abgelaufen ist. Der F-Staat wird basierend auf 3 Faktoren ausgewählt:

  1. Latenztoleranz, wie schnell das Gerät bei Bedarf reagieren kann. Bei F1 sollte die TransitionLatency (ENLAT + EXLAT) nicht größer als die Primäre Übergangslatenztoleranz sein. Bei F2 und anderen tieferen F-Zuständen (falls vorhanden) sollte ihre TransitionLatency nicht größer als die Toleranz der sekundären Übergangslatenz sein. Andernfalls kann das Gerät möglicherweise nicht zu diesen F-Zuständen wechseln, und der moderne Standby-Übergang kann beeinträchtigt werden (z. B. führen Sie lange Wartezeiten ein, um DRIPS einzugeben).
  2. Leerlauftimeout. Dies ist der Zeitraum, ab dem das Gerät seinen letzten E/A-Vorgang abgeschlossen hat.
  3. System-Energiezustand. Wenn das System aktiv verwendet wird, bevorzugt StorNVMe die Reaktionsfähigkeit. Dies bedeutet, dass unterschiedliche Latenztoleranzen und Timeouts verwendet werden.

Die Tabelle enthält die standardmäßigen Leerlauftimeouts und Latenztoleranzen, die von StorNVMe verwendet werden. Informationen zum Ändern dieser Einstellungen finden Sie im Abschnitt " Power Configuration Settings ".

ACPI-System-Energiestatus Primärer Leerlauf-Timeout Primäre Übergangslatenztoleranz Sekundäres Leerlauf-Timeout Toleranz für sekundäre Übergangsverzögerung
S0 (Working) - Leistungsschema 200 ms 0 ms (AC) / 10 ms (DC) 2000ms 0 ms
S0 (Arbeit) - Ausgewogenes Schema 200 ms (AC) / 100 ms (DC) 15 ms (AC) / 50 ms (DC) 2000 ms (AC) / 1000 ms (DC) 100 ms
S0 (Working) – Energiesparplan 100 ms 100 ms (AC) / 200 ms (DC) 1000 ms 200 ms
S0 Low Power Idle (Modern Standby) 50 ms 500 ms Nicht verfügbar Nicht verfügbar

Sobald das Leerlauftimeout abgelaufen ist, durchläuft der Treiber seine interne Tabelle mit Leistungszuständen und wählt den tiefsten Leistungszustand aus, in dem ENLAT+EXLAT kleiner oder gleich der aktuellen Übergangslatenztoleranz ist.

Gehen Sie beispielsweise davon aus, dass ein NVMe-Gerät die folgenden Energiezustände aufweist und dass ein Leerlauftimeout aufgetreten ist:

Energiezustand Eingabelatenz (ENLAT) Ausstiegslatenz (EXLAT)
PS0 5us 5us
PS1 10 ms 300us
PS2 50 ms 10 ms

Wenn das System über DC-Stromversorgung läuft und sich nicht im Modern Standby-Modus befindet, wählt StorNVMe PS1 aus, da dies der tiefste Energiezustand ist, bei dem (ENLAT+EXLAT) <= 50 ms. Ebenso wählt StorNVMe, wenn das System modern Standby eingibt, PS2 aus, da es sich um den tiefsten Leistungszustand handelt, in dem (ENLAT+EXLAT) <= 500Ms vorhanden ist.

Moderner Standbymodus und DRIPS

Um Modern Standby vollständig zu unterstützen, überführt StorNVMe das Gerät in einen geeigneten niedrigen Energieverbrauchszustand, abhängig von den von der Hardwareplattform bereitgestellten Hinweisen. Der Leerlaufzustand variiert zwischen einem F-Zustand (tiefer als F0), bis D3 Cold. Einige Plattformen erfordern D3 Cold bei modern Standby. Dies hängt vom SoC ab. Bitte wenden Sie sich an Ihren Siliziumanbieter, um weitere Informationen zu finden. D3-Unterstützung für Speichergeräte auf modernen Standby-Systemen kann wie hier beschrieben aktiviert werden.

Geräte sollten RTD3 mit kurzer Wiederaufnahmeverzögerung unterstützen, damit Modern Standby-Systeme die Anforderung von 1 Sekunde Systemlatenz erfüllen können. RTD3 Resume Latency (RTD3R) bezieht sich auf die Fortsetzungslatenz von D3cold und wird empfohlen, einen nichtzero-Wert ≤ 100 ms zu melden. RTD3R wird in Abschnitt 8.4.4 der NVMe-Spezifikation beschrieben.

Konfigurationseinstellungen

Windows 10 unterstützt die folgenden NVMe-Energieeinstellungen, um die Energieeffizienz zu optimieren.

Primäre NVMe-Idle-Timeout

Mit der folgenden Einstellung für die Stromversorgungskonfiguration können Sie das für das primäre Gerät von StorNVMe verwendete Leerlauf-Timeout ändern.

Power Setting GUID: d639518a-e56d-4345-8af2-b9f32fb26109  (Primary NVMe Idle Timeout)
      Minimum Possible Setting: 0x00000000
      Maximum Possible Setting: 0x0000ea60
      Possible Settings increment: 0x00000001
      Possible Settings units: milliseconds

Mit der folgenden Einstellung für die Energiekonfiguration können Sie den primären Toleranzwert der Übergangslatenz ändern, den StorNVMe beim Berechnen eines Leerlaufzustands verwendet. Dies ist der Wert, der mit der Summe der Werte ENLAT und EXLAT verglichen wird, wenn das Leerlauftimeout abläuft. Je höher dieser Wert ist, desto wahrscheinlicher wird ein tieferer Machtzustand gewählt.

Power Setting GUID: fc95af4d-40e7-4b6d-835a-56d131dbc80e  (Primary NVMe Power State Transition Latency Tolerance)
      Minimum Possible Setting: 0x00000000
      Maximum Possible Setting: 0x0000ea60
      Possible Settings increment: 0x00000001
      Possible Settings units: milliseconds

Sekundäres NVMe-Idle-Timeout

Mit der folgenden Einstellung für die Energiekonfiguration können Sie das von StorNVMe verwendete Zeitlimit für sekundäre Geräte im Leerlauf ändern.

Power Setting GUID: d3d55efd-c1ff-424e-9dc3-441be7833010  (Secondary NVMe Idle Timeout)
      Minimum Possible Setting: 0x00000000
      Maximum Possible Setting: 0x0000ea60
      Possible Settings increment: 0x00000001
      Possible Settings units: milliseconds

Mit der folgenden Einstellung für die Energiekonfiguration können Sie den Toleranzwert der sekundären Übergangslatenz ändern, den StorNVMe beim Berechnen eines Leerlaufzustands verwendet. Dies ist der Wert, der mit der Summe der Werte ENLAT und EXLAT verglichen wird, wenn das Leerlauftimeout abläuft. Je höher dieser Wert ist, desto wahrscheinlicher wird ein tieferer Machtzustand gewählt.

Power Setting GUID: dbc9e238-6de9-49e3-92cd-8c2b4946b472  (Secondary NVMe Power State Transition Latency Tolerance)
      Minimum Possible Setting: 0x00000000
      Maximum Possible Setting: 0x0000ea60
      Possible Settings increment: 0x00000001
      Possible Settings units: milliseconds

Um den Wert für ein bestimmtes Energieschema zu ändern, verwenden Sie Folgendes:

powercfg [-setacvalueindex | -setdcvalueindex] <scheme> sub_disk <Power Setting GUID> <milliseconds>

Vergessen Sie nicht, den Wert anzuwenden, indem Sie Folgendes verwenden: powercfg –setactive <scheme>

PCIe ASPM- und L1-Unterzustände

Je nach Plattform können Sie feststellen, dass das NVMe-Gerät bei Gleichstrom in L1-Unterzustände wechseln kann, aber nicht bei Wechselstrom. In diesem Fall müssen Sie möglicherweise die Einstellung der PCIe ASPM-Energiekonfiguration so ändern, dass sie maximale Energieeinsparungen beim Netzstrom erhält (zusätzlich zur Dc-Leistung).

Power Setting GUID: ee12f906-d277-404b-b6da-e5fa1a576df5  (Link State Power Management)
      GUID Alias: ASPM
      Possible Setting Index: 000
      Possible Setting Friendly Name: Off
      Possible Setting Index: 001
      Possible Setting Friendly Name: Moderate power savings
      Possible Setting Index: 002
      Possible Setting Friendly Name: Maximum power savings

Um den Wert zu ändern, verwenden Sie Folgendes:

powercfg -setacvalueindex <scheme> sub_pciexpress aspm <value>

mit Index 002 von oben für maximale Stromeinsparungen. Vergessen Sie nicht, den Wert anzuwenden, indem Sie Folgendes verwenden: powercfg –setactive <scheme>

Aktive Energieverwaltung

Aktive Energieverwaltung umfasst "P-States" (a.k.a. Performance- oder "perf"-Zustände) und ist in erster Linie für die thermische Steuerung vorgesehen. StorNVMe ordnet die Betriebsleistungszustände des Geräts logischen P-Zuständen zu, wobei der für jeden Betriebsbetriebszustand gemeldete Maximalstromwert verwendet wird. Wenn das Gerät aktiv ist (d. h. ausstehende E/A hat), wechselt StorNVMe das Gerät über einen P-State-Übergang in einen seiner Betriebszustände.

Während der Windows 10-Entwicklung gab es eine begrenzte Anzahl von NVMe-Geräten, die mehrere Betriebsleistungszustände implementiert haben. Basierend auf unseren Leistungs- und Stromverbrauchsmessungen fanden wir keinen erheblichen Nutzen für die Nutzung eines anderen als des höchsten Betriebsleistungszustands. Daher wird bei der Standardkonfiguration nur der höchste Betriebsleistungszustand verwendet.

Der gewählte Betriebsleistungszustand hängt von dem aktuellen Hinweis „maximale Betriebsleistung“ ab. Dieser Hinweis kann 3 verschiedene Quellen haben:

  • Ein Rückruf für passive Kühlung vom Windows Thermal Framework.
  • Eine Änderung des Konfigurationseinstellungswerts für die maximale Leistungsstufe. (Dies kann durch eine Änderung des Systemstromschemas oder der Netzstromquelle ausgelöst werden.)
  • Eine IOCTL_STORAGE_DEVICE_POWER_CAP Anforderung. Der niedrigste Höchstwert aus diesen Quellen ist der effektive maximale Betriebsleistungswert. Die Mechanik jeder dieser Quellen wird weiter unten erläutert.

Im Allgemeinen wählt StorNVMe den höchsten Betriebsleistungszustand aus, der kleiner oder gleich dem effektiven maximalen Betriebsleistungswert ist.

Angenommen, ein NVMe-Gerät hat die folgenden Leistungszustände:

Energiezustand Max. Leistung Betrieblich?
PS0 9W Ja
PS1 6W Ja
PS2 4W Ja

Der niedrigste Höchstwert aus diesen Quellen ist der effektive maximale Betriebsleistungswert. Die Mechanik jeder dieser Quellen wird weiter unten erläutert.

Im Allgemeinen wählt StorNVMe den höchsten Betriebsleistungszustand aus, der kleiner oder gleich dem effektiven maximalen Betriebsleistungswert ist.

Standardmäßig gibt es keinen maximalen Leistungspegel, daher wählt StorNVMe immer PS0 aus. Dies entspricht 100%.

Wenn das Windows Thermal Framework den passiven Kühlrückruf mit dem Wert 50% aufruft, führt dies zu einem absoluten Leistungswert von (50% * (9W – 4W)) + 4W = 6W. StorNVMe stellt dann sicher, dass das Gerät, wenn es aktiv ist, immer in PS1 vorhanden ist, da der Max Power-Wert dieses Zustands 6W ist.

Anschließend sendet ein Benutzermodusprozess eine IOCTL_STORAGE_DEVICE_POWER_CAP Anforderung an den Datenträger mit dem Wert 5W. StorNVMe wählt jetzt PS2 aus, da es sich um den höchsten Betriebsleistungszustand handelt, dessen Max.-Leistungswert (4W) kleiner als der maximale Betriebsstrombedarf von 5W ist.

Wenn der angegebene maximale Betriebsstrombedarf kleiner als der Max Power-Wert des niedrigsten Betriebsleistungszustands ist, besteht die Erwartung darin, einfach den niedrigsten Betriebsstromzustand auszuwählen. In unserem Beispiel würde StorNVMe, wenn die angegebene maximale Betriebsleistung 3W war, PS2 auswählen, da sie keinen Betriebsleistungszustand mit einem Max Power-Wert von 3W oder weniger aufweist.

Wenn sich später die maximale Betriebsleistung in 9W ändert, wechselt StorNVMe zurück zur Auswahl von PS0, wenn das Gerät aktiv ist.

Angenommen, ein NVMe-Gerät hat die folgenden Leistungszustände:

Windows Thermal Framework Passive Cooling Callback

StorNVMe (via Storport) registriert eine thermische Kühlungsschnittstelle im Windows Thermal Framework, die es dem System ermöglicht, das NVMe-Gerät über dieses Framework zu drosseln. Die Besonderheiten dieses Dokuments liegen außerhalb des Umfangs dieses Dokuments, aber im Allgemeinen gibt die Plattform thermische Zonen und Schwellenwerte über ACPI an, die das Windows Thermal Framework dann verwendet, um Geräte über Rückrufe an die Treiber der Geräte zu drosseln.

Maximale Betriebsleistung Leistungskonfigurationseinstellung

Die folgende Einstellung für die Energiekonfiguration kann verwendet werden, um das maximale Betriebsleistungsniveau für verschiedene Systemstromschemas und AC/DC-Stromquelle zu ändern.

Power Setting GUID: 51dea550-bb38-4bc4-991b-eacf37be5ec8  (Maximum Power Level)
      GUID Alias: DISKMAXPOWER
      Minimum Possible Setting: 0x00000000
      Maximum Possible Setting: 0x00000064
      Possible Settings increment: 0x00000001
      Possible Settings units: %

Um den Wert für ein bestimmtes Energieschema zu ändern, verwenden Sie Folgendes:

powercfg [-setacvalueindex | -setdcvalueindex] <scheme> sub_disk 51dea550-bb38-4bc4-991b-eacf37be5ec8 <value>

Vergessen Sie nicht, den Wert anzuwenden, indem Sie: powercfg –setactive <scheme> verwenden.

IOCTL_STORAGE_DEVICE_POWER_CAP

Diese IOCTL kann an ein Speichergerät gesendet werden, um das maximale Betriebsleistungsniveau zu ändern. Weitere Informationen finden Sie in der Dokumentation zum Eingabe-/Ausgabepuffer STORAGE_DEVICE_POWER_CAP.

Herunterfahren/Ruhezustand

Wenn das System heruntergefahren oder in den Ruhezustand versetzt wird, setzt StorNVMe das Feld Shutdown Notification (CC.SHN) des Geräts auf 1. StorNVMe wartet dann auf die gemeldete RTD3-Eintragslatenz des Geräts, damit das Gerät anzeigt, dass es bereit ist (durch Aktualisieren des Felds Shutdown Status (CSTS.SHST) auf 2). Wenn kein Eintragslatenzwert gemeldet wird, verwendet StorNVMe einen Standardwert von 5 Sekunden. Im diesem Fall, wenn das Gerät länger als 5 Sekunden benötigt, um zu reagieren, setzt das System die Abschalt- oder Ruhemodus-Prozedur ohne weitere Überprüfung des NVMe-Geräts fort. OEMs sollten nur Geräte verwenden, die RTD3-Eintrags- und Ausgangswerte für moderne Standby-Systeme melden.