Udostępnij za pośrednictwem


NvMe

W tej sekcji opisano, jak sterownik NVMe firmy Microsoft (StorNVMe) zarządza zasilaniem i jakie opcje konfiguracji są dostępne. Specyfikacja NVMe umożliwia urządzeniom NVMe raportowanie do 32 stanów zasilania. Każdy stan zasilania ma następujące parametry:

  • Maksymalne zużycie energii (MP)
  • Operacyjne lub nieoperacyjne
  • Opóźnienie wpisu (ENLAT)
  • Opóźnienie wyjścia (EXLAT)
  • Względne wartości wydajności (względem innych stanów zasilania)

Funkcja StorNVMe odzwierciedla stany zasilania operacyjnego (urządzenie może obsługiwać operacje wejścia/wyjścia w tych stanach) na stany wydajności logicznej (czyli stany P). Podobnie, sterownik mapuje nieoperacyjne stany zasilania (urządzenie nie obsługuje operacji we/wy w takich stanach) na logiczne stany bezczynności (znane również jako stany F). W przypadku funkcji StorNVMe przejścia do tych stanów są w dużej mierze określane przez ogólny stan zasilania systemu. Specyfikacja NVMe definiuje funkcję autonomicznego przejścia stanu zasilania (APST). W przypadku obsługi nowoczesnego trybu wstrzymania, funkcja StorNVMe nie obsługuje urządzeń z włączoną funkcją APST.

Zarządzanie energią w trakcie pracy urządzenia

Funkcja StorNVMe może zdecydować się na przeniesienie urządzenia do stanu F po upływie określonego czasu bezczynności. Stan F jest wybierany na podstawie 3 czynników:

  1. Tolerancja opóźnienia, czyli jak szybko urządzenie może reagować w razie potrzeby. W przypadku języka F1 wartość TransitionLatency (ENLAT + EXLAT) nie powinna być większa niż tolerancja opóźnienia przejścia podstawowego. Dla stanu F2 i innych, głębszych stanów F (jeśli takie istnieją), wartość TransitionLatency nie powinna być większa niż tolerancja opóźnienia przejść wtórnych. W przeciwnym razie urządzenie może mieć trudności z przejściem do tych stanów F, co może wpłynąć na nowoczesne przejście w stan wstrzymania (na przykład wprowadzając długie opóźnienie w przejściu do DRIPS).
  2. Limit czasu bezczynności. Jest to czas od momentu zakończenia ostatniej operacji I/O na urządzeniu.
  3. Stan zasilania systemu. Jeśli system jest w aktywnym użyciu, Funkcja StorNVMe preferuje czas odpowiedzi. Oznacza to, że będą używane różne tolerancje opóźnień i czasy oczekiwania.

W tabeli przedstawiono domyślne limity czasu bezczynności i tolerancje opóźnień używane przez funkcję StorNVMe. Zobacz sekcję Ustawienia konfiguracji zasilania , aby dowiedzieć się, jak zmienić te ustawienia.

Stan zasilania systemu ACPI Limit czasu bezczynności podstawowej Tolerancja opóźnienia przy przejściu podstawowym Pomocniczy limit czasu bezczynności Tolerancja opóźnienia przejścia wtórnego
S0 (praca) — schemat wydajności 200 ms 0 ms (AC) / 10 ms (DC) 2000 ms 0 ms
S0 (praca) — schemat zrównoważony 200 ms (AC) / 100ms (DC) 15 ms (AC) / 50ms (DC) 2000 ms (AC) / 1000 ms (DC) 100 ms
S0 (praca) — schemat oszczędzania energii 100 ms 100 ms (AC) / 200ms (DC) 1000 ms 200 ms
Niski pobór mocy S0 (nowoczesny tryb gotowości) 50 ms 500 ms N/A N/A

