Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En esta sección se detalla cómo administra el controlador NVMe (StorNVMe) de Microsoft y qué opciones de configuración están disponibles. La especificación NVMe permite que los dispositivos NVMe notifiquen hasta 32 estados de energía. 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ónomo (APST). Para el soporte con espera moderna, 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 determinada cantidad de tiempo de inactividad. El estado F se elige en función de tres factores:
- Tolerancia a la latencia, que es la rapidez con la que el dispositivo puede responder si es necesario. Para F1, la 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 los hubiera), 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).
- Tiempo de espera de inactividad. Esta es la cantidad de tiempo desde que el dispositivo completó su última operación de E/S.
- Estado de energía del sistema. Si el sistema está en uso activo, StorNVMe prefiere 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) | 2000ms | 0 ms |
S0 (trabajo): esquema equilibrado | 200 ms (AC) / 100 ms (DC) | 15 ms (AC) / 50 ms (DC) | 2000 ms (AC) / 1000 ms (DC) | 100ms |
S0 (trabajo): esquema de ahorro de energía | 100ms | 100 ms (AC) / 200 ms (DC) | 1000 ms | 200 ms |
Inactividad de baja potencia S0 (modo de espera moderno) | 50 ms | 500 ms | No disponible | No disponible |
Una vez que haya expirado el tiempo de espera de inactividad, 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 en dc y no en modo de espera moderno, StorNVMe elegirá PS1, ya que este es el estado de energía más profundo donde (ENLAT+EXLAT) <= 50 ms. Del mismo modo, cuando el sistema entra en espera moderna, StorNVMe elegirá PS2 porque es el estado de energía más profundo donde (ENLAT+EXLAT) <= 500 ms.
Modo de espera y DRIPS modernos
Para admitir completamente el modo de espera moderno, StorNVMe pasará el dispositivo a un estado de baja potencia adecuado 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 Frío. Algunas plataformas requieren D3 Cold cuando están en Modern Standby. Esto depende del SoC, por lo que consulte con su proveedor de silicio para obtener más información. La compatibilidad con D3 para dispositivos de almacenamiento en sistemas con modo de espera moderno se puede habilitar como se describe aquí.
Los dispositivos deben admitir RTD3 con latencia de reanudación corta para ayudar a los sistemas en espera modernos 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 usado por 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 DE ASPM y L1 de PCIe
Dependiendo de la plataforma, puede observar que el dispositivo NVMe puede entrar en los subes estados L1 cuando está en la alimentación dc, pero no en la alimentación de CA. En este caso, es posible que tenga que cambiar la configuración de energía de ASPM PCIe para que obtenga el máximo ahorro de energía cuando esté conectado a la corriente alterna, aparte del ahorro en corriente continua.
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 anteriormente mencionado para el ahorro máximo de energía.
No olvide aplicar el valor mediante: powercfg –setactive <scheme>
Administración de energía activa
La gestión de la potencia activa implica "P-States" (también conocidos como estados de rendimiento o 'perf') y está pensada principalmente para el control térmico. StorNVMe asigna los estados de energía operativa del dispositivo a estados P 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 operativa a través de una transición de estado P.
Durante el desarrollo de Windows 10 había un conjunto limitado de dispositivos NVMe que implementaban más de un estado de energía operativo. En base a nuestras mediciones de potencia y rendimiento, no encontramos una ventaja significativa al utilizar otros estados de energía operativos que no fueran el 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 llamada de refrigeración pasiva desde Windows Thermal Framework.
- Un cambio en el valor máximo de configuración de la configuración de energía de nivel de energía. (Esto se puede desencadenar mediante un cambio en el esquema de energía 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. La mecánica de cada una de estas fuentes se describe a continuación.
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 energía:
Estado de potencia | Potencia máxima | ¿Operacional? |
---|---|---|
PS0 | 9W | Sí |
PS1 | 6W | Sí |
PS2 | 4W | Sí |
El valor máximo más bajo de estos orígenes es el valor de potencia operativa máximo efectivo. La mecánica de cada una de estas fuentes se describe a continuación.
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 a 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 de 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 energía operativo más alto cuyo valor de potencia máxima (4W) es menor que el requisito máximo de energía operativa de 5W.
Si el requisito de potencia operativa máxima determinado es menor que el valor de potencia máxima del estado de energía operativo 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 operativa 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 energía:
Devolución de llamada de refrigeración pasiva del marco térmico de Windows
StorNVMe (mediante Storport) registra una interfaz de refrigeración térmica con Windows Thermal Framework, lo que permite al sistema regular 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 el Marco térmico de Windows 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 energía operativo máximo. Para obtener más información, consulte la documentación del búfer de entrada/salida, STORAGE_DEVICE_POWER_CAP.
Apagar/Hibernar
Cuando el sistema se apaga o hiberna, StorNVMe establece el campo Notificación de apagado del dispositivo (CC.SHN) en 1. Después, StorNVMe espera la latencia de entrada RTD3 reportada por el dispositivo para que indique que está listo (actualizando el campo de estado de apagado (CSTS.SHST) a 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 aún más el dispositivo NVMe. Los OEM solo deben usar dispositivos que notifiquen los valores de entrada y salida RTD3 para los sistemas en espera modernos.