Hyper-V + SLAT w Windows 8 i Windows Server 2012

Czy wiesz, że aby zadziałała nowa funkcja w Windows 8, czyli Client Hyper-V potrzebne jest w Twoim komputerze/procesorze coś, co nazywa się SLAT? A wiesz dlaczego jest to tam potrzebne? Postaram się w kilku słowach wyjaśnić w czym rzecz. Zapraszam.

Nie będę może opisywał czym jest Hyper-V, ale warto powiedzieć, że technologia ta jest już dostępna w Windows 8 i moim zdaniem będzie bardzo przydatna zarówno dla specjalistów IT jak i programistów (o tym jeszcze chwilę później).

W sumie temat zacząłem jeszcze pod koniec marca, kiedy napisałem post o różnicach w tym jak Hyper-V działa w klienckiej wersji (Windows 8) oraz serwerowej (Windows Server 2012) . Zainteresowanych odsyłam do tego posta, ale w kontekście dzisiejszego tekstu ważne jest to, że już wtedy pisząc o różnicach - pisałem, że jeden system wymaga, aby procesor wspierał SLAT, a drugi tego nie wymaga.

SLAT

O samym SLAT w dużym skrócie napisał przedwczoraj Grzesiek Tworek (MVP) na blogu TechNet. I zainteresowanych delikatnym pogłębieniem wiedzy odsyłam tam. Ale przy okazji tego posta dopiszę, że miałem mały wkład w PPS na końcu:

PPS Przyznaję się bez bicia, że pomyliłem systemy. Dziękuję Mariuszowi za zwrócenie uwagi, przepraszam i czym prędzej poprawiam. Tak czy inaczej, moim celem było wyjaśnienie skąd wziąć wiedzę o wsparciu/braku SLAT i tutaj akurat udało mi się nic nie namieszać.

Faktycznie zwróciłem Grześkowi uwagę na to, że SLAT jest wymagany wcale NIE przy Windows Server 2012 (jak to można by się domyślać na pierwsze logiczne przemyślenie), ale właśnie przy Windows 8. To faktycznie dość nietypowe, żeby coś tego typu było potrzebne w klienckim systemie a nie serwerowym.

Dlaczego Windows 8 potrzebuje SLAT?

imageCały ten post spowodowany został dwoma rzeczami. Po pierwsze przy instalacji Windows 8 na moim produkcyjnym komputerze (kilka dni temu) gdy tylko chciałem włączyć Client Hyper-V okazało się, że mój komputer odpowiedział mi to co widać po prawej, czyli że mój Dell E4300 nie posiada w swoim procesorze SLAT :(

Podzieliłem się tą tragedią ;) na Facebooku i w komentarzach pojawiły się małe teorie spiskowe, że ten SLAT w wersji klienckiej to jest tam zapewne z jakiś nietypowych powodów. Obiecałem, że wyjaśnię w czym rzecz...

No to do rzeczy - najpierw dwa ważne punkty raz jeszcze:

  • Windows 8 Client Hyper-V wymaga SLAT. Nie ma żadnej sztuczki (np. w rejestrze) aby to obejść
  • Windows Server 2012 Hyper-V nie wymaga SLAT. Aczkolwiek jest bardzo wskazane, aby był on w maszynie serwerowej bo zwiększa to jej wydajność. Jest też jeden scenariusz, gdzie SLAT w serwerze jest wymagany - to wtedy gdy chcecie używać RemoteFX! Dlaczego? To właśnie jest mocno powiązane z wymogiem SLAT w kliencie - ale o tym na koniec.

A teraz trochę dłuższe wyjaśnienie, ale od podstaw.

Jak być może kojarzycie - gdy włączamy Hyper-V (bez względu czy w kliencie czy serwerze) system hosta robi ciekawa "sztuczkę" - przenosi się do maszyny wirtualnej, która od tej pory jest tzw. parent partition. Jest to specjalna partycja, która ma bezpośredni dostęp do fizycznego sprzętu, ale nadal mimo wszystko np. CPU jest zwirtualizowane i zarządzane przez hypervisor.

I o ile sama architektura Hyper-V w wersji klienckiej i serwerowej jest z grubsza ta sama (różnice opisywałem we wspomnianym wcześniej poście), o tyle już tzw. "use cases" są inne - czyli do czego innego jest przewidywane Hyper-V z wersji klienckiej i do czego innego w serwerowej.