Po wygaśnięciu limitu czasu bezczynności sterownik przejdzie przez wewnętrzną tabelę stanów zasilania i wybierze najgłębszy stan zasilania, w którym wartość ENLAT+EXLAT jest mniejsza lub równa bieżącej tolerancji opóźnienia przejścia.

Załóżmy na przykład, że urządzenie NVMe ma następujące stany zasilania i że wystąpiło upłynięcie czasu bezczynności.

Stan energii Opóźnienie wpisu (ENLAT) Opóźnienie wyjścia (EXLAT)
PS0 5us 5us
PS1 10 ms 300us
PS2 50 ms 10 ms

Gdy system jest zasilany prądem stałym i nie znajduje się w nowoczesnym stanie gotowości, StorNVMe wybierze PS1, ponieważ jest to najgłębszy stan oszczędzania energii, gdzie (ENLAT+EXLAT) <= 50 ms. Podobnie, gdy system wejdzie w Modern Standby, StorNVMe wybierze PS2, ponieważ jest to najgłębszy stan zasilania, w którym (ENLAT+EXLAT) <= 500ms.

Nowoczesny tryb gotowości i DRIPS

Aby w pełni obsługiwać Modern Standby, funkcja StorNVMe przeniesie urządzenie do odpowiedniego trybu oszczędzania energii na podstawie wskazówek dostarczonych przez sprzętową platformę. Stan bezczynności będzie się wahać między stanem F (głębszym niż F0) do D3 Cold. Niektóre platformy wymagają D3 Cold w przypadku nowoczesnego wstrzymania. Zależy to od SoC, więc skontaktuj się z producentem układów scalonych, aby uzyskać więcej informacji. Obsługę D3 urządzeń magazynujących w systemach z nowoczesnym trybem gotowości można włączyć zgodnie z opisem tutaj.

Urządzenia powinny obsługiwać RTD3 z krótką latencją wznawiania, aby ułatwić systemom w trybie Modern Standby spełnienie wymagania dotyczącego 1-sekundowego opóźnienia przy wznawianiu działania systemu. RTD3 Resume Latency (RTD3R) odnosi się do opóźnienia wznowienia z trybu D3cold i należy zgłaszać wartość niezerową ≤ 100 ms. RTD3R opisano w sekcji 8.4.4 specyfikacji NVMe.

Ustawienia konfiguracji zasilania

System Windows 10 obsługuje następujące ustawienia zasilania NVMe w celu dostosowania wydajności energetycznej.

Limit czasu bezczynności podstawowego urządzenia NVMe

Następujące ustawienie konfiguracji zasilania umożliwia zmianę limitu czasu bezczynności urządzenia podstawowego używanego przez funkcję 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

Następujące ustawienie konfiguracji zasilania umożliwia zmianę podstawowej wartości tolerancji opóźnienia przejścia używanej przez program StorNVMe podczas obliczania stanu bezczynności. Jest to wartość porównywana z sumą wartości ENLAT i EXLAT po wygaśnięciu limitu czasu bezczynności. Im większa ta wartość, tym bardziej prawdopodobne będzie wybranie głębszego stanu zasilania.

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

Pomocniczy limit czasu bezczynności NVMe

Następujące ustawienie konfiguracji zasilania umożliwia zmianę limitu czasu bezczynności urządzenia pomocniczego używanego przez funkcję 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

Następujące ustawienie konfiguracji zasilania umożliwia zmianę pomocniczej wartości tolerancji opóźnienia przejścia używanej przez program StorNVMe podczas obliczania stanu bezczynności. Jest to wartość porównywana z sumą wartości ENLAT i EXLAT po wygaśnięciu limitu czasu bezczynności. Im większa ta wartość, tym większe prawdopodobieństwo wyboru bardziej zaawansowanego stanu oszczędzania energii.

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

Aby zmienić wartość danego schematu zasilania, użyj:

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

Nie zapomnij zastosować wartości przy użyciu: powercfg –setactive <scheme>

Stany podrzędne PCIe ASPM i L1

W zależności od platformy można zauważyć, że urządzenie NVMe może wprowadzać stany podrzędne L1 w przypadku zasilania prądu stałego, ale nie zasilania prądu sieciowego. W takim przypadku może być konieczne zmianę ustawienia konfiguracji zasilania PCIe ASPM, tak aby uzyskać maksymalne oszczędności energii w przypadku zasilania prądem zmiennym (oprócz zasilania prądu stałego).

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

Aby zmienić wartość, użyj:

powercfg -setacvalueindex <scheme> sub_pciexpress aspm <value>

z indeksem 002 z góry w celu uzyskania maksymalnej oszczędności energii. Nie zapomnij ustawić wartości przy użyciu: powercfg –setactive <scheme>

Aktywne zarządzanie energią

Aktywne zarządzanie energią obejmuje "stany P" (czyli stany wydajnościowe lub energetyczne) i jest przeznaczone przede wszystkim do kontroli termicznej. StorNVMe mapuje stany zasilania operacyjnego urządzenia na logiczne stany P przy użyciu maksymalnej wartości zasilania zgłoszonej dla każdego stanu zasilania operacyjnego. Gdy urządzenie jest aktywne (tj. ma zaległe operacje we/wy), urządzenie StorNVMe przeniesie urządzenie do jednego ze stanów zasilania operacyjnego za pośrednictwem przejścia P-State.

Podczas opracowywania systemu Windows 10 istniał ograniczony zestaw urządzeń NVMe, które zaimplementowały więcej niż jeden stan zasilania operacyjnego. Na podstawie naszych pomiarów mocy i wydajności nie znaleźliśmy znaczącej korzyści z używania żadnego, ale najwyższego stanu zasilania operacyjnego. W związku z tym w przypadku konfiguracji domyślnej będzie widoczny tylko najwyższy stan zasilania operacyjnego.

Wybrany stan zasilania operacyjnego zależy od bieżącej wskazówki "maksymalnej mocy operacyjnej". Ta wskazówka może mieć 3 różne źródła:

  • Pasywne wywołanie zwrotne chłodzenia z systemu Windows Thermal Framework.
  • Zmiana wartości ustawienia maksymalnego poziomu zasilania na poziomie zasilania. (Może to być wyzwalane przez zmianę schematu zasilania systemu lub źródła zasilania AC/DC).
  • Żądanie IOCTL_STORAGE_DEVICE_POWER_CAP . Najniższa wartość maksymalna z tych źródeł jest efektywną maksymalną wartością mocy operacyjnej. Mechanika każdego z tych źródeł została omówiona poniżej.

Ogólnie rzecz biorąc, Funkcja StorNVMe wybierze najwyższy stan zasilania operacyjnego, który jest mniejszy lub równy efektywnej maksymalnej wartości mocy operacyjnej.

Załóżmy na przykład, że urządzenie NVMe ma następujące stany zasilania:

Stan energii Maksymalna moc Operacyjne?
PS0 9W Tak
PS1 6W Tak
PS2 4W Tak

Najniższa wartość maksymalna z tych źródeł jest efektywną maksymalną wartością mocy operacyjnej. Mechanika każdego z tych źródeł została omówiona poniżej.

Ogólnie rzecz biorąc, Funkcja StorNVMe wybierze najwyższy stan zasilania operacyjnego, który jest mniejszy lub równy efektywnej maksymalnej wartości mocy operacyjnej.

Domyślnie nie ma maksymalnego poziomu zasilania, więc funkcja StorNVMe zawsze wybierze ps0. Jest to odpowiednik 100%.

Jeśli system Windows Thermal Framework wywołuje mechanizm wywołania zwrotnego dla pasywnego chłodzenia z wartością 50%, to skutkuje to bezwzględną wartością mocy równą (50% * (9W – 4W)) + 4W = 6W. Funkcja StorNVMe zapewni wtedy, że gdy urządzenie jest aktywne, będzie zawsze znajdować się w ps1, ponieważ wartość maksymalnej mocy tego stanu wynosi 6W.

