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.
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).
źródło