Dlaczego zwiększenie „liczby procesorów logicznych” hostowanej maszyny wirtualnej Hyper-V zwiększa wydajność tej maszyny wirtualnej?

9

W moim rozumieniu maszyny wirtualne (zakładając, że Relative Weightsą równe) mają równy udział procesora.

Gdy maszyna wirtualna ma trochę czasu na przetwarzanie, nie powinno mieć znaczenia, czy maszyna wirtualna widzi dla niej jeden rdzeń, czy wiele rdzeni, ponieważ przetwarzanie pochodzi z szeregu procesorów na hoście funkcji Hyper-V niezależnie od tego. Jednak po ustawieniu Number of logical processorsustawienia od 1 do 4 w Hyper-V dla konkretnej maszyny wirtualnej widzę ogromny wzrost wydajności.

Specyfikacja mojego obecnego ustawienia to w przybliżeniu:

  • Host Hyper-V ma 32 GB pamięci RAM, 24 procesory logiczne (złe słowo?), Kilka TB miejsca.

  • Maszynom wirtualnym przydzielono 6 GB pamięci RAM, 1 lub 4 rdzenie, kilkaset GB miejsca i system operacyjny 2008 R2.

Doświadczyłem podobnej rzeczy w poprzednich konfiguracjach Hyper-V.

Blackjack00
źródło

Odpowiedzi:

20

Maszyny wirtualne w każdym hiperwizorze, który znam, mogą korzystać z dodatkowych wirtualnych procesorów, na których można zaplanować dodatkowe równoległe wątki wykonania.

Jest to dokładnie ta warstwa abstrakcji między maszyną fizyczną a maszyną wirtualną, która sprawia, że nie działa ona tak, jak to opisujesz. Maszyna wirtualna nie jest świadoma liczby rdzeni maszyny fizycznej. Maszyna wirtualna nie „widzi” fizycznych procesorów (lub rdzeni) na maszynie fizycznej. Hiperwizor daje maszynie wirtualnej tyle wirtualnych procesorów, a system gościa używa tych wirtualnych procesorów do planowania dodatkowych współbieżnych wątków ... Całkowita liczba wirtualnych procesorów przekazywanych przez hiperwizor maszynom wirtualnym może nawet przekraczać liczbę fizycznych procesorów / rdzenie w maszynie.

Mówiąc inaczej, maszyna wirtualna, po przypisaniu pojedynczego vCPU, planuje swoje wątki, jakby miała tylko jeden procesor. Nie ma znaczenia, ile rdzeni znajduje się w podstawowej maszynie fizycznej. (Warto jednak zauważyć, że maszyna fizyczna może zaplanować ten wątek maszyny wirtualnej na jednym rdzeniu fizycznym dla jednego wątku kwantowego lub odcinka czasu, a następnie uruchomić go na innym rdzeniu fizycznym przy następnym uruchomieniu). nie ma pojęcia, że ​​coś takiego się dzieje. Wie tylko, że może planować tylko jeden wątek na raz, jeden po drugim, ponieważ ma tylko jeden wirtualny procesor.)

I wyjaśnijmy tutaj nasze warunki. Przypisujesz vCPU lub wirtualne procesory do maszyn wirtualnych, a nie „rdzeni”. Rdzenie (przez co zakładam, że masz na myśli fizyczne jednostki przetwarzające, które współużytkują pojedyncze fizyczne gniazdo) nie są równe vCPU. Między nimi jest warstwa abstrakcji. Jeśli do maszyny wirtualnej przypisano tylko 1 vCPU, może ona zaplanować uruchomienie tylko jednego wątku na raz. Właśnie dlatego twoja maszyna wirtualna działa szybciej z przypisanymi do niej 2-4 wirtualnymi procesorami - ponieważ jest teraz w stanie zaplanować jednoczesne uruchamianie więcej niż jednego wątku.

Jednak na pewno istnieje prawo malejących zwrotów, ponieważ nadmierna liczba procesorów wirtualnych pociąga za sobą coraz wyższe koszty ogólne w takich rzeczach, jak synchronizacja itp.

Istnieją niewielkie różnice między sposobem, w jaki hiperwizory Hyper-V i VMware planują wątki maszyny wirtualnej do wykonania, i różnią się podejściem do „nadsubskrypcji” zasobów fizycznych, ale jest to dobra ogólna koncepcja na początek.

Ryan Ries
źródło
7
@ Flapjack00 Nie ... to dokładne przeciwieństwo tego, co właśnie powiedziałem. I wyjaśnijmy tutaj nasze warunki. Przypisujesz vCPU lub wirtualne procesory do maszyn wirtualnych, a nie „rdzeni”. Rdzenie (przez co zakładam, że masz na myśli fizyczne jednostki przetwarzające, które współużytkują jedno gniazdo) nie są równe vCPU. Między nimi jest warstwa abstrakcji. Jeśli do maszyny wirtualnej przypisano tylko 1 vCPU, może ona zaplanować uruchomienie tylko jednego wątku na raz.
Ryan Ries,
1
Ach! W takim przypadku maszyna wirtualna skonfigurowana z 4 procesorami vCPU może planować 4 wątki jednocześnie. Zakładając, że mój host ma wystarczającą liczbę dostępnych vCPU, te 4 wątki mogą być przetwarzane w tym samym czasie?
Blackjack00,
1
@ Flapjack00 „Zakładając, że mój host ma wystarczającą liczbę vCPU” - Host nie ma vCPU, tak jak VM. Host ma rdzenie (a ściślej procesory logiczne - jeden rdzeń może mieć wiele procesorów logicznych, takich jak Hyper-Threading), do których przypisywane są vCPU.
BlueRaja,
2
@ Dan, jest to problem specyficzny dla VMware. Nie wpływa na Hyper-V.
Jake Oshins
1
„X vCpu wymaga blokady procesora Y”, którą VMware usunął w ESX 3.5, więc tak naprawdę nie dotyczy to żadnego nowoczesnego hiperwizora. Biorąc to pod uwagę, powinieneś uważać, aby nie przypisywać niepotrzebnych zasobów do maszyn wirtualnych, a procesory vCpu są szczególnie ważne. Zbyt wiele z nich i ogólnie stracisz wydajność.
pauska
3

Ilość przypisanych procesorów wirtualnych ma znaczenie. Oprogramowanie działające na maszynie wirtualnej nie zdaje sobie sprawy z faktu, że znajduje się na maszynie wirtualnej i że host jest w stanie wykonać więcej niż to, co maszyna wirtualna jest prezentowana. Więc jeśli używasz oprogramowania, które może korzystać z wielu rdzeni procesora, na maszynie wirtualnej, do której przypisany jest tylko jeden rdzeń, oprogramowanie zaplanuje tylko jeden rdzeń do swoich zadań, a także maszyna wirtualna będzie używać tylko jednego rdzenia hosta w czas. Gdy podasz maszynie wirtualnej więcej rdzeni, oprogramowanie może zaplanować więcej równoległych zadań, które procesor hostów zaplanuje dla maszyny wirtualnej.

Uważaj, aby nie dać maszynom wirtualnym zbyt wiele, aby nie wywołać rywalizacji, jeśli jedna maszyna wirtualna ma więcej rdzeni wirtualnych niż host, maszyna wirtualna będzie walczyła przeciwko sobie, aw przypadku zaplanowanych hiperwizorów gangów, takich jak vmware, maszyna wirtualna będzie nigdy nie będzie w stanie nic wykonać (opcja generalocate jest oczywiście zablokowana przez warstwę zarządzania).

dyasny
źródło