Compartir a través de


NVMe

En esta sección se detalla cómo el controlador NVMe (StorNVMe) de Microsoft administra la energía y qué opciones de configuración están disponibles. La especificación NVMe permite que los dispositivos NVMe notifiquen hasta 32 estados de alimentación. Cada estado de energía tiene los parámetros siguientes:

  • Consumo máximo de energía (MP)
  • Operativo o no operativo
  • Latencia de entrada (ENLAT)
  • Latencia de salida (EXLAT)
  • Valores de rendimiento relativos (relativos a otros estados de energía)

StorNVMe asigna estados de energía operativa (el dispositivo puede controlar la E/S en estos estados) a estados de rendimiento lógicos (a.k.a. P-States). Del mismo modo, el controlador asigna estados de energía no operativos (el dispositivo no controla la E/S en estos estados) a estados de energía inactiva lógica (a.k.a. F-States). Con StorNVMe, las transiciones a estos estados se determinan en gran medida por el estado general de energía del sistema. La especificación NVMe define una característica de transición de estado de energía autónoma (APST). Para la compatibilidad con el modo de espera moderno, StorNVMe no admite dispositivos con APST habilitado.

Administración de energía de dispositivos en tiempo de ejecución

StorNVMe puede optar por realizar la transición del dispositivo a un estado F después de que haya transcurrido una cierta cantidad de tiempo de inactividad. El estado F se elige en función de tres factores:

  1. Tolerancia de latencia, que es la rapidez con la que el dispositivo puede responder si es necesario. Para F1, transitionLatency (ENLAT + EXLAT) no debe ser mayor que la tolerancia de latencia de transición principal. En el caso de F2 y otros estados F más profundos (si existe), su TransitionLatency no debe ser mayor que la tolerancia de latencia de transición secundaria. De lo contrario, es posible que el dispositivo no pueda realizar la transición a estos estados F y la transición moderna en espera podría verse afectada (por ejemplo, introducir una latencia larga para entrar en DRIPS).
  2. Tiempo de espera de inactividad. Esta es la cantidad de tiempo desde que el dispositivo completó su última operación de E/S.
  3. Estado de alimentación del sistema. Si el sistema está en uso activo, StorNVMe preferirá la capacidad de respuesta. Esto implica que se usarán distintas tolerancias de latencia y tiempos de espera.

En la tabla se muestran los tiempos de espera de inactividad predeterminados y las tolerancias de latencia que usa StorNVMe. Consulte la sección Configuración de energía para obtener información sobre cómo cambiar esta configuración.

Estado de alimentación del sistema ACPI Tiempo de espera de inactividad principal Tolerancia de latencia de transición principal Tiempo de espera de inactividad secundario Tolerancia de latencia de transición secundaria
S0 (trabajo): esquema de rendimiento 200 ms 0 ms (AC) / 10 ms (DC) 2000 ms 0 ms
S0 (trabajo): esquema equilibrado 200 ms (AC) / 100 ms (DC) 15 ms (AC) / 50 ms (DC) 2000 ms (AC) / 1000 ms (DC) 100 ms
S0 (trabajo): esquema de ahorro de energía 100 ms 100 ms (AC) / 200 ms (DC) 1000 ms 200 ms
Inactividad de bajo consumo S0 (modo de espera moderno) 50 ms 500ms N/D No aplicable

Una vez que el tiempo de espera de inactividad ha expirado, el controlador recorrerá su tabla interna de estados de energía y seleccionará el estado de energía más profundo donde ENLAT+EXLAT es menor o igual que la tolerancia de latencia de transición actual.

Por ejemplo, supongamos que un dispositivo NVMe tiene los siguientes estados de energía y que se ha producido un tiempo de espera de inactividad:

Estado de energía Latencia de entrada (ENLAT) Latencia de salida (EXLAT)
PS0 5us 5us
PS1 10 ms 300us
PS2 50 ms 10 ms

Cuando el sistema está encendido y no en modo de espera moderno, StorNVMe elegirá PS1, ya que este es el estado de alimentación más profundo donde (ENLAT+EXLAT) <= 50 ms. Del mismo modo, cuando el sistema entra en modo de espera moderno, StorNVMe elegirá PS2 porque es el estado de energía más profundo donde (ENLAT+EXLAT) <= 500 ms.

Modo de espera moderno y DRIPS

