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


NVMe

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

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

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

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

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

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

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

Состояние питания системы ACPI Время ожидания основного простоя Задержка основного перехода Время ожидания дополнительного простоя Задержка вторичного перехода
S0 (рабочая) — схема производительности 200 мс 0 мс (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 с низким энергопотреблением (современный режим ожидания) 50 мс 500 мс Н/Д Н/Д

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

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

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

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

Современный режим ожидания и DRIPS

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

Устройства должны поддерживать RTD3 с короткой задержкой возобновления, чтобы современные резервные системы соответствовали требованию к задержке возобновления 1 секунды. RTD3 Resume Latency (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-состояния" (например, состояния производительности или "производительности") и в основном предназначено для управления температурой. StorNVMe сопоставляет операционные состояния питания устройства с логическими P-состояниями, используя значение максимальной мощности, сообщаемое для каждого рабочего состояния питания. Если устройство активно (т. е. имеет невыполненные операции ввода-вывода), StorNVMe переведет устройство в одно из его рабочих состояний питания с помощью перехода P-состояния.

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

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

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

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

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

Состояние включения Максимальная мощность Операционные?
PS0 9W Да
PS1 6W Да
PS2 4W Да

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

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

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

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

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

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

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

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

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

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

Параметр конфигурации максимального уровня рабочей мощности

Следующий параметр конфигурации питания можно использовать для изменения максимального рабочего уровня питания для различных системных схем питания и источника питания переменного/постоянного тока.

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 для современных резервных систем.