Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Począwszy od systemu Windows 8, zachowanie wykrywania limitu czasu procesora GPU i odzyskiwania (TDR) umożliwia resetowanie części poszczególnych kart fizycznych, zamiast wymagać resetowania całej karty.
Aby uzyskać więcej informacji, zobacz Wykrywanie przekroczenia limitu czasu i odzyskiwanie (TDR).
Wymagania
- Minimalna wersja WDDM: 1.2
- Minimalna wersja systemu Windows: 8
- Implementacja sterownika — pełna grafika i tylko renderowanie: obowiązkowe
- Wymagania i testy WHLK: Device.Graphics... TDRResiliency
Interfejs sterownika urządzenia TDR (DDI)
Aby uwzględnić tę zmianę zachowania, sterowniki miniportów wyświetlania w trybie jądra (KMD) mogą implementować następujące funkcje:
KMD wskazuje obsługę tych funkcji, ustawiając członka DXGK_DRIVERCAPS.SupportPerEngineTDR, w którym musi zaimplementować wszystkie wymienione funkcje.
Sterownik obsługujący te funkcje musi również obsługiwać synchronizację na poziomie zerowym dla funkcji DxgkDdiCollectDbgInfo . To wymaganie zapewnia, że wywołania KMD poziomu zero mogą być kontynuowane, jeśli operacja resetowania ich nie wpływa. Zobacz uwagi DxgkDdiCollectDbgInfo.
Następujące struktury są skojarzone z powyższymi funkcjami:
- DXGK_DRIVERCAPS
- DXGK_ENGINESTATUS
- DXGKARG_QUERYDEPENDENTENGINEGROUP
- DXGKARG_QUERYENGINESTATUS
- DXGKARG_RESETENGINE
Nodes
Podobnie jak w przypadku wymienionych funkcji TDR, węzeł jest jedną z wielu części pojedynczego fizycznego adaptera, które można zaplanować niezależnie. Na przykład węzeł 3-D, węzeł dekodowania wideo i węzeł kopiowania mogą istnieć w tej samej karcie fizycznej, a każdy z nich może być przypisany oddzielny numer porządkowy węzła. To przypisanie jest przechowywane w DXGKARG_QUERYDEPENDENTENGINEGROUP.NodeOrdinal w wywołaniu DxgkDdiQueryDependentEngineGroup.
Liczba węzłów w fizycznym adapterze jest raportowana przez wyświetlanie sterownika miniportu w członku NbAsymetricProcessingNodesDXGK_DRIVERCAPS.GpuEngineTopology.
Wartość porządkowa węzła jest przekazywana w elemencie NodeOrdinal struktury DXGKARG_CREATECONTEXT podczas tworzenia kontekstu.
Silniki
Podobnie jak w przypadku funkcji DDI TDR, silnik jest jednym z wielu fizycznych adapterów (lub GPU), które wspólnie działają jako jeden adapter logiczny. Program Dxgkrnl obsługuje takie konfiguracje, ale wymaga, aby każda jednostka miała taką samą liczbę węzłów.
Na przykład harmonogram GPU uwzględnia silnik 0 odpowiadający fizycznemu adapterowi 0. Aparat 0 musi mieć taką samą liczbę węzłów jak aparat 1, który odpowiada adapterowi 1.
Wartość porządkowa silnika podczas tworzenia kontekstu
Po utworzeniu kontekstu jeden bit odpowiadający wartości porządkowej silnika jest ustawiany w członkowskim elemencie EngineAffinity struktury DXGKARG_CREATECONTEXT. Elementem członkowskim EngineOrdinal tego i innych struktur związanych z harmonogramem jest indeks oparty na zera. Wartość EngineAffinity to 1 <<EngineOrdinal, a EngineOrdinal jest najwyższą pozycją bitową w powiązaniu silnika.
Pakiety, których nie dotyczy resetowanie silnika
Harmonogram GPU może poprosić sterownik o ponowne przesłanie pakietów, które zostały przesłane za późno do kolejki sprzętowej silnika, aby zostały w pełni przetworzone przed zakończeniem resetowania silnika. Sterownik musi postępować zgodnie z tymi wytycznymi, aby ponownie przesłać takie pakiety:
- Pakiety stronicowania: harmonogram procesora GPU prosi sterownik o ponowne przesłanie pakietów stronicowania z ich oryginalnymi identyfikatorami ogrodzenia i w takiej samej kolejności, jak pierwotnie przesłane. Wszelkie takie pakiety są ponownie przesyłane przed dodaniu nowych pakietów do kolejki sprzętowej.
- Pakiety render: Harmonogram GPU przypisuje pakietom render nowe identyfikatory zapory, a następnie ponownie przesyła je.
Wywołanie sekwencji w celu zresetowania silnika
Gdy operacja DxgkDdiResetEngine powiedzie się, harmonogram procesora GPU gwarantuje, że wartość LastAbortedFenceId zwrócona z wywołania resetowania aparatu odpowiada:
- Istniejący identyfikator ogrodzenia w kolejce sprzętowej.
- Ostatni ukończony identyfikator ogrodzenia na procesorze GPU. Taka sytuacja może wystąpić, gdy kolejka sprzętowa opróżnia się po wykryciu przekroczenia limitu czasu procesora graficznego (GPU), ale przed wywołaniem funkcji zwrotnej do resetowania silnika.
Sterownik musi zawsze zachować ostatnio ukończoną wartość identyfikatora ogrodzenia na procesorze GPU, ponieważ ten identyfikator ogrodzenia jest wymagany do ustawienia dmaPreempted.LastCompletedFenceId elementu członkowskiego DXGKARGCB_NOTIFY_INTERRUPT_DATA struktury powiadomień przerwania przedwłaszczania. Ostatni ukończony identyfikator ogrodzenia powinien być zaktualizowany tylko w następujących sytuacjach:
- Po zakończeniu pakietu (nieprzerwanego), identyfikator ostatniego ukończonego ogrodzenia powinien zostać ustawiony na identyfikator ogrodzenia zakończonego pakietu.
- Gdy DxgkDdiResetEngine zakończy się powodzeniem, ostatni ukończony identyfikator ogrodzenia powinien być ustawiony na wartość elementu LastCompletedFenceId, zwróconego przez wywołanie resetu silnika.
- W przypadku resetowania całego adaptera ostatni ukończony identyfikator ogrodzenia na wszystkich węzłach powinien być zaawansowany do ostatniego przesłanego identyfikatora ogrodzenia w momencie zresetowania.
Oto chronologiczna sekwencja pomyślnego zresetowania silnika, jak widać w harmonogramie GPU:
Zostanie podjęta próba preempcji.
Wykryto limit czasu procesora GPU.
Harmonogram GPU tworzy migawkę ostatnich przesłanych i ukończonych identyfikatorów sygnałów granicznych, a przerwania z silnika, który przekroczył limit czasu, są ignorowane. Ta kombinacja stanowi operację atomową na poziomie przerwań urządzenia.
Jeśli w tej chwili nie ma pakietów w kolejce sprzętowej, zakończ. Taka sytuacja może wystąpić, gdy pakiet został ukończony w przedziale czasu między krokami 2 i 3.
Wszystkie kolejkowane kontrolery DPC są opróżniane.
Przygotuj się do zresetowania silnika.
Wywołaj metodę DxgkDdiResetEngine.
Jeśli element LastAbortedFenceId jest mniejszy niż ostatni ukończony identyfikator bariery lub jest większy niż ostatni przesłany identyfikator bariery, Dxgkrnl powoduje sprawdzenie błędów systemu. W pliku zrzutu awaryjnego błąd jest zanotowany przez komunikat BugCheck 0x119, który ma następujące cztery parametry:
- 0xA, co oznacza, że kierowca zgłosił nieprawidłowy identyfikator przerwanego ogrodzenia
- LastAbortedFenceId wartość zwrócona przez sterownik
- Ostatni ukończony identyfikator ogrodzenia
- Wewnętrzny parametr systemu operacyjnego
Jeśli wartość LastAbortedFenceId jest prawidłowa, przejdź do odzyskiwania po zresetowaniu silnika w następujący sposób. Jeśli reset silnika wpłynął na pakiet stronicowania, harmonogram procesora GPU następuje po resecie silnika resetowaniem całego adaptera. Wszystkie urządzenia, które posiadają alokacje przywoływane przez ten pakiet stronicowania, również są umieszczane w stanie błędu. Samo urządzenie systemowe nie jest umieszczane w stanie błędu i wznawia wykonywanie po zakończeniu resetowania.
Przypadki szczególne
Może wystąpić szczególna sytuacja, gdy pakiet zostanie ukończony na GPU między etapami 3 a 7. W takim przypadku sterownik powinien ustawić wartość LastAbortedFenceId na identyfikator ogrodzenia ostatniego ukończonego pakietu, jeśli w kolejce sprzętowej nie ma pakietów z punktu widzenia sterownika. Z punktu widzenia harmonogramu wydaje się, że taki pakiet został przerwany. Dlatego harmonogram umieści odpowiednie urządzenie w stanie błędu, mimo że pakiet został ostatecznie ukończony.
Jeśli sterownik nie może wykonać operacji resetowania z jednego z następujących powodów, powinien zwrócić kod stanu błędu:
- Sprzęt jest w nieprawidłowym stanie.
- Sprzęt nie może zresetować węzłów.
Jeśli planista GPU otrzyma kod stanu błędu, wykonuje operację resetowania i ponownego uruchamiania karty graficznej zgodnie z procedurą TDR obowiązującą przed systemem Windows 8.
Nawet jeśli sterownik zdecyduje się na zachowanie TDR systemu Windows 8 lub nowszego, istnieją przypadki, gdy harmonogram procesora GPU żąda zresetowania i ponownego uruchomienia całej karty logicznej. Dlatego sterownik musi nadal implementować funkcje DxgkDdiResetFromTimeout i DxgkDdiRestartFromTimeout , a ich semantyka pozostaje taka sama jak przed systemem Windows 8. Podczas próby zresetowania adaptera fizycznego za pomocą DxgkDdiResetEngine prowadzi do zresetowania adaptera logicznego, polecenie !analyze debuggera Windows pokazuje, że wartość TdrReason kontekstu odzyskiwania TDR jest ustawiona na nową wartość TdrEngineTimeoutPromotedToAdapterReset = 9.