Para admitir totalmente el modo de espera moderno, StorNVMe pasará el dispositivo a un estado adecuado de bajo consumo en función de las sugerencias proporcionadas por la plataforma de hardware. El estado de inactividad variará entre un estado F (más profundo que F0), a D3 Cold. Algunas plataformas requieren D3 Cold cuando se encuentra en modo de espera moderno. Esto depende del SoC, así que consulte con su proveedor de silicio para obtener más información. La compatibilidad con D3 para dispositivos de almacenamiento en sistemas modernos en espera se puede habilitar como se describe aquí.

Los dispositivos deben admitir RTD3 con una latencia de reanudación corta para ayudar a los sistemas modernos en espera a cumplir el requisito de latencia de reanudación del sistema de 1 segundo. RtD3 Resume Latency (RTD3R) hace referencia a la latencia de reanudación de D3cold y se recomienda notificar un valor distinto de cero ≤ 100 ms. RTD3R se describe en la sección 8.4.4 de la especificación NVMe.

Opciones de configuración de energía

Windows 10 admite la siguiente configuración de energía NVMe para optimizar la eficiencia energética.

Tiempo de espera de inactividad de NVMe principal

La siguiente configuración de energía permite cambiar el tiempo de espera de inactividad del dispositivo principal que usa StorNVMe.

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

La siguiente configuración de energía permite cambiar el valor de tolerancia de latencia de transición principal que StorNVMe usa al calcular un estado inactivo. Este es el valor que se compara con la suma de los valores ENLAT y EXLAT cuando expira el tiempo de espera de inactividad. Cuanto mayor sea este valor, más probable será que se elija un estado de energía más profundo.

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

Tiempo de espera de inactividad de NVMe secundario

La siguiente configuración de energía permite cambiar el tiempo de espera de inactividad del dispositivo secundario usado por StorNVMe.

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

La siguiente configuración de energía permite cambiar el valor de tolerancia de latencia de transición secundaria que StorNVMe usa al calcular un estado inactivo. Este es el valor que se compara con la suma de los valores ENLAT y EXLAT cuando expira el tiempo de espera de inactividad. Cuanto mayor sea este valor, más probable será que se elija un estado de energía más profundo.

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

Para cambiar el valor de un esquema de energía determinado, use:

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

No olvide aplicar el valor mediante: powercfg –setactive <scheme>

Estados secundarios ASPM y L1 de PCIe

Dependiendo de la plataforma, puede observar que el dispositivo NVMe es capaz de entrar en los subes estados L1 cuando está encendido de CC, pero no en la alimentación de CA. En este caso, es posible que tenga que cambiar la configuración de la configuración de alimentación PCIe ASPM de modo que obtenga el máximo ahorro de energía cuando esté encendido de CA (además de la alimentación dc).

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

Para cambiar el valor, use:

powercfg -setacvalueindex <scheme> sub_pciexpress aspm <value>

con el índice 002 anterior para ahorrar energía máxima. No olvide aplicar el valor mediante: powercfg –setactive <scheme>

Administración de energía activa

La administración de energía activa implica "P-States" (a.k.a. rendimiento o estados "perf") y está pensado principalmente para el control térmico. StorNVMe asigna los estados de energía operativa del dispositivo a P-States lógicos mediante el valor de potencia máxima notificado para cada estado de energía operativo. Cuando el dispositivo está activo (es decir, tiene E/S pendiente), StorNVMe pasará el dispositivo a uno de sus estados de energía operativo a través de una transición de estado P.

Durante Windows 10 desarrollo hubo un conjunto limitado de dispositivos NVMe que implementaron más de un estado de energía operativo. En función de nuestras mediciones de potencia y rendimiento, no encontramos una ventaja significativa para usar ningún estado de potencia operativa más alto. Por lo tanto, con la configuración predeterminada, solo verá el estado de energía operativo más alto utilizado.

El estado de energía operativo elegido depende de la sugerencia actual de "potencia operativa máxima". Esta sugerencia puede tener tres orígenes diferentes:

  • Devolución de llamada de refrigeración pasiva de Windows Thermal Framework.
  • Un cambio en el valor máximo de configuración de energía de nivel de energía. (Esto se puede desencadenar mediante un cambio en el esquema de alimentación del sistema o en la fuente de alimentación AC/DC).
  • Solicitud de IOCTL_STORAGE_DEVICE_POWER_CAP . El valor máximo más bajo de estos orígenes es el valor de potencia operativa máximo efectivo. A continuación se describe la mecánica de cada uno de estos orígenes.