Do czego używamy Hyper-V?

I teraz poniekąd odpowiedź na pytanie wyżej + pewne stwierdzenie Tomka z wspomnianego wcześniej wątku na Facebooku:

(...) jak ostatnio czytałem odpowiedz w temacie klienta Hyper-V na client OS to usłyszałem że jestem MCS consultant i w ogóle dziwny i nikt poza MCS consultant Hyper-V na client OS nie potrzebuje. To teraz z chęcią dowiem się do czego go się używa :) i po co jest potrzebny :). (...)

Otóż faktycznie Client Hyper-V zostało pomyślane jako funkcjonalność dla dwóch grup: specjalistów IT i programistów. Ci pierwsi mogą sprawdzać nowe systemy bez bawienia się w serwer dedykowany do tego, mogą pokazywać systemy innym osobom (np. prezesom), mogą przeprowadzać analizy systemów serwerowych bez ich naruszania (bo maszyny wirtualne są identyczne w wersji serwerowej i klienckiej). Ci drudzy mogą testować stworzone przez nich oprogramowanie na różnych systemach przy różnych konfiguracjach.

I teraz te dwie grupy osób, swoich komputerów będą używać na co dzień wcale nie jako sprzęt, na którym będzie działała non stop wirtualizacja i nie będzie to jedyny/kluczowy element działania tych komputerów. W międzyczasie Ci ludzie będą oczekiwali od komputera maksymalnej wydajności (np. przy oglądaniu video czy słuchaniu muzyki). I w tej sytuacji bardzo ważna jest wydajność partycji parent w kontekście operacji graficznych i nie tylko.

Pozwolę sobie teraz (żeby nic nie przekręcić) zacytować dokładne wyjaśnienie z grupy produktowej:

While running Hyper-V in conjunction with WDDM graphics drivers, performance of the host machine is likely to suffer. This is due to the interaction between the WDDM drivers, which use non-cached and write-combined memory to increase performance, and the Hyper-V hypervisor, which needs to manage and maintain a Translation Lookaside Buffer (TLB) which describes what parts of physical memory are allocated to virtual machines. This interaction can cause almost constant flushing and rebuilding of the TLB, which dramatically impacts system performance.

I teraz zwróćcie uwagę na ostatnie określenie "almost constant flushing and rebuilding of the TLB". To ciągłe czyszczenie i przebudowywanie TLB jest mocno obciążające i dlatego wymaga wsparcia sprzętowego. I dlatego podjęta została decyzja o wymogu posiadania SLAT w kliencie.

Natomiast jeśli chodzi o Hyper-V w serwerze, to najlepszą praktyką jest oczywiście ograniczenie czegokolwiek w partycji parent. Tam nie powinien (tak mówią wskazówki) działać żaden soft - conajwyżej agenci do zarządzania. Dlatego tam SLAT nie jest wymagany, aczkolwiek mimo wszystko wskazany (zawsze to trochę lepsza wydajność).

I tak jak wspomniałem jedyna opcja gdzie SLAT jest wymagany w serwerze - to kiedy uruchomicie RemoteFX. Ale teraz chyba już nie muszę tłumaczyć dlaczego akurat w tym wypadku to jest wymagane...

I generalnie raz jeszcze się odniosę do posta Grześka, który napisał:

(...) za parę lat wszyscy podejdziemy do tego tak, jak dzisiaj podchodzimy do wymagania x64 dla serwerów. Po prostu tak jest i każdy o tym pamięta. (...)

W 100% się z nim zgadzam. Na razie może się to wydawać egzotyczne, że wymagany jest SLAT i że to tylko przeszkoda. Ale dosyć szybko zapomnimy o tym, bo sprzęt będzie miał to na pokładzie prawie zawsze...

Mam nadzieję, że mój post rozjaśnił trochę na temat wymagań SLAT w klienckiej wersji Hyper-V :) I niniejszym chciałbym Wam życzyć miłego długiego weekendu, a kibicom pełnego wrażeń otwarcia EURO 2012!

Aktualizacja (2013.01.25):
Znalazłem dosyć ciekawy post pogłębiający ten temat - zapraszam do przeczytania: Understanding High-End Video Performance Issues with Hyper-V