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.
W tym artykule opisano funkcję śledzenia bitów brudnych, która jest obsługiwana w systemie Windows 11 w wersji 24H2 (WDDM 3.2). Sterowniki obsługujące migrację na żywo na urządzeniach równoległych procesora GPU muszą również obsługiwać śledzenie bitów zanieczyszczonych.
Wprowadzenie
Ponieważ procesory GPU w scenariuszach w chmurze stają się bardziej popularne, coraz większa potrzeba upewnienia się, że migracja maszyn wirtualnych z jednego hosta fizycznego do innego utrzymuje rozsądną wydajność. Ta potrzeba nie służy tylko zmniejszeniu wpływu na użytkowników, ale także zapobieganiu problemom, takim jak przekroczenia limitu czasu żądań TCP w czasie migracji maszyny wirtualnej.
Transferowanie zawartości pamięci między hostami fizycznymi odbywa się w dwóch ogólnych przebiegach:
Brownout: W okresie brownout maszyna wirtualna jest nadal uruchomiona, ale system wykonuje iteracyjne zapisywanie wszelkich zanieczyszczonych danych. Celem jest to, że ilość danych brudnych podczas każdej iteracji staje się mniejsza, dopóki nie zbiegnie się z mniejszym podzbiorem danych, które można szybko skopiować. Ta ilość danych różni się w zależności od obciążenia maszyny i nie ma gwarancji, że osiągnie konkretny rozmiar.
Zaciemnienie: w okresie zaciemnienia maszyna wirtualna jest wstrzymana i wszystkie pozostałe zanieczyszczone dane są kopiowane. Ta kopia gwarantuje, że wynikowe dane na maszynie docelowej są w tym samym stanie co źródło.
Bez śledzenia brudnych bitów system musi polegać na jednej pełnej kopii buforu ramek GPU (VRAM) w okresie zaciemnienia. Aby obsługiwać przekazywanie brownout, sprzęt musi być w stanie aktywnie śledzić brudne strony pamięci i zgłaszać je z powrotem do systemu operacyjnego, aby system operacyjny wiedział dokładnie, które strony pamięci skopiować.
Szczegółowy projekt
Możliwości raportowania
Podczas inicjowania adaptera Dxgkrnl wysyła do sterownika zapytanie o informacje o formacie brudnego płaszczyzny bitowej używanej przez sprzęt; a mianowicie rozmiar strony (lub ilość danych) reprezentowany przez każdy bit.
Uruchamianie i zatrzymywanie brudnego przechwytywania
Jeśli śledzenie brudnych informacji ma wysoki koszt wydajności sprzętu, warto włączyć tylko brudne śledzenie w okresie brownout. W tym czasie minimalizacja kosztów migracji jest ważniejsza niż potencjalny wpływ śledzenia na wydajność.
Jeśli jednak w ogóle nie ma wpływu na wydajność, istnieje korzyść, aby zawsze włączać to zachowanie. Niektórzy użytkownicy mogą nie wykonywać dużych obciążeń procesora GPU na maszynach wirtualnych, więc pamięć może nie być mocno brudna od samego początku. Włączenie zanieczyszczonego śledzenia bitów w czasie uruchamiania, a następnie pierwsza iteracja brownout może natychmiast używać zanieczyszczonych danych bez konieczności pełnej kopii buforu ramki. Jeśli ilość brudnej pamięci użytkownika jest mała (na przykład użytkownik wykonuje przede wszystkim obciążenia procesora CPU), oszczędności kosztów migracji mogą być dość znaczące.
Wykonywanie zapytań dotyczących zanieczyszczonych bitów
Brudne informacje są reprezentowane jako bitplany brudnych stron. Każdy bit na płaszczyźnie bitowej reprezentuje jedną "stronę" pamięci. Rozmiar strony zanieczyszczonych danych nie musi być zgodny z rozmiarami stron naturalnych adresowania wirtualnego na procesorze GPU (na przykład 4 KB/64 KB). Może to być czymkolwiek optymalnym dla konkretnego sprzętu. Sterownik zgłasza ten rozmiar strony podczas inicjowania.
W okresie ograniczenia zasilania Dxgkrnl wysyła zapytanie do sprzętu pod kątem brudnych danych między każdą iteracją. W tej chwili sterownik musi mieć możliwość atomowego odpytywania i resetowania danych płaszczyzny bitowej. Oznacza to, że sprzęt musi mieć możliwość wykonywania zapytań o wartość i resetowania jej do zera w jednej operacji niepodzielnej, aby zapobiec utracie danych związanych z brudnymi informacjami.
Maszyny wirtualne nie muszą być migrowane do tego samego miejsca docelowego, dlatego migracja buforu ramki odbywa się dla każdego wystąpienia wirtualnego procesora GPU. W związku z tym sterownik musi mieć możliwość wykonywania zapytań o informacje dotyczące płaszczyzny bitowej dla określonego podzakresu ogólnego buforu ramki, który reprezentuje to konkretne wirtualne wystąpienie procesora GPU. Na przykład 8 GB procesora GPU podzielone cztery sposoby muszą być w stanie indywidualnie wykonywać zapytania i resetować bity płaszczyzny bitowej dla każdego zakresu VRAM 2 GB oddzielnie bez wpływu na inne zanieczyszczone dane bitowe.
Zmiany DDI
Możliwości
Następujące limity są dodawane do DXGK_QUERYADAPTERINFOTYPE.
DXGKQAITYPE_DIRTYBITTRACKINGCAPS
System teraz wywołuje funkcję DxgkDdiQueryAdapterInfo z DXGK_QUERYADAPTERINFOTYPE ustawionym na DXGKQAITYPE_DIRTYBITTRACKINGCAPS podczas inicjowania adaptera, aby określić możliwości sterowników i sprzętu w zakresie śledzenia bitów zmienionych.
KMD powinno wypełnić podaną strukturę DXGK_DIRTY_BIT_TRACKING_CAPS, na którą wskazuje pOutputData.
DXGKQAITYPE_DIRTYBITTRACKINGSEGMENTCAPS
Jeśli KMD ustawiła DirtyBitTrackingSupported na TRUE, system wywołuje funkcję DxgkDdiQueryAdapterInfo z DXGK_QUERYADAPTERINFOTYPEDXGKQAITYPE_DIRTYBITTRACKINGSEGMENTCAPS dla każdego segmentu pamięci w systemie w celu zapytania o informacje o obsłudze śledzenia bitów brudnych.
Usługa KMD powinna wypełnić podaną strukturę DXGK_DIRTY_BIT_TRACKING_SEGMENT_CAPS, na którą wskazuje pOutputData.
Podstawa pamięci DDI
Śledzenie operacji modyfikacji w pamięci VRAM dotyczy alokacji, które mogą nie być przydzielane w sposób ciągły. Początkowe użycie w migracji na żywo dotyczy na przykład śledzenia rezerwy framebuffer dla funkcji wirtualnej. W związku z tym adresy fizyczne reprezentowane w śledzeniu brudnych bitów składają się z kolekcji zakresów reprezentujących alokację obsługiwaną.
Ważne jest, aby upewnić się, że operacje są dopasowane do tych samych zakresów. W wielu przypadkach to dopasowanie musi być niezmiennym wymogiem interfejsów, aby zapewnić prawidłowe śledzenie stanu. Aby ułatwić śledzenie za pomocą usługi KMD, wprowadzono następujące interfejsy: