本節詳細說明Microsoft內建 NVMe 驅動程式 (StorNVMe) 如何管理電源,以及可用的設定選項。 NVMe 規格可讓 NVMe 裝置報告最多 32 個電源狀態。 每個電源狀態都有下列參數:
- 最大耗電量 (MP)
- 運作中或非運作中
- 進入延遲(ENLAT)
- 離開延遲(EXLAT)
- 相對效能值(相對於其他電源狀態)
StorNVMe 會將作電源狀態(裝置可以處理這些狀態中的 IO)對應到邏輯效能狀態(也就是 P-States)。 同樣地,驅動程式會將非作電源狀態(裝置未處理這些狀態中的IO)對應至邏輯閑置電源狀態(也就是 F 狀態)。 使用 StorNVMe 時,轉換至這些狀態在很大程度上取決於整體系統電源狀態。 NVMe 規格會定義自主電源狀態轉換 (APST) 功能。 針對新式待命支援,StorNVMe 不支援已啟用APST的裝置。
執行時裝置電源管理
StorNVMe 可能會選擇在經過一定數量的閑置時間之後,將裝置轉換為 F 狀態。 根據 3 個因素選擇 F 狀態:
- 延遲容錯,這是裝置在需要時可以回應的速度。 針對 F1,TransitionLatency (ENLAT + EXLAT) 不應大於主要轉換延遲容錯。 對於 F2 和其他更深層的 F 狀態(如果有的話),其 TransitionLatency 不應該大於次要轉換延遲容錯。 否則,裝置可能無法轉換到這些 F 狀態,而新式待命轉換可能會受到影響(例如,引進長時間延遲進入 DRIPS)。
- 閒置時間到期。 這是裝置完成上次 IO 作業的時間量。
- 系統電源狀態。 如果系統正在使用中,StorNVMe 會偏好回應性。 這表示將使用不同的延遲容忍度和逾時設定。
下表顯示 StorNVMe 所使用的預設閒置逾時和延遲容錯。 如需如何變更這些設定,請參閱 Power Configuration Settings 一節。
ACPI 系統電源狀態 | 主要閒置時間逾時 | 主要過渡延遲容忍度 | 次要閑置逾時 | 次要轉換延遲容忍度 |
---|---|---|---|---|
S0 (工作) - 效能方案 | 200 毫秒 | 0 毫秒 (AC) / 10 毫秒 (DC) | 2000 毫秒 | 0ms |
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 毫秒 | N/A | N/A |
閑置超時時間過期後,驅動程式會遍歷其內部的電源狀態表,並選取 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 會根據硬體平臺所提供的提示,將裝置轉換為適當的低功率狀態。 閒置狀態會在比 F0 更深的 F 狀態與 D3 冷之間變化。 某些平台在現代待命模式下需要 D3 冷。 這取決於 SoC,因此請洽詢您的矽廠商以取得詳細資訊。 您可以在新式待命系統上啟用存儲設備的 D3 支援,如 這裡所述。
裝置應支援 RTD3 並具備短暫的恢復延遲,以協助新式待命系統符合 1 秒的系統恢復延遲要求。 RTD3 回復延遲(RTD3R)指的是從 D3cold 的回復延遲,建議報告的值應為非零且 ≤ 100 毫秒。 NVMe 規格的 8.4.4 節中描述 RTD3R。
電源組態設定
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 裝置能夠在 DC 電源而非 AC 電源時進入 L1 子狀態。 在此情況下,您可能需要更改PCIe ASPM電源配置設定,使其在使用AC電源時(以及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
若要變更值,請使用:
powercfg -setacvalueindex <scheme> sub_pciexpress aspm <value>
以索引002獲得最大節能效果。
別忘了使用以下方法來套用值:powercfg –setactive <scheme>
主動電源管理
主動電源管理涉及“P-States”(也就是效能或“perf”狀態),主要用於熱控制。 StorNVMe 會使用針對每個作電源狀態報告的最大電源值,將裝置的作電源狀態對應至邏輯 P 狀態。 當裝置處於作用中狀態(亦即具有出色的 IO)時,StorNVMe 會透過 P 狀態轉換,將裝置轉換為其中一個運作電源狀態。
在 Windows 10 開發期間,有一組有限的 NVMe 裝置實作了多個操作電源狀態。 根據我們的功率和效能測量結果,我們沒有發現除了最高運行功率狀態以外的其他狀態有顯著的好處。 因此,使用預設組態時,您只會看到使用的最高作業電源狀態。
選擇的作業電源狀態取決於目前的「最大作能力」提示。 此提示可以有 3 個不同的來源:
- Windows 熱架構的 被動冷卻 回調。
- 最大電源等級電源組態設定值的變更。 (這可以由系統電源配置或 AC/DC 電源的變更觸發。
- IOCTL_STORAGE_DEVICE_POWER_CAP要求。 這些來源的最低最大值是有效的最大運算功率值。 以下將討論每個來源的機制。
一般而言,StorNVMe 會選擇小於或等於有效最大作電源值的最高作電源狀態。
例如,假設 NVMe 裝置具有下列電源狀態:
電源狀態 | 麥克斯·鮑爾 | 運作中? |
---|---|---|
PS0 | 9W | 是的 |
PlayStation 1 | 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 的最大作電源需求。
如果指定的最大作電源需求小於最低作電源狀態的 [最大電源] 值,則預期只是選擇最低的作電源狀態。 在我們的範例中,如果指定的最大運作電源需求是 3W,那麼 StorNVMe 會選擇 PS2,因為在運作電源狀態中沒有一個具有最大電源為 3W 或更低的選項。
如果稍後最大作電源需求變更為 9W,則 StorNVMe 會在裝置使用中時返回選擇 PS0。
例如,假設 NVMe 裝置具有下列電源狀態:
Windows 熱架構被動冷卻回調
StorNVMe (透過 Storport) 向 Windows 熱架構註冊熱冷卻介面,讓系統能夠透過該架構節流 NVMe 裝置。 本文件不涵蓋此方面的具體細節,但一般而言,平台會透過 ACPI 指定熱區和閾值,然後 Windows 熱管理框架會透過回呼函數來限制裝置運行,調整至裝置驅動程式。
最大運作功率層級電源配置設定
下列電源組態設定可用來變更不同系統電源配置和 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裝置。 OEM 應該只使用能報告 RTD3 進入和結束值的新式待機系統裝置。