Dlaczego VirtualBox pokazuje więcej procesorów niż dostępnych?

6

Mam procesor Intel Core i7 3930K z 6 rdzeniami procesora. Teraz rozumiem, że każdy z tych rdzeni może obsługiwać 2 oddzielne wątki. To sprawia, że ​​12 wirtualnych rdzeni - które widzę za pomocą mojego monitora systemu (patrz zrzut ekranu poniżej).

Ale kiedy tworzę maszynę wirtualną za pomocą oprogramowania VirtualBox firmy Oracle, nagle mogę przydzielić 24 procesory do tej maszyny. Jak to?

wprowadź opis zdjęcia tutaj

Więc, co to znaczy? Czy faktycznie są 24 rdzenie - czy VirtualBox się myli?

A co się stanie, jeśli przydzielę na przykład 4 rdzenie - ile naprawdę jest dodanych do maszyny wirtualnej?

Waqar Lim
źródło

Odpowiedzi:

11

Jeden rdzeń, z hiperwątkowością lub bez niej, może symulować dowolną liczbę wirtualnych rdzeni, po prostu przez cykl czasowy. Powoduje to jednak różnego rodzaju problemy, ponieważ systemy operacyjne oczekują, że kod działający w tym samym czasie faktycznie się przeplata. Nadmierna kontrola może prowadzić do spadku wydajności, więc system może wydawać się zawieszony, a operacje dosłownie trwają tysiące razy dłużej niż powinny.

David Schwartz
źródło
1
Dzięki, +1, już odpowiedziałeś na moje dalsze pytanie, dlaczego mój Windows 8 teraz zawsze się zawiesza! :)
Waqar Lim
1
„Dodatkowe” rdzenie zostaną zasymulowane (cóż, wszystkie są symulowane, jeśli spojrzysz na to w ten sposób). Działa dobrze. Skumulowana wydajność nie będzie oczywiście większa niż wydajność rzeczywistego sprzętu. Blokowanie się i problemy to najprawdopodobniej błędy w oprogramowaniu VM, które prawdopodobnie zostały naprawione w nowszej wersji. Właśnie uruchomiłem 6-rdzeniową maszynę wirtualną na 4-rdzeniowym sprzęcie i działa dobrze, ładując wszystkie 6 rdzeni wirtualnych (używając VirtualBox 4.3.14 z Windows). VmWare również to obsługuje.
David Balažic
@ DavidBalažic To nie działa „w porządku”. Może powodować przerażające straty wydajności. System operacyjny czasami myśli, że kod działa w innym rdzeniu (kiedy tak naprawdę nie jest) i czeka na niego, wykorzystując zasoby, których kod potrzebowałby do odblokowania. To naprawdę może powodować katastrofalne straty wydajności. System operacyjny musi wiedzieć, czy wątek działa, czy nie, aby zachowywać się rozsądnie.
David Schwartz
@DavidSchwartz Może to powodować niską wydajność. To 99% zależy od implementacji maszyny wirtualnej. O systemie operacyjnym, o którym wspominałeś: jeśli masz na myśli system gościa, będzie on działał dobrze, ponieważ maszyna wirtualna „przerwie” „oczekujący” wątek i uruchomi drugi wątek, bez względu na liczbę faktycznych rdzeni fizycznych (vmware jest tutaj bardziej elastyczny, ale to znowu zależy od użytej wersji). Może możesz pokazać rzeczywisty przypadek, w którym pojawiają się wspomniane problemy.
David Balažic
@ DavidBalažic Nie zrobi tego, ponieważ nie ma sposobu, aby wiedzieć, na co czeka wątek. W rzeczywistości tak się dzieje. Systemy operacyjne obracają się w rzeczywistości, gdy żądany zasób jest utrzymywany przez inny wątek, który ich zdaniem działa na rdzeniu. To naprawdę zmniejsza wydajność tysiące razy, aby system operacyjny nie wiedział, że wątek nie działa.
David Schwartz
1

Jeśli przydzielisz 4 rdzenie, otrzymasz 4 rdzenie w maszynie wirtualnej. Jednak prawie cały czas lepiej jest po prostu przydzielić 1, ponieważ dodajesz dużo narzutu za każdym razem, gdy dodajesz kolejny rdzeń.

W twoim przypadku możesz mieć maksymalnie 5 rdzeni, jeśli przejdziesz przez to do czerwonego obszaru, twoja maszyna wirtualna stanie się niestabilna.

Pole wirtualne zaleca, aby maksymalna liczba rdzeni, których używasz, powinna wynosić n-1 twoich fizycznych rdzeni. Hyper-Threading się nie liczy.

Ten wątek na forach wirtualnego pudełka obsługuje to.

VBwhatnow
źródło
Ale dlaczego VirtualBox mówi mi, że nawet 12 rdzeni jest w porządku? (patrz zrzut ekranu.) Właśnie wypróbowałem 8 i ciągle się zamraża ...
Waqar Lim
Nawiasem mówiąc, nie robi tego w nowych wersjach VirtualBox.
Tek
0

Procesor i7 3930K ma VT-x.

Technologia Intel® Virtualization (VT-x) pozwala jednej platformie sprzętowej działać jako wiele platform „wirtualnych”. Zapewnia lepszą łatwość zarządzania, ograniczając przestoje i utrzymując wydajność poprzez izolowanie działań obliczeniowych na osobne partycje.

Oznacza to, że jesteś w stanie zasymulować kilka procesorów więcej niż wątki, które może obsłużyć, tym samym widząc większą liczbę procesorów dostępnych podczas korzystania z maszyny wirtualnej.

Piotr
źródło
1
W rzeczywistości nie jest to w ogóle VT-x.
Daniel B,
0

W moim przypadku użycie 6 z naszych 8 CPUs w 4 rdzeniowym 8-wątkowym procesorze było szybsze w teście niż 4 z 8, mimo że Virtual Box sugeruje, że mogę dostać degradację. Myślę więc, że Virtual Box zapobiega wystrzeleniu w stopę, jeśli jesteś początkujący i narzeka na powolność, podczas gdy jako superużytkownik możesz przejść przez tę ostrożność.

Długa odpowiedź:

Mam Intel-Core-i7-2820QM z 4 rdzeniami i 8 wątkami. Mam Virtual Box 5.2.6 z hostem i gościem Windows 10.

Ustawienie 6 CPUs na 8 w Virtual Box Ustawienia gościa dają kolejne wartości w znaku użytkownika :

Wielordzeniowy

MC Int 307
MC Float 326
MC Mieszane 315
47% 316 pkt


czterordzeniowy

QC Int 270
Float QC 272
QC Mieszane 268
61% 270 pkt

CPU-Z:

wprowadź opis zdjęcia tutaj

Ustawienie 4 CPUs:

Znak użytkownika

Wielordzeniowy

MC Int 260
MC Float 269
MC Mieszane 269
40% 266 pkt

czterordzeniowy

QC Int 260
Float QC 264
QC Mieszane 262
59% 262 pkt

CPU-Z:

1108 4,21 6

Uwagi:

Brak dławienia termicznego (co zdarza się, gdy 100 stopni Celsjusza) wystąpiło podczas testów:

997 3,37 4

Dzmitry Lahoda
źródło