Następnie proces w trybie użytkownika wysyła żądanie IOCTL_STORAGE_DEVICE_POWER_CAP do dysku z wartością 5W. StorNVMe wybierze teraz PS2, ponieważ jest to najwyższy stan zasilania operacyjnego, którego maksymalna wartość mocy (4W) jest mniejsza niż maksymalnym wymogom operacyjnym na poziomie 5W.

Jeśli podane maksymalne wymaganie dotyczące zasilania operacyjnego jest mniejsze niż maksymalna wartość zasilania najniższego stanu zasilania operacyjnego, oczekuje się po prostu wybrania najniższego stanu zasilania operacyjnego. W naszym przykładzie, jeśli podane maksymalne wymaganie dotyczące zasilania operacyjnego wynosiło 3W, StorNVMe wybierze PS2, ponieważ nie ma stanu zasilania operacyjnego z maksymalną wartością mocy 3W lub mniejszą.

Jeśli później maksymalne wymaganie dotyczące zasilania operacyjnego zmieni się na 9W, funkcja StorNVMe wróci do wybrania ps0, gdy urządzenie jest aktywne.

Załóżmy na przykład, że urządzenie NVMe ma następujące stany zasilania:

Wywołanie zwrotne systemu Windows Thermal Framework dla chłodzenia pasywnego

Urządzenie StorNVMe (za pośrednictwem storportu) rejestruje interfejs chłodzenia cieplnego w systemie Windows Thermal Framework, co umożliwia systemowi ograniczanie przepustowości urządzenia NVMe za pośrednictwem tej struktury. Specyfika tej kwestii nie mieści się w zakresie tego dokumentu, ale ogólnie platforma określa strefy cieplne i progi za pośrednictwem ACPI, które system Windows Thermal Framework następnie wykorzystuje do ograniczania pracy urządzeń za pośrednictwem wywołań zwrotnych do ich sterowników.

Maksymalne ustawienie konfiguracji zasilania na poziomie zasilania operacyjnego

Następujące ustawienie konfiguracji zasilania może służyć do zmiany maksymalnego poziomu zasilania operacyjnego dla różnych schematów zasilania systemu i źródła zasilania 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: %

Aby zmienić wartość danego schematu zasilania, użyj:

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

Nie zapomnij zastosować wartości przy użyciu: powercfg –setactive <scheme>

IOCTL_STORAGE_DEVICE_POWER_CAP – interfejs kontroli sterowania urządzeniem, ograniczenie mocy

Ten IOCTL można wysłać do urządzenia pamięci masowej, aby zmienić maksymalny poziom mocy operacyjnej. Aby uzyskać więcej informacji, zobacz dokumentację buforu wejściowego/wyjściowego, STORAGE_DEVICE_POWER_CAP.

Wyłączanie/hibernacja

Gdy system jest zamykany lub wstrzymywany, StorNVMe ustawia pole Powiadomienie o zamknięciu urządzenia (CC.SHN) na 1. Funkcja StorNVMe następnie czeka na zgłoszone opóźnienie wejścia RTD3 urządzenia, aby wskazać, że jest gotowe (poprzez zaktualizowanie pola stanu zamknięcia (CSTS.SHST) do 2). Jeśli nie zostanie zgłoszona żadna wartość opóźnienia wpisu, funkcja StorNVMe użyje wartości domyślnej 5 sekund. W takim przypadku, jeśli urządzenie potrzebuje więcej niż 5 sekund, system kontynuuje procedurę zamykania lub hibernacji bez dalszego sprawdzania urządzenia NVMe. Producenci OEM powinni używać tylko urządzeń, które zgłaszają wartości wejścia i wyjścia RTD3 dla nowoczesnych systemów rezerwowych.