Поделиться через


NVMe

В этом разделе описано, как драйвер NVMe (StorNVMe) корпорации Майкрософт управляет питанием и какими параметрами конфигурации доступны. Спецификация NVMe позволяет устройствам NVMe сообщать до 32 состояний питания. Каждое состояние питания имеет следующие параметры:

  • Максимальное потребление электроэнергии (MP)
  • Операционные или нерабоспособные
  • Задержка входа (ENLAT)
  • Задержка выхода (EXLAT)
  • Относительные значения производительности (относительно других состояний энергопотребления)

StorNVMe сопоставляет рабочие состояния питания (устройство может обрабатывать операции ввода-вывода в этих состояниях) с логическими состояниями производительности (например, P-States). Аналогичным образом, драйвер сопоставляет нерабочие состояния питания (устройство не обрабатывает операции ввода-вывода в этих состояниях) с логическими состояниями бездействия питания (а именно, F-States). При использовании StorNVMe переходы к этим состояниям в значительной степени определяются общим состоянием питания системы. Спецификация NVMe определяет функцию автономного перехода состояния питания (APST). Для поддержки современного резервного копирования StorNVMe не поддерживает устройства с включенным APST.

Управление питанием устройства среды выполнения

StorNVMe может выбрать переход устройства в состояние F после истечения определенного времени простоя. F-State выбирается с учетом трех факторов.

  1. Допустимость задержки, которая заключается в том, насколько быстро устройство может реагировать при необходимости. Для F1 значение TransitionLatency (ENLAT + EXLAT) не должно превышать допустимое значение задержки первичного перехода. Для F2 и других более глубоких состояний F (если они есть), их задержка перехода не должна быть больше, чем допустимая задержка второго уровня перехода. В противном случае устройство может не иметь возможности перейти к этим состояниям F, что может повлиять на переход в современный режим ожидания (например, вызвать долгую задержку при входе в DRIPS).
  2. Время ожидания простоя. Это время от момента завершения последней операции ввода-вывода устройства.
  3. Состояние питания системы. Если система активно используется, StorNVMe предпочитает скорость реагирования. Это означает, что будут использоваться различные допустимые значения задержки и времени ожидания.

В таблице показаны значения времени ожидания простоя по умолчанию и допустимые задержки, используемые StorNVMe. Сведения об изменении этих параметров см. в разделе "Параметры конфигурации питания ".

Состояние питания системы ACPI Время ожидания основного простоя Допустимый уровень задержки первичного перехода Время ожидания дополнительного простоя Допустимая задержка вторичного перехода
S0 (рабочая) — схема производительности 200 мс 0ms (AC) / 10 мс (DC) 2000 мс 0 мс
S0 (рабочая) — сбалансированная схема 200 мс (AC) / 100 мс (DC) 15 мс (AC) / 50 мс (DC) 2000 мс (AC) / 1000 мс (DC) 100 мс
S0 (рабочая) — схема энергосбережения 100 мс 100 мс (AC) / 200 мс (DC) 1000 мс 200 мс
S0 Low Power Idle (современный резервный режим) 50 мс 500 мс Не применимо Не применимо

После истечения срока ожидания простоя драйвер будет проходить внутреннюю таблицу состояний питания и выбрать самое глубокое состояние питания, где ENLAT+EXLAT меньше или равно текущему допустимому значению задержки перехода.

Например, предположим, что у устройства NVMe есть следующие состояния питания и сработал тайм-аут простоя:

Состояние питания Задержка входа (ENLAT) Задержка выхода (EXLAT)
PS0 5us 5us
PS1 10 мс 300us
PS2 50 мс 10 мс

Если система работает от постоянного тока и не находится в режиме Modern Standby, StorNVMe выберет PS1, так как это самая глубокая ступень энергосбережения, где (ENLAT+EXLAT) <= 50 мс. Аналогично, когда система переходит в Современный режим ожидания, StorNVMe выберет PS2, так как это наиболее глубокое состояние энергосбережения, где (ENLAT+EXLAT) <= 500 мс.

Современная резервная версия и DRIPS

Чтобы полностью поддерживать современную резервную среду, StorNVMe переместит устройство в соответствующее состояние с низкой мощностью в зависимости от подсказок, предоставляемых аппаратной платформой. Состояние простоя зависит от состояния F (более глубокого, чем F0), до D3 Cold. Для некоторых платформ требуется D3 Cold в режиме современного ожидания. Это зависит от SoC, поэтому обратитесь к поставщику силиконовой системы для получения дополнительных сведений. Поддержка D3 для устройств хранения в современных резервных системах может быть включена, как описано здесь.

Устройства должны поддерживать RTD3 с короткой задержкой возобновления, чтобы помочь современным резервным системам соответствовать требованию задержки возобновления 1 секунды. Задержка возобновления RTD3 (RTD3R) обозначает временной интервал возобновления из состояния D3cold, и рекомендуется указывать ненулевое значение, не превышающее 100 мс. RTD3R описан в разделе 8.4.4 спецификации NVMe.

Параметры конфигурации питания

Windows 10 поддерживает следующие параметры питания NVMe для настройки энергоэффективности.

Время ожидания простоя основного NVMe

Следующий параметр конфигурации питания позволяет изменить время ожидания простоя основного устройства, используемое 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

Следующий параметр конфигурации питания позволяет изменить основное значение допустимости задержки перехода, которое StorNVMe использует при вычислении состояния простоя. Это значение, которое сравнивается с суммой значений ENLAT и EXLAT, когда истекает время ожидания простоя. Чем выше это значение, тем вероятнее будет выбрано более углублённое состояние энергосбережения.

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

Время ожидания простоя вторичного NVMe

Следующий параметр конфигурации питания позволяет изменить время ожидания простоя дополнительного устройства, используемое 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

Следующий параметр конфигурации питания позволяет изменить значение допуска задержки вторичного перехода, которое StorNVMe использует при вычислении состояния простоя. Это значение, которое сравнивается с суммой значений ENLAT и EXLAT, когда истекает время ожидания простоя. Чем выше это значение, тем более вероятно, что будет выбрано более глубокое состояние питания.

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

Чтобы изменить значение для данной схемы питания, используйте следующую команду:

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

Не забудьте применить значение с помощью: powercfg –setactive <scheme>

Подзаготовки PCIe ASPM и L1

В зависимости от вашей платформы, вы можете заметить, что устройство NVMe может входить в подсостояния L1 при питании от постоянного тока, но не при питании от переменного тока. В этом случае может потребоваться изменить параметр конфигурации питания PCIe ASPM таким образом, чтобы достигалась максимальная экономия энергии при питании от переменного тока (в дополнение к постоянному току).

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

Чтобы изменить значение, используйте следующую команду:

powercfg -setacvalueindex <scheme> sub_pciexpress aspm <value>

с индексом 002, указанным выше, для максимальной экономии энергии. Не забудьте применить значение с помощью: powercfg –setactive <scheme>

Активное управление питанием

Активное управление питанием включает в себя "P-States" (a.k.a. производительность или "perf" состояния) и в основном предназначено для теплового контроля. StorNVMe сопоставляет рабочие состояния работы устройства с логическими состояниями P-State, используя максимальное значение power, указанное для каждого состояния операционной мощности. Если устройство активно (т. е. имеет невыполненные операции ввода-вывода), StorNVMe переведет устройство в одно из его операционных состояний питания через переход P-State.

Во время разработки Windows 10 существовал ограниченный набор устройств NVMe, реализующих несколько операционных состояний питания. Основываясь на наших измерениях мощности и производительности, мы не нашли значительного преимущества использования любого, но самого высокого состояния операционной мощности. Таким образом, при настройке по умолчанию будет отображаться только максимальное рабочее состояние, используемое.

Выбранный режим работы зависит от текущей подсказки "максимальная мощность работы". Это указание может содержать 3 различных источника:

  • Обратный вызов пассивного охлаждения в Windows Thermal Framework.
  • Изменение значения настройки конфигурации максимального уровня мощности. (Это может быть вызвано изменением системной схемы питания или источника питания AC/DC.)
  • Запрос IOCTL_STORAGE_DEVICE_POWER_CAP. Наименьшее максимальное значение из этих источников — это эффективное максимальное значение рабочей мощности. Ниже рассматривается механика каждого из этих источников.

Как правило, StorNVMe выбирает максимальное рабочее состояние питания, которое меньше или равно эффективному максимальному значению рабочей мощности.

Например, например, устройство NVMe имеет следующие состояния питания:

Состояние питания Максимальная мощность Эксплуатационный?
PS0 9 Вт Да
PS1 6W Да
PS2 4W Да

Наименьшее максимальное значение из этих источников — это эффективное максимальное значение рабочей мощности. Ниже рассматривается механика каждого из этих источников.

Как правило, StorNVMe выбирает максимальное рабочее состояние питания, которое меньше или равно эффективному максимальному значению рабочей мощности.

По умолчанию нет максимального уровня питания, поэтому StorNVMe всегда будет выбирать PS0. Это эквивалентно 100%.

Если Windows Thermal Framework вызывает пассивный обратный вызов охлаждения со значением 50% то это приведет к абсолютному значению мощности (50% * (9W – 4W)) + 4W = 6W. StorNVMe гарантирует, что если устройство активно, оно всегда будет находиться в PS1, так как максимальное значение питания этого состояния равно 6W.

Затем некоторый процесс пользовательского режима отправляет запрос IOCTL_STORAGE_DEVICE_POWER_CAP на диск со значением 5W. StorNVMe теперь выберет PS2, так как это наивысшее рабочее состояние по мощности, чье максимальное значение потребляемой мощности (4W) меньше, чем максимальное требование к рабочей мощности 5W.

Если заданное максимальное требование к рабочему энергопотреблению меньше значения Max Power для наименьшего состояния операционной мощности, то ожидание — просто выбрать наименьшее рабочее состояние питания. В нашем примере, если заданное максимальное требование к рабочей мощности составляет 3W, StorNVMe выберет PS2, так как у него нет состояния операционной мощности с максимальной мощностью 3W или меньше.

Если позже максимальное требование к рабочей мощности изменится на 9W, StorNVMe вернется к выбору PS0, когда устройство активно.

Например, например, устройство NVMe имеет следующие состояния питания:

Обратный вызов пассивного охлаждения в Windows Thermal Framework

StorNVMe (через Storport) регистрирует интерфейс теплового охлаждения с помощью Windows Thermal Framework, что позволяет системе регулировать устройство NVMe с помощью этой платформы. Перечисленные здесь детали выходят за рамки этого документа, но в общем платформа задает тепловые зоны и пороговые значения через ACPI, который затем используется Windows Thermal Framework для регулирования устройств через обратные вызовы к драйверам устройств.

Максимальный уровень эксплуатационной мощностиНастройка конфигурации мощности

Следующий параметр конфигурации питания можно использовать для изменения максимального уровня операционной мощности для различных системных схем питания и источника питания 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: %

Чтобы изменить значение для данной схемы питания, используйте следующую команду:

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

Не забудьте применить значение с помощью: powercfg –setactive <scheme>

IOCTL_STORAGE_DEVICE_POWER_CAP

Этот IOCTL можно отправить на устройство хранилища, чтобы изменить максимальный уровень рабочей мощности. Дополнительные сведения см. в документации по буферу ввода и вывода, STORAGE_DEVICE_POWER_CAP.

Завершение работы/Спящий режим

При завершении работы системы или гибернатации StorNVMe устанавливает для поля уведомления о завершении работы устройства (CC.SHN) значение 1. Затем StorNVMe ожидает задержки входа RTD3, о которой сообщило устройство, чтобы указать, что оно готово (обновив поле завершения работы (CSTS.SHST) до 2). Если значение задержки входа не сообщается, storNVMe будет использовать значение по умолчанию в 5 секунд. В этом случае, если проходит более 5 секунд, система продолжит завершение работы или переход в режим гибернации без дальнейшей проверки устройства NVMe. Изготовители оборудования должны использовать только устройства, сообщающие значения входа и выхода RTD3 для современных резервных систем.