Udostępnij przez


Zarządzanie typami harmonogramu Hyper-V funkcji hypervisor

W tym artykule opisano tryby logiki planowania procesora wirtualnego w systemach Windows Server i Windows. Te tryby lub typy harmonogramów określają, w jaki sposób hypervisor Hyper-V przydziela i zarządza pracą pomiędzy procesorami wirtualnymi gościa. Administrator hosta Hyper-V może wykonywać następujące czynności:

  • Wybierz typy harmonogramów hypervisora najlepiej dopasowane do maszyn wirtualnych.
  • Konfigurowanie maszyn wirtualnych tak, aby korzystały z logiki planowania.

Background

Przed rozważeniem logiki i kontroli związanych z planowaniem procesora wirtualnego Hyper-V ważne jest zrozumienie niektórych pojęć, takich jak jednoczesne wielowątkowanie (SMT) i jak Hyper-V wirtualizuje procesory.

Zrozumienie SMT

SMT to technika w nowoczesnym projektowaniu procesorów, która umożliwia oddzielnym, niezależnym wątkom wykonawczym współdzielenie zasobów procesora. SMT zwykle daje niewielką poprawę wydajności obciążeń. Umożliwia równoległe obliczenia, gdy jest to możliwe, zwiększając przepływność instrukcji. Jednak gdy wątki konkurują ze sobą dla współużytkowanych zasobów procesora, czasami nie ma zauważalnej poprawy wydajności. Może nawet wystąpić niewielki spadek wydajności.

Aby można było używać protokołu SMT z systemem Windows Server, musisz mieć zgodny procesor. Procesory z technologią Intel Hyper-Threading Technology (Intel HT Technology) lub Advanced Micro Devices (AMD) są przykładami zgodnych procesorów.

Na potrzeby tego artykułu opisy protokołu SMT i sposobu ich użycia przez Hyper-V mają zastosowanie w równym stopniu do systemów Intel i AMD.

Omówienie sposobu wirtualizacji procesorów Hyper-V

Zanim rozważysz typy harmonogramów hypervisora, powinieneś zrozumieć architekturę Hyper-V. Aby uzyskać szczegółowe podsumowanie sposobu działania tej architektury, zobacz omówienie technologiiHyper-V. Na razie należy pamiętać o następujących pojęciach:

  • Hyper-V tworzy partycje maszyn wirtualnych i zarządza nimi, przydzielając i udostępniając zasoby obliczeniowe w nich pod kontrolą funkcji hypervisor. Partycje zapewniają silne granice izolacji między wszystkimi maszynami wirtualnymi gościa i między maszynami wirtualnymi gościa a partycją główną.

  • Partycja główna jest partycją maszyny wirtualnej, chociaż ma unikatowe właściwości i większe uprawnienia niż maszyny wirtualne gościa. Partycja główna:

    • Świadczy usługi zarządzania, które kontrolują wszystkie maszyny wirtualne gości.
    • Zapewnia obsługę urządzeń wirtualnych dla gości.
    • Zarządza wszystkimi wejściami i wyjściami urządzeń dla maszyn wirtualnych gości.

    Nie zalecamy uruchamiania żadnych obciążeń aplikacji w partycji głównej.

  • Między procesorami wirtualnymi partycji głównej a podstawowymi procesorami logicznymi istnieje mapowanie jeden do jednego. Procesor wirtualny hosta zawsze działa na tym samym podstawowym procesorze logicznym. Nie ma migracji procesorów wirtualnych partycji głównej.

  • Domyślnie procesory logiczne hostujące procesory wirtualne partycji głównej mogą również uruchamiać procesory wirtualne gościa.

  • Hypervisor może zaplanować uruchomienie wirtualnego procesora gościa na dowolnym dostępnym procesorze logicznym. Harmonogram funkcji hypervisor próbuje rozważyć lokalność pamięci podręcznej czasowej, topologię niezwiązanego dostępu do pamięci (NUMA) i wiele innych czynników podczas planowania procesora wirtualnego gościa. Jednak ostatecznie procesor wirtualny może być zaplanowany na dowolnym procesorze logicznym hosta.

Typy plannerów Hypervisor

Funkcja hypervisor Hyper-V obsługuje kilka trybów logiki harmonogramu, które określają, w jaki sposób funkcja hypervisor planuje procesory wirtualne na podstawowych procesorach logicznych. Te typy harmonogramów to:

Klasyczny harmonogram

Klasyczny harmonogram jest domyślnym harmonogramem używanym we wszystkich wersjach Hyper-V starszych niż Windows Server 2019. Klasyczny harmonogram zapewnia model planowania sprawiedliwego udziału, przepraszający i cykliczny dla procesorów wirtualnych gościa.

Klasyczny typ harmonogramu jest odpowiedni dla większości tradycyjnych zastosowań Hyper-V, takich jak chmury prywatne, dostawcy hostingu itd. Charakterystyki wydajności klasycznego typu harmonogramu są zoptymalizowane pod kątem obsługi szerokiej gamy scenariuszy wirtualizacji, takich jak:

  • Nadsubskrybowanie procesorów wirtualnych względem procesorów logicznych.
  • Uruchamianie wielu heterogenicznych maszyn wirtualnych i obciążeń w tym samym czasie.
  • Uruchamianie maszyn wirtualnych o wysokiej wydajności na większą skalę.
  • Obsługa pełnego zestawu funkcji Hyper-V bez ograniczeń i innych scenariuszy.

Podstawowy harmonogram

Harmonogram rdzeni funkcji hypervisor jest alternatywą dla klasycznej logiki harmonogramu. Podstawowy harmonogram jest dostępny od systemów Windows Server 2016 i Windows 10 w wersji 1607. Podstawowy harmonogram oferuje silną granicę zabezpieczeń dla izolacji obciążenia gościa. Zmniejsza również zmienność wydajności obciążeń wewnątrz maszyn wirtualnych działających na hoście wirtualizacji z obsługą protokołu SMT. Podstawowy harmonogram obsługuje uruchamianie zarówno maszyn wirtualnych SMT, jak i innych niż SMT w tym samym czasie na tym samym hoście wirtualizacji z włączoną obsługą protokołu SMT.

Podstawowy harmonogram:

  • Używa topologii SMT hosta wirtualizacji.
  • Opcjonalnie udostępnia pary SMT dla maszyn wirtualnych uruchomionych jako gości.
  • Planuje grupy procesorów wirtualnych gościa z tej samej maszyny wirtualnej na grupy procesorów logicznych SMT.

Ta praca odbywa się symetrycznie. Jeśli procesory logiczne znajdują się w grupach dwóch, procesory wirtualne są zaplanowane w grupach dwóch, a rdzeń nigdy nie jest współużytkowany między maszynami wirtualnymi. Podczas planowania procesora wirtualnego dla maszyny wirtualnej bez włączonego protokołu SMT procesor wirtualny zużywa cały rdzeń podczas jego uruchamiania. W przypadku korzystania z podstawowego harmonogramu:

  • Tworzy ona silną granicę zabezpieczeń dla izolacji pracy gościa. Procesory wirtualne gościa mogą być uruchamiane tylko na podstawowych parach rdzeni fizycznych, co zmniejsza lukę w zabezpieczeniach w przypadku ataków snoopingu kanału bocznego.
  • Zmniejsza zmienność przepływności.
  • Może to potencjalnie zmniejszyć wydajność. Jeśli w grupie może działać tylko jeden procesor wirtualny, uruchamiany jest tylko jeden strumień instrukcji w rdzeniu. Drugi jest pozostawiony bezczynny.
  • System operacyjny (OS) i aplikacje działające na wirtualnej maszynie gościa mogą używać zachowania SMT oraz interfejsów programowania (API) do kontrolowania i dystrybuowania pracy między wątkami SMT, podobnie jak w przypadku maszyny fizycznej.

Od systemu Windows Server 2019 Hyper-V domyślnie używa podstawowego harmonogramu. We wcześniejszych wersjach, takich jak Windows Server 2016, harmonogram podstawowy jest opcjonalny, a klasyczny harmonogram jest domyślny.

Podstawowe zachowanie harmonogramu przy wyłączonym SMT na hoście

W niektórych przypadkach można skonfigurować funkcję hypervisor tak, aby korzystała z podstawowego typu harmonogramu, ale funkcja SMT jest wyłączona lub nie jest obecna na hoście wirtualizacji. W takich przypadkach Hyper-V używa klasycznego zachowania harmonogramu niezależnie od ustawienia typu harmonogramu funkcji hypervisor.

Harmonogram główny

Główny harmonogram został dołączony do systemu Windows 10 w wersji 1803. Po włączeniu typu planisty głównego, hypervisor zapewnia partycji głównej kontrolę nad planowaniem pracy. W instancji systemu operacyjnego w partycji głównej harmonogram NT zarządza wszystkimi aspektami przydzielania pracy do systemowych procesorów logicznych.

Harmonogram główny uwzględnia unikatowe wymagania związane z obsługą partycji usługowej i zapewnia silną izolację obciążeń, jak w przypadku funkcji Windows Defender Application Guard (WDAG). W tym scenariuszu pozostawienie obowiązków związanych z planowaniem systemu operacyjnego głównego zapewnia kilka korzyści:

  • Możesz użyć kontroli zasobów CPU stosowanych w scenariuszach kontenerów z partycją użytkową, upraszczając zarządzanie i wdrażanie.
  • Główny harmonogram systemu operacyjnego może łatwo zbierać dane dotyczące użycia procesora przez obciążenie wewnątrz kontenera. Mogą używać tych danych jako danych wejściowych do zasad planowania i stosować je do wszystkich innych obciążeń w systemie.
  • Te same metryki pomagają również przypisywać pracę wykonaną w kontenerze aplikacji do systemu hosta. Śledzenie tych metryk jest trudniejsze w przypadku tradycyjnych obciążeń maszyn wirtualnych, w których niektóre działają w imieniu wszystkich uruchomionych maszyn wirtualnych w partycji głównej.

Użycie harmonogramu root w systemach klienckich

Począwszy od systemu Windows 10 w wersji 1803, główny harmonogram jest używany domyślnie tylko w systemach klienckich, co oznacza:

  • Funkcję hypervisor można włączyć do obsługi zabezpieczeń opartych na wirtualizacji i izolacji obciążenia programu WDAG.
  • Ważne jest, aby prawidłowo obsługiwać przyszłe systemy z heterogenicznymi architekturami rdzeni.

Ta konfiguracja jest jedyną obsługiwaną konfiguracją harmonogramu hypervisora dla systemów klienckich. Administratorzy nie powinni próbować zastąpić domyślnego typu harmonogramu funkcji hypervisor w systemach klienckich z systemem Windows.

Zarządzanie zasobami procesora CPU maszyny wirtualnej i harmonogram główny

Nie obsługiwane jest kontrolowanie zasobów, których hipernadzorca Hyper-V używa na poszczególnych procesorach maszyn wirtualnych, gdy włączony jest główny harmonogram hipernadzorcy. W głównym systemie operacyjnym logika harmonogramu zarządza zasobami hosta w skali globalnej i nie zarządza zasobami gościa poszczególnych maszyn wirtualnych. Hyper-V kontrole zasobów procesora maszyny wirtualnej, takie jak limity, wagi i rezerwy, mają zastosowanie tylko wtedy, gdy funkcja hypervisor bezpośrednio kontroluje planowanie procesora wirtualnego, na przykład z klasycznymi i podstawowymi typami harmonogramu.

Użycie harmonogramu głównego w systemach serwerowych

Nie zalecamy używania harmonogramu głównego z Hyper-V na serwerach. Jego właściwości wydajności nie są jeszcze w pełni scharakteryzowane i dostosowane do szerokiej gamy obciążeń typowych dla wielu wdrożeń wirtualizacji serwera.

Włączanie protokołu SMT na maszynach wirtualnych gościa

Po skonfigurowaniu funkcji hypervisor hosta wirtualizacji do używania podstawowego typu harmonogramu można również skonfigurować maszyny wirtualne gościa do używania protokołu SMT. W szczególności można określić liczbę wirtualnych wątków SMT do uwidocznienia dla maszyny wirtualnej gościa. Harmonogramowanie systemu operacyjnego gościa i obciążenia maszyn wirtualnych mogą następnie wykrywać topologię SMT i wykorzystywać ją we własnym harmonogramowaniu pracy.

  • W systemie Windows Server 2016 protokół SMT gościa nie jest domyślnie skonfigurowany. Administrator hosta Hyper-V musi jawnie go włączyć.
  • W systemie Windows Server 2019 i nowszych wersjach nowe maszyny wirtualne tworzone na hoście dziedziczą domyślnie topologię SMT hosta. Na przykład, jeśli utworzysz maszynę wirtualną w wersji 9.0 na hoście z dwoma wątkami SMT na rdzeń, będzie ona również miała dwa wątki SMT na rdzeń.

Aby włączyć protokół SMT na maszynie wirtualnej gościa, należy użyć programu PowerShell. W programie Hyper-V Manager nie ma interfejsu użytkownika. Aby włączyć protokół SMT na maszynie wirtualnej gościa:

  1. Otwórz okno programu PowerShell przy użyciu konta, które jest członkiem grupy administratorów Hyper-V lub równoważnej.

  2. Uruchom Set-VMProcessor -VMName <VM-name> -HwThreadCountPerCore <n>, gdzie <n> to liczba wątków SMT na rdzeń widzianych przez maszynę wirtualną gościa. Jeśli używasz wartości 0 dla <n>, HwThreadCountPerCore wartość jest ustawiona na liczbę wątków SMT hosta na rdzeń.

    Note

    System Windows Server 2016 nie wspiera ustawiania HwThreadCountPerCore na 0.

Poniższy zrzut ekranu przedstawia informacje systemowe pobrane z systemu operacyjnego gościa uruchomionego na maszynie wirtualnej. Istnieją dwa procesory wirtualne, a protokół SMT jest włączony. System operacyjny gościa wykrywa dwa procesory logiczne należące do tego samego rdzenia.

Zrzut ekranu przedstawiający okno Informacje o systemie. Zostanie wybrana linia procesora. Zawiera on informacje o jednym rdzeniu i dwóch procesorach.

Skonfiguruj typ harmonogramu hypervisora

Typ harmonogramu funkcji hypervisor, który Hyper-V używa domyślnie, zależy od wersji systemu operacyjnego. Niezależnie od tego, który harmonogram jest domyślny w systemie operacyjnym, możesz skonfigurować funkcję hypervisor tak, aby korzystała z podstawowego harmonogramu. Główny harmonogram zwiększa bezpieczeństwo, ograniczając działanie wirtualnych procesorów gościa do odpowiednich fizycznych par SMT. Ta konfiguracja obsługuje korzystanie z maszyn wirtualnych z planowaniem SMT dla ich wirtualnych procesorów gościa.

Note

W systemie Windows Server 2016 Hyper-V domyślnie używa klasycznego harmonogramu. Jeśli używasz Hyper-V w systemie Windows Server 2016 lub nowszym, zalecamy wybranie podstawowego harmonogramu. Zmiana ta zapewnia, że hosty wirtualizacji są optymalnie chronione przed potencjalnie złośliwymi maszynami wirtualnymi.

Rozważ wpływ na bezpieczeństwo i wydajność

Aby zapewnić, że hosty Hyper-V są wdrażane w optymalnej konfiguracji zabezpieczeń, Hyper-V domyślnie używa podstawowego modelu harmonogramu funkcji hypervisor, począwszy od systemu Windows Server 2019. Administrator hosta może opcjonalnie skonfigurować hosta do korzystania ze starszego klasycznego harmonogramu. Przed zastąpieniem ustawień domyślnych administratorzy powinni dokładnie przeczytać, zrozumieć i rozważyć wpływ, jaki ma każdy typ harmonogramu na zabezpieczenia i wydajność hostów wirtualizacji. Aby uzyskać więcej informacji, zobacz Informacje o wyborze typu harmonogramu Hyper-V dla hypervisora.

Wybierz typ harmonogramu hypervisor w systemie Windows Server

Konfiguracja harmonogramu funkcji hypervisor jest kontrolowana przez wpis danych konfiguracji rozruchu hypervisorschedulertype (BCD).

Aby wybrać typ harmonogramu:

  1. Otwórz wiersz polecenia z uprawnieniami administratora.

  2. Wprowadź bcdedit /set hypervisorschedulertype <type>, gdzie <type> jest jedną z następujących opcji:

    • Classic
    • Core
    • Root

Aby zmiany wprowadzone w typie harmonogramu funkcji hypervisor zaczęły obowiązywać, należy ponownie uruchomić system.

Note

Harmonogram nadrzędny funkcji hypervisor nie jest obecnie obsługiwany w Hyper-V w systemie Windows Server. Hyper-V administratorzy nie powinni próbować konfigurować harmonogramu głównego do użycia w scenariuszach wirtualizacji serwera.

Określanie bieżącego typu harmonogramu

Można określić typ harmonogramu hypervisora, który jest obecnie używany przez Hyper-V, sprawdzając dziennik systemu Windows. Poszukaj najnowszego zdarzenia uruchamiania funkcji hypervisor o identyfikatorze 2. To zdarzenie zgłasza typ harmonogramu hypervisora skonfigurowany podczas jego uruchamiania. Dla typu harmonogramu funkcji hypervisor są możliwe następujące wartości:

Value Typ harmonogramu
1 Klasyczny harmonogram, wyłączony protokół SMT
2 Klasyczny harmonogram
3 Harmonogram rdzeni
4 Główny harmonogramator

Aby wyświetlić dzienniki zdarzeń uruchamiania funkcji hypervisor, można użyć Podglądu zdarzeń lub programu PowerShell.

Zrzut ekranu przedstawiający okno właściwości Podglądu zdarzeń dla zdarzenia Hyper-V-Hypervisor o ID 2. Tekst na karcie Ogólne wskazuje typ scheduler 0x2.

Zrzut ekranu przedstawiający zdarzenia w Podglądzie zdarzeń. Wybrano zdarzenie uruchamiania funkcji Hyper-V-Hypervisor o identyfikatorze 2. W dolnym okienku są wyświetlane szczegóły zdarzenia.

Wykonywanie zapytań dotyczących dzienników systemowych dla zdarzenia uruchamiania funkcji hypervisor za pomocą programu PowerShell

Aby wykonać zapytanie dotyczące dzienników systemu dla zdarzenia funkcji hypervisor o identyfikatorze 2 przy użyciu programu PowerShell, uruchom następujące polecenie:

Get-WinEvent -FilterHashTable @{ProviderName="Microsoft-Windows-Hyper-V-Hypervisor"; ID=2} -MaxEvents 1

Zrzut ekranu przedstawiający okno programu PowerShell. Polecenie wykonuje zapytanie dotyczące najnowszego zdarzenia uruchamiania funkcji hypervisor o identyfikatorze 2. Dane wyjściowe pokazują typ harmonogramu jako 0x2.