Rdzenie „wirtualne” przypisywane do maszyny wirtualnej są dostępne do wykorzystania w przetwarzaniu wieloprocesorowym w systemie operacyjnym klienta. Jeśli przypiszesz tylko jeden rdzeń do maszyny wirtualnej, system-gość nie ma szans na rozłożenie obciążenia na wiele rdzeni. Załóżmy więc kilka praktycznych scenariuszy:
Host z 4 procesorami, gość przypisany 1 procesor
- Maszyna hosta z 4 fizycznymi rdzeniami
- System operacyjny klienta w ramach maszyny wirtualnej ma przypisany 1 rdzeń
W takim przypadku system operacyjny gościa będzie mógł używać tylko jednego rdzenia. Dlatego jeśli uruchomisz wielowątkową aplikację, która dobrze skaluje się na wielu rdzeniach, nadal będzie działać tylko na jednym rdzeniu. Dlatego wszystkie wątki w systemie operacyjnym gościa muszą mieć jeden fizyczny rdzeń.
Uruchomienie systemu gościa w tej konfiguracji, która całkowicie ładuje procesor, spowoduje obciążenie procesora systemu operacyjnego hosta w wysokości ~ 25% (jeden z 4 rdzeni załadowanych na hoście).
Oczywiście w systemie operacyjnym hosta nadal mogą być uruchomione zadania wymagające użycia procesora i wykorzystać pozostałe 3 rdzenie.
Host z 4 procesorami, gość przypisał 4 procesory
- Maszyna hosta z 4 fizycznymi rdzeniami
- System operacyjny klienta w ramach maszyny wirtualnej przypisany 4 rdzeniom
W takim przypadku możesz uruchomić dobrze skalowane wielowątkowe aplikacje w maszynie wirtualnej gościa, które mogą w pełni wykorzystać wszystkie 4 wirtualne procesory. VirtualBox użyje 4 fizycznych rdzeni do przetwarzania zadań zaplanowanych w maszynie wirtualnej, a zatem obciążenie procesora hosta może osiągnąć maksymalnie 100% wykorzystania.
Więc jakie ustawienie wybrać?
Odpowiedź na to pytanie zależy w dużej mierze od tego, co chcesz zrobić. W niektórych przypadkach przydatne może być przypisanie wszystkich rdzeni do maszyny wirtualnej lub nawet uruchomienie wielu maszyn wirtualnych, z których każda ma przypisaną pełną liczbę procesorów. W takich przypadkach maszyna wirtualna może w pełni wykorzystać całą moc przetwarzania hosta. Jeśli do maszyn wirtualnych zostanie przypisanych więcej procesorów niż faktycznie obecnych, to na maszyny wirtualne będzie miało wpływ obciążenie innej maszyny wirtualnej. Aby temu zapobiec, możesz poświęcić niektóre rdzenie konkretnym maszynom wirtualnym. Na przykład uruchomienie 2 maszyn wirtualnych z przypisanymi 2 procesorami w 4-rdzeniowym węźle może pomóc, aby każda maszyna wirtualna otrzymała 2 dedykowane procesory (przy założeniu, że system operacyjny hosta nie pobiera obciążenia, które również bierze część mocy obliczeniowej).
Czy przypisanie wszystkich rdzeni do maszyny wirtualnej ma negatywny wpływ na mój host?
Znowu zależy to od uruchomienia oprogramowania. Jeśli uruchomisz maszynę wirtualną, która jest bezczynna (w ogóle nie działają programy intensywnie obciążające procesor), obciążenie narzucone przez tę maszynę wirtualną będzie bliskie 0%. Możesz nawet uruchomić 10 maszyn wirtualnych równolegle i nadal obciążać procesor hosta na poziomie prawie 0%, jeśli wszystkie maszyny wirtualne są bezczynne.
Jak zachowuje się CPU przy nierównomiernym obciążeniu?
Cóż, rozkład obciążenia procesora w dużej mierze zależy od wbudowanego komponentu specyficznego dla systemu operacyjnego, zwanego harmonogramem. W przypadku systemu Windows XP program planujący próbował zaokrąglić obciążenie wszystkich rdzeni procesora. Uruchomienie zadania jednowątkowego z pełnym obciążeniem na czterordzeniowym procesorze przyniosłoby ~ 25% obciążenia na każdy rdzeń.
Niestety okazało się to niekorzystne dla nowoczesnego zarządzania energią procesora. W przypadku nowoczesnych systemów zaletą jest to, że jeden rdzeń jest obciążony do 100%, zanim jeszcze drugi rdzeń się zaangażuje. Powodem jest to, że dopóki nie ma wystarczającego obciążenia, aby w pełni wykorzystać jeden rdzeń, pozostałe rdzenie mogą pozostawać w trybie głębokiego uśpienia w celu oszczędzania energii i zmniejszenia rozpraszania ciepła.
W przypadku niektórych procesorów, takich jak Intel Core i-Series i nowsze AMD (Bulldozer), jest to jeszcze bardziej interesujące, ponieważ w przypadku użycia tylko podzbioru rdzeni nieużywane zostaną wyłączone. Zmniejsza to zużycie energii przez procesor. Zarówno (Intel, jak i AMD) zaczynają wykorzystywać budżet na zużycie ciepła i energii, a następnie podkręcać aktywne rdzenie. Dzięki temu aplikacje jednowątkowe (których nie można rozdzielić na wiele rdzeni w celu równoległego działania na zadaniu) przyspieszają. Jednak gdy wszystkie rdzenie są aktywne, większość z tych technologii „boost” ma jedynie niewielki wpływ na moc przetwarzania, ponieważ sytuacja „wszystkich rdzeni aktywnych” jest dokładnie taką sytuacją, dla której procesor został zaprojektowany.
Zatem odpowiedź brzmi, że twój rdzeń i7 bardzo dobrze radzi sobie z nierównomiernym obciążeniem pojedynczych rdzeni, a nawet może zapewnić wzrost wydajności w aplikacjach jednowątkowych. Jednak ten wzrost mieści się w zakresie kilku procent, podczas gdy w rzeczywistości aplikacje wielowątkowe, które mogą rozkładać obciążenie na wiele rdzeni procesora, mogą zostać zwiększone przez czynniki (x2 w przypadku dwurdzeniowego, 4x w czterordzeniowym ...) w optymalnym przypadku . Tak więc wielowątkowość zawsze zapewnia większą moc pod względem połączonej mocy procesora niż jednowątkowa w połączeniu ze wzmocnieniem zegara.
Nie zagłębiałem się w podręczniki na stronie VB, ale zakładam, że przydzielenie rdzeni do maszyny gościa pozwoliłoby systemowi-gościowi zobaczyć wiele rdzeni, a tym samym zezwolić aplikacjom, które mogą skorzystać z tych dodatkowych rdzeni, zwiększonej prędkości / moc / wydajność, tak jak w przypadku systemu operacyjnego hosta.
źródło