En general, StorNVMe elegirá el estado de energía operativo más alto que sea menor o igual que el valor de potencia operativa máxima efectiva.

Por ejemplo, supongamos que un dispositivo NVMe tiene los siguientes estados de alimentación:

Estado de energía Potencia máxima ¿Operacional?
PS0 9W
PS1 6W
PS2 4W

El valor máximo más bajo de estos orígenes es el valor de potencia operativa máximo efectivo. A continuación se describe la mecánica de cada uno de estos orígenes.

En general, StorNVMe elegirá el estado de energía operativo más alto que sea menor o igual que el valor de potencia operativa máxima efectiva.

De forma predeterminada, no hay ningún nivel de potencia máximo, por lo que StorNVMe siempre elegirá PS0. Esto equivale al 100 %.

Si Windows Thermal Framework llama a la devolución de llamada de refrigeración pasiva con un valor del 50 %, esto dará como resultado un valor de potencia absoluta de (50 % * (9W – 4W)) + 4W = 6W. StorNVMe garantizará que, cuando el dispositivo esté activo, siempre estará en PS1, ya que el valor máximo de energía de ese estado es 6W.

A continuación, algún proceso en modo de usuario envía una solicitud de IOCTL_STORAGE_DEVICE_POWER_CAP al disco con un valor de 5W. StorNVMe elegirá PS2 ahora porque es el estado de potencia operativo más alto cuyo valor de potencia máxima (4W) es menor que el requisito máximo de potencia operativa de 5W.

Si el requisito de potencia máxima máxima especificado es menor que el valor de potencia máxima del estado de energía operativa más bajo, la expectativa es simplemente elegir el estado de energía operativo más bajo. En nuestro ejemplo, si el requisito máximo de energía operativa dado era 3W, StorNVMe elegiría PS2 porque no tiene ningún estado de energía operativo con un valor de potencia máxima de 3W o menos.

Si más adelante el requisito máximo de energía operativa cambia a 9W, StorNVMe volverá a elegir PS0 cuando el dispositivo esté activo.

Por ejemplo, supongamos que un dispositivo NVMe tiene los siguientes estados de alimentación:

Devolución de llamada de refrigeración pasiva de Windows Thermal Framework

StorNVMe (a través de Storport) registra una interfaz de refrigeración térmica con Windows Thermal Framework, lo que permite que el sistema limite el dispositivo NVMe a través de ese marco. Los detalles de esto están fuera del ámbito de este documento, pero en general la plataforma especifica zonas térmicas y umbrales a través de ACPI que windows Thermal Framework utiliza para limitar los dispositivos a través de devoluciones de llamada a los controladores de los dispositivos.

Valor máximo de configuración de energía de nivel de energía operativo

La siguiente configuración de energía se puede usar para cambiar el nivel de potencia operativo máximo para diferentes esquemas de energía del sistema y fuente de alimentación AC/DC.

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: %

Para cambiar el valor de un esquema de energía determinado, use:

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

No olvide aplicar el valor mediante: powercfg –setactive <scheme>

IOCTL_STORAGE_DEVICE_POWER_CAP

Este IOCTL se puede enviar a un dispositivo de almacenamiento para cambiar el nivel de potencia operativo máximo. Para obtener más información, consulte la documentación del búfer de entrada y salida, STORAGE_DEVICE_POWER_CAP.

Apagado o hibernación

Cuando el sistema se está apagando o hibernando, StorNVMe establece el campo Notificación de apagado del dispositivo (CC.SHN) en 1. Después, StorNVMe espera a que la latencia de entrada RTD3 notificada del dispositivo indique que está lista (actualizando el estado de apagado (CSTS). CAMPO SHST) en 2). Si no se notifica ningún valor de latencia de entrada, StorNVMe usará un valor predeterminado de 5 segundos. En este caso, si el dispositivo tarda más de 5 segundos, el sistema continuará con el procedimiento de apagado o hibernación sin comprobar el dispositivo NVMe más. Los OEM solo deben usar dispositivos que notifiquen los valores de entrada y salida RTD3 para los sistemas en espera modernos.