Partager via


NVMe

Cette section décrit en détail la façon dont le pilote NVMe intégré de Microsoft (StorNVMe) gère l’alimentation et les options de configuration disponibles. La spécification NVMe permet aux appareils NVMe de signaler jusqu’à 32 états d’alimentation. Chaque état d’alimentation a les paramètres suivants :

  • Consommation d’énergie maximale (MP)
  • Opérationnel ou non opérationnel
  • Latence d’entrée (ENLAT)
  • Latence de sortie (EXLAT)
  • Valeurs de performances relatives (par rapport à d’autres états d’alimentation)

StorNVMe mappe les états d’alimentation opérationnels (l’appareil peut gérer les E/S dans ces états) aux états de performances logiques (P-States). De même, le pilote mappe les états d’alimentation non opérationnels (l’appareil ne gère pas les E/S dans ces états) aux états d’inactivité logiques (a.k.a. F-States). Avec StorNVMe, les transitions vers ces états sont en grande partie déterminées par l’état d’alimentation global du système. La spécification NVMe définit une fonctionnalité APST (Autonomous Power State Transition). Pour la prise en charge de la veille moderne, StorNVMe ne prend pas en charge les appareils avec APST activé.

Gestion de l’alimentation des appareils d’exécution

StorNVMe peut choisir de faire passer l’appareil à un état F après l’expiration d’un certain temps d’inactivité. L’état F est choisi en fonction de 3 facteurs :

  1. Tolérance de latence, qui correspond à la rapidité avec laquelle l’appareil peut répondre si nécessaire. Pour F1, la latence TransitionLatency (ENLAT + EXLAT) ne doit pas être supérieure à la tolérance de latence de transition primaire. Pour F2 et d’autres états F plus profonds (le cas échéant), leur latence TransitionLatency ne doit pas être supérieure à la tolérance de latence de transition secondaire. Sinon, l’appareil peut ne pas être en mesure de passer à ces états F et la transition de secours moderne peut être affectée (pour instance, introduire une latence longue pour entrer drIPS).
  2. Délai d’inactivité. Il s’agit de la durée entre le moment où l’appareil a terminé sa dernière opération d’E/S.
  3. État de l’alimentation du système. Si le système est en cours d’utilisation active, StorNVMe préférera la réactivité. Cela implique des tolérances de latence variables et des délais d’expiration seront utilisés.

Le tableau montre les délais d’inactivité et les tolérances de latence par défaut utilisés par StorNVMe. Consultez la section Paramètres de configuration de l’alimentation pour savoir comment modifier ces paramètres.

État d’alimentation du système ACPI Délai d’inactivité principal Tolérance de latence de transition primaire Délai d’inactivité secondaire Tolérance de latence de transition secondaire
S0 (Working) - Schéma de performances 200 ms 0 ms (AC) / 10 ms (DC) 2000 ms 0 ms
S0 (Working) - Schéma équilibré 200 ms (AC) / 100 ms (DC) 15 ms (AC) / 50 ms (DC) 2000 ms (AC) / 1000 ms (DC) 100 ms
S0 (Working) - Power Saver Scheme 100 ms 100 ms (AC) / 200 ms (DC) 1000 ms 200 ms
S0 Faible consommation d’inactivité (veille moderne) 50 ms 500 ms N/A N/A

Une fois le délai d’inactivité expiré, le pilote traverse sa table interne d’états d’alimentation et sélectionne l’état d’alimentation le plus profond où ENLAT+EXLAT est inférieur ou égal à la tolérance de latence de transition actuelle.

Par exemple, supposons qu’un appareil NVMe présente les états d’alimentation suivants et qu’un délai d’inactivité s’est produit :

État d’alimentation Latence d’entrée (ENLAT) Latence de sortie (EXLAT)
PS0 5us 5us
PS1 10 ms 300us
PS2 50 ms 10 ms

Lorsque le système est sous alimentation DC et non en mode veille moderne, StorNVMe choisit PS1, car il s’agit de l’état d’alimentation le plus profond où (ENLAT+EXLAT) <= 50 ms. De même, lorsque le système entre en veille moderne, StorNVMe choisit PS2, car il s’agit de l’état d’alimentation le plus profond où (ENLAT+EXLAT) <= 500 ms.

Veille moderne et DRIPS

Pour prendre entièrement en charge la veille moderne, StorNVMe fera passer l’appareil à un état de faible consommation approprié en fonction des indicateurs fournis par la plateforme matérielle. L’état inactif varie entre un état F (plus profond que F0) et D3 Froid. Certaines plateformes nécessitent D3 Froid lorsqu’elles sont en veille moderne. Cela dépend du SoC. Veuillez donc case activée avec votre fournisseur de silicium pour plus d’informations. La prise en charge D3 des appareils de stockage sur les systèmes de secours modernes peut être activée comme décrit ici.

Les appareils doivent prendre en charge RTD3 avec une latence de reprise courte afin d’aider les systèmes de secours modernes à répondre à l’exigence de latence de 1 seconde du système de reprise. RTD3 Resume Latency (RTD3R) fait référence à la latence de reprise à partir de D3cold et il est recommandé de signaler une valeur différente de zéro ≤ 100 ms. RTD3R est décrit dans la section 8.4.4 de la spécification NVMe.

Paramètres de configuration de l’alimentation

Windows 10 prend en charge les paramètres d’alimentation NVMe suivants pour optimiser l’efficacité énergétique.

Délai d’inactivité NVMe principal

Le paramètre de configuration de l’alimentation suivant vous permet de modifier le délai d’inactivité de l’appareil principal utilisé par 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

Le paramètre de configuration de l’alimentation suivant vous permet de modifier la valeur de tolérance de latence de transition principale utilisée par StorNVMe lors du calcul d’un état inactif. Il s’agit de la valeur qui est comparée à la somme des valeurs ENLAT et EXLAT lorsque le délai d’inactivité expire. Plus cette valeur est élevée, plus il est probable qu’un état d’alimentation plus profond soit choisi.

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

Délai d’inactivité NVMe secondaire

Le paramètre de configuration de l’alimentation suivant vous permet de modifier le délai d’inactivité de l’appareil secondaire utilisé par 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

Le paramètre de configuration de l’alimentation suivant vous permet de modifier la valeur de tolérance de latence de transition secondaire utilisée par StorNVMe lors du calcul d’un état inactif. Il s’agit de la valeur qui est comparée à la somme des valeurs ENLAT et EXLAT lorsque le délai d’inactivité expire. Plus cette valeur est élevée, plus il est probable qu’un état d’alimentation plus profond soit choisi.

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

Pour modifier la valeur d’un schéma d’alimentation donné, utilisez :

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

N’oubliez pas d’appliquer la valeur à l’aide de : powercfg –setactive <scheme>

Sous-états PCIe ASPM et L1

Selon votre plateforme, vous pouvez observer que l’appareil NVMe est en mesure d’entrer des sous-états L1 sur l’alimentation CC, mais pas sur l’alimentation secteur. Dans ce cas, vous devrez peut-être modifier le paramètre de configuration de l’alimentation PCIe ASPM afin qu’il bénéficie d’économies d’énergie maximales en cas d’alimentation ca (en plus de l’alimentation CC).

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

Pour modifier la valeur, utilisez :

powercfg -setacvalueindex <scheme> sub_pciexpress aspm <value>

avec l’index 002 à partir de ci-dessus pour des économies d’énergie maximales. N’oubliez pas d’appliquer la valeur à l’aide de : powercfg –setactive <scheme>

Gestion de l’alimentation active

La gestion de l’alimentation active implique « P-States » (c’est-à-dire des états de performances ou « perf ») et est principalement destinée au contrôle thermique. StorNVMe mappe les états d’alimentation opérationnelle de l’appareil aux états P logiques à l’aide de la valeur de puissance maximale indiquée pour chaque état d’alimentation opérationnelle. Lorsque l’appareil est actif (c’est-à-dire qu’il a des E/S en suspens), StorNVMe le transfère vers l’un de ses états d’alimentation opérationnelle via une transition P-State.

Pendant Windows 10 développement, il y avait un ensemble limité d’appareils NVMe qui implémentaient plusieurs états d’alimentation opérationnelle. Sur la base de nos mesures de puissance et de performances, nous n’avons pas trouvé un avantage significatif à l’utilisation d’un état de puissance opérationnelle, mais le plus élevé. Par conséquent, avec la configuration par défaut, vous ne verrez que l’état de puissance opérationnelle le plus élevé utilisé.

L’état d’alimentation opérationnelle choisi dépend de l’indicateur « puissance opérationnelle maximale » actuel. Cet indicateur peut avoir 3 sources différentes :

  • Rappel de refroidissement passif à partir de Windows Thermal Framework.
  • Modification de la valeur du paramètre de configuration de l’alimentation maximale. (Cela peut être déclenché par une modification du schéma d’alimentation du système ou de la source d’alimentation CA/DC.)
  • Demande de IOCTL_STORAGE_DEVICE_POWER_CAP . La valeur maximale la plus faible de ces sources est la valeur de puissance opérationnelle maximale effective. Les mécanismes de chacune de ces sources sont décrits ci-dessous.

En général, StorNVMe choisit l’état de puissance opérationnelle la plus élevée, inférieur ou égal à la valeur de puissance opérationnelle maximale effective.

Par exemple, supposons qu’un appareil NVMe a les états d’alimentation suivants :

État d’alimentation Puissance maximale Opérationnel?
PS0 9W Oui
PS1 6W Oui
PS2 4W Oui

La valeur maximale la plus faible de ces sources est la valeur de puissance opérationnelle maximale effective. Les mécanismes de chacune de ces sources sont décrits ci-dessous.

En général, StorNVMe choisit l’état de puissance opérationnelle la plus élevée, inférieur ou égal à la valeur de puissance opérationnelle maximale effective.

Par défaut, le niveau d’alimentation maximal n’étant pas défini, StorNVMe choisit toujours PS0. Cela équivaut à 100 %.

Si Windows Thermal Framework appelle le rappel de refroidissement passif avec une valeur de 50 %, la valeur de puissance absolue est (50 % * (9W – 4W)) + 4W = 6W. StorNVMe s’assure ensuite que lorsque l’appareil est actif, il est toujours dans PS1, car la valeur De puissance maximale de cet état est 6 W.

Ensuite, un processus en mode utilisateur envoie une requête IOCTL_STORAGE_DEVICE_POWER_CAP au disque avec une valeur de 5W. StorNVMe choisit maintenant PS2, car il s’agit de l’état de puissance opérationnelle la plus élevée dont la valeur de puissance maximale (4W) est inférieure à la puissance opérationnelle maximale requise de 5W.

Si la puissance opérationnelle maximale requise est inférieure à la valeur De puissance maximale de l’état de puissance opérationnelle la plus faible, l’attente est de choisir simplement l’état de puissance opérationnelle le plus faible. Dans notre exemple, si la puissance opérationnelle maximale requise était de 3 W, StorNVMe choisirait PS2, car il n’a pas d’état d’alimentation opérationnelle avec une valeur de puissance maximale de 3W ou moins.

Si, plus tard, l’exigence de puissance opérationnelle maximale passe à 9W, StorNVMe revient à choisir PS0 lorsque l’appareil est actif.

Par exemple, supposons qu’un appareil NVMe a les états d’alimentation suivants :

Rappel de refroidissement passif windows Thermal Framework

StorNVMe (via Storport) enregistre une interface de refroidissement thermique auprès de Windows Thermal Framework qui permet au système de limiter l’appareil NVMe via cette infrastructure. Les spécificités de ce document sont en dehors du cadre de ce document, mais en général la plateforme spécifie des zones thermiques et des seuils via ACPI que Windows Thermal Framework utilise ensuite pour limiter les appareils via des rappels aux pilotes des appareils.

Paramètre de configuration de l’alimentation maximale du niveau de puissance opérationnelle

Le paramètre de configuration de l’alimentation suivant peut être utilisé pour modifier le niveau de puissance opérationnelle maximal pour différents schémas d’alimentation système et source d’alimentation CA/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: %

Pour modifier la valeur d’un schéma d’alimentation donné, utilisez :

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

N’oubliez pas d’appliquer la valeur à l’aide de : powercfg –setactive <scheme>

IOCTL_STORAGE_DEVICE_POWER_CAP

Ce IOCTL peut être envoyé à un périphérique de stockage pour modifier le niveau de puissance opérationnelle maximale. Pour plus d’informations, consultez la documentation relative à la mémoire tampon d’entrée/sortie, STORAGE_DEVICE_POWER_CAP.

Arrêt/mise en veille prolongée

Lorsque le système est arrêté ou en cours d’arrêt, StorNVMe définit le champ de notification d’arrêt (CC.SHN) de l’appareil sur 1. StorNVMe attend ensuite que la latence d’entrée RTD3 signalée de l’appareil indique qu’il est prêt (en mettant à jour l’état d’arrêt (CSTS). SHST) champ à 2). Si aucune valeur de latence d’entrée n’est signalée, StorNVMe utilise une valeur par défaut de 5 secondes. Dans ce cas, si l’appareil prend plus de 5 secondes, le système poursuit la procédure d’arrêt ou de mise en veille prolongée sans vérifier davantage l’appareil NVMe. Les fabricants OEM doivent uniquement utiliser des appareils qui signalent des valeurs d’entrée et de sortie RTD3 pour les systèmes de secours modernes.