NVMe
本節詳細說明 Microsoft 內建 NVMe 驅動程式 (StorNVMe) 如何管理電源,以及可用的設定選項。 NVMe 規格可讓 NVMe 裝置報告最多 32 個電源狀態。 每個電源狀態都有下列參數:
- MP) 的最大耗電量 (
- 操作或非運作
- 專案延遲 (ENLAT)
- 結束延遲 (EXLAT)
- 相對於其他電源狀態 (相對效能值)
StorNVMe 會將運作電源狀態對應 (裝置可以處理這些狀態中的 IO,) 邏輯效能狀態 (也就是 P-States) 。 同樣地,驅動程式會將非運作電源狀態對應 (裝置不會處理這些狀態中的 IO,) 邏輯閒置電源狀態 () 。 使用 StorNVMe 時,轉換至這些狀態主要是由整體系統電源狀態決定。 NVMe 規格會定義自發性電源狀態轉換 (APST) 功能。 針對新式待命支援,StorNVMe 不支援已啟用 APST 的裝置。
執行時間裝置電源管理
StorNVMe 可以選擇在經過特定閒置時間之後,將裝置轉換為 F-State。 根據 3 個因素選擇 F-State:
- 延遲容錯,這是裝置視需要回應的速度。 針對 F1,TransitionLatency (ENLAT + EXLAT) 不應該大於主要轉換延遲容錯。 對於 F2 和其他更深入的 F 狀態 (,如果有任何) ,則其 TransitionLatency 不應大於次要轉換延遲容錯。 否則,裝置可能無法轉換到這些 F 狀態,而新式待命轉換可能會受到 (影響,例如,導入了較長的延遲以進入 DRIPS) 。
- 閒置逾時。 這是裝置完成上次 IO 作業的時間量。
- 系統電源狀態。 如果系統正在使用中,StorNVMe 會偏好回應性。 這表示將會使用不同的延遲容錯和逾時。
下表顯示 StorNVMe 所使用的預設閒置逾時和延遲容錯。 如需如何變更這些設定,請參閱 Power Configuration Settings 一節。
ACPI 系統電源狀態 | 主要閒置逾時 | 主要轉換延遲容錯 | 次要閒置逾時 | 次要轉換延遲容錯 |
---|---|---|---|---|
S0 (工作) - 效能配置 | 200 毫秒 | 0ms (AC) / 10ms (DC) | 2000 毫秒 | 0 毫秒 |
S0 (工作) - 平衡配置 | (AC) / 100 毫秒 (DC) | 15 毫秒 (AC) / 50 毫秒 (DC) | 2000ms (AC) / 1000ms (DC) | 100 毫秒 |
S0 (工作) - 省電模式 | 100 毫秒 | 100 毫秒 (AC) / 200 毫秒 (DC) | 1000 毫秒 | 200 毫秒 |
S0 低電源閒置 (新式待命) | 50 毫秒 | 500ms | N/A | N/A |
閒置逾時過期之後,驅動程式會周遊其內部電源狀態資料表,並選取 ENLAT+EXLAT 小於或等於目前轉換延遲容錯的最深電源狀態。
例如,假設 NVMe 裝置具有下列電源狀態,且發生閒置逾時:
電源狀態 | 專案延遲 (ENLAT) | 結束延遲 (EXLAT) |
---|---|---|
PS0 | 5us | 5us |
PS1 | 10 毫秒 | 300us |
PS2 | 50 毫秒 | 10 毫秒 |
當系統處於 DC 電源而非新式待命狀態時,StorNVMe 會選擇 PS1,因為這是最深的電源狀態, (ENLAT+EXLAT) < = 50 毫秒。 同樣地,當系統進入新式待命時,StorNVMe 會接著選擇 PS2,因為它是最深的電源狀態, (ENLAT+EXLAT) < = 500 毫秒。
新式待命和 DRIPS
為了完全支援新式待命,StorNVMe 會根據硬體平臺所提供的提示,將裝置轉換為適當的低電源狀態。 閒置狀態會因 F-State (比 F0) 更深到 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 電源組態設定,使其除了 DC 電源) 以外,在 AC 電源 (時取得最大省電。
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>
主動式電源管理
主動電源管理牽涉到 ( (效能或「效能」狀態) ,主要用於熱控制。 StorNVMe 會使用針對每個操作電源狀態報表的最大電源值,將裝置的操作電源狀態對應至邏輯 P 狀態。 當裝置處於作用中 (亦即具有未完成的 IO) ,StorNVMe 會透過 P 狀態轉換將裝置轉換為其中一種運作電源狀態。
Windows 10開發期間,有一組有限的 NVMe 裝置會實作一個以上的操作電源狀態。 根據我們的電源和效能測量,我們找不到使用任何但最高運作電源狀態的重大優點。 因此,使用預設組態時,您只會看到使用的最高運作電源狀態。
選擇的作業電源狀態取決於目前的「最大運作能力」提示。 此提示可以有 3 個不同的來源:
- 來自 Windows 熱架構的 被動冷卻回 呼。
- 最大電源等級電源組態設定值的變更。 (這可由系統電源配置變更或 AC/DC 電源來源中的變更觸發。)
- IOCTL_STORAGE_DEVICE_POWER_CAP要求。 來自這些來源的最低最大值是有效的最大作業電源值。 以下討論每個來源的機制。
一般而言,StorNVMe 會選擇小於或等於有效最大操作電源值的最高運作電源狀態。
例如,假設 NVMe 裝置具有下列電源狀態:
電源狀態 | 最大電源 | 操作? |
---|---|---|
PS0 | 9W | Yes |
PS1 | 6W | Yes |
PS2 | 4W | Yes |
來自這些來源的最低最大值是有效的最大作業電源值。 以下討論每個來源的機制。
一般而言,StorNVMe 會選擇小於或等於有效最大操作電源值的最高運作電源狀態。
根據預設,沒有最大電源等級,因此 StorNVMe 一律會選擇 PS0。 這相當於 100%。
如果 Windows 熱架構呼叫值為 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 熱架構被動冷卻回呼
透過 Storport) StorNVMe (向 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 進入和結束值的裝置。