VirtualBox: Czy przypisywanie większej liczby wirtualnych rdzeni procesora niż liczba fizycznych rdzeni procesora jest złym pomysłem?

41

Ponieważ mam procesor z funkcją Hyper-Threading , zastanawiam się, czy nie jest dobrym pomysłem przypisywanie większej liczby wirtualnych rdzeni procesora niż liczby fizycznych rdzeni procesora, co sugeruje następujące ostrzeżenie:

Ostrzeżenie VirtualBox

Transkrypcja:

Do maszyny wirtualnej przypisanych jest więcej procesorów wirtualnych niż liczba fizycznych procesorów w systemie hosta. Może to obniżyć wydajność maszyny wirtualnej. Proszę rozważyć zmniejszenie liczby wirtualnych procesorów.

Czy ktoś może uzasadnić ten temat?

EDYCJA 1:

Wspomniany procesor to Intel Core i7-4700HQ, Ark Intel , CPU Benchmark

EDYCJA 2:

Załóżmy, że nie ma przestarzałego sprzętu, takiego jak HDD (zamiast SSD) i / lub Low RAM (tutaj 16 GB, minimum vm.swappiness, 4 GB dla tej maszyny wirtualnej) i tak dalej.

LinuxSecurityFreak
źródło
2
Ostrzeżenie jest dość dokładne i nie powinno być ignorowane, chyba że wydajność w czasie rzeczywistym jest nieistotna lub jeśli na maszynę wirtualną zostanie nałożone tylko minimalne obciążenie (oprogramowania). Zobacz więc czym są logiczne rdzenie procesora (w przeciwieństwie do fizycznych rdzeni procesora)?
agc
Jak mówi wojownik. Rzeczywiście może być szybciej z mniejszą liczbą procesorów na maszynie wirtualnej.
Rui F Ribeiro
Nigdy nie powinieneś wchodzić w czerwoną linię. Można używać 4 „rdzeni” na 4 rzeczywistych procesorach z obsługą HT. W przypadku pamięci RAM 50% pamięci RAM powinno wystarczyć, nawet jeśli zielona część jest poza tym.
cylgalad
W Virtualbox „rdzenie” to wszystkie wątki, więc jeśli masz procesor z 4 rdzeniami i funkcją Hyperthreading, to jest jak 8 „rdzeni”, więc możesz skonfigurować do 4 wirtualnych rdzeni na jednej maszynie wirtualnej, jeśli uruchomisz ją samodzielnie; to właśnie robię cały czas i działa świetnie.
cylgalad
Co muszę udowodnić? Czerwona linia dotyczy ponad 4 „rdzeni” dla mnie, nigdy nie wychodzę poza i nigdy nie uruchamiam 2 maszyn wirtualnych jednocześnie. Jeśli wolisz ryzyko awarii komputera, oddając cały procesor maszynie wirtualnej i nie robisz nic poza maszyną wirtualną, może być w porządku.
cylgalad

Odpowiedzi:

30

Sprzęt / system operacyjny / oprogramowanie

Host : Linux Mint 18 Cinnamon 64-bit (w pełni zaktualizowany); Wersja jądra 4.4.0-47-ogólna

Gość : Windows 8.1 Pro 64-bit (w pełni zaktualizowany)

Procesor : Intel Core i7-4700HQ , (6 MB pamięci podręcznej, 4 rdzenie fizyczne lub 8 przy użyciu funkcji Hyper-Threading), test porównawczy procesora

VirtualBox : Wersja 5.1.10 r112026 (Qt5.5.1)

Dodatki dla gości : Zainstalowane i aktualne

Narzędzie porównawcze nr 1 : WinRAR wersja 5.40 wersja ostateczna 64-bitowa

Narzędzie Benchmark # 2 : VeraCrypt wersja 1.19 wersja ostateczna 64-bitowa


Przygotowanie

W obu przypadkach czekałem po uruchomieniu, aż procesor, pamięć RAM i dysk staną się stabilne w pobliżu punktów zerowych.


metoda

  1. Klonowanie oryginalnej maszyny wirtualnej w celu uzyskania dwóch identycznych.
  2. Mam, dla drugiego przejścia, odkąd wyłączony ponownie program antywirusowy wskazał na dole tej odpowiedzi i zaktualizował WinRAR w obu przypadkach z wersji beta do wersji ostatecznej.
  3. Zrobiłem to samo Przygotowanie, jak wskazano wcześniej.
  4. Maszyna wirtualna działała na pierwszym planie, bez żadnej innej aplikacji wymagającej czasu procesora. Wyłączyłem, co mogłem, aby test nie miał wpływu.
  5. Aby uwzględnić potencjalne buforowanie w systemie lub poza nim, dwukrotnie przeprowadziłem ten sam test. Korzyści są prawie żadne.

Wyniki

WinRAR

  1. 4 rdzenie => 7,5 minuty ( krótszy czas jest lepszy)

    WinRAR z włączonymi 4 rdzeniami

    WinRAR z włączonymi 4 rdzeniami, 1,5GiB przetworzony w 7,5 minuty.

  2. 8 rdzeni => 4,5 minuty ( krótszy czas jest lepszy)

    WinRAR z włączonymi 8 rdzeniami

    WinRAR z włączonymi 8 rdzeniami, 1,5GiB przetworzony w 4,5 minuty.


VeraCrypt

  1. 4 rdzenie => prędkość 2,6 GiB / s ( wyższa prędkość jest lepsza)

    VeraCrypt z włączonymi 4 rdzeniami

    VeraCrypt z włączonymi 4 rdzeniami, AES (AES-NI) z przyspieszeniem HW 2,6 GiB / s.

  2. 8 rdzeni => prędkość 3,9 GiB / s ( wyższa prędkość jest lepsza)

    VeraCrypt z włączonymi 8 rdzeniami

    VeraCrypt z 8 włączony rdzenie HW przyspieszone AES (AES-NI), prędkość 3,9 GB miejsca / s.


Wniosek

Mógłbym przeprowadzić tyle testów, ile potrzeba. Ale sądzę, że jeśli te dwa, z których jeden jest raczej złożonym testem kompresji, drugi to zestaw raczej złożonych testów szyfrowania, o co właśnie chodzi.

Oba testy porównawcze wykazują wyraźną różnicę. Nie widzę powodu, aby sądzić, że ich wyniki są niedokładne, ponieważ zastosowałem dość rygorystyczne przygotowanie i metodę, ponadto testy te odbyły się w pamięci RAM, aby wykluczyć wąskie gardło we / wy. Z mojego punktu widzenia ostrzeżenie wymienione w pytaniu może dotyczyć niektórych warunków, ale z pewnością nie wszystkich. Udostępniając ci te dość niezwykłe wyniki, jestem pewien, że zgodzisz się ze mną, że to ostrzeżenie prawdopodobnie nie powinno być traktowane tak poważnie na nowoczesnych procesorach wyposażonych w Hyper-Threading z najnowszą wersją VirtualBox. Jedno jest pewne: nie bierz mnie za słowo i przetestuj je na własnych warunkach, zanim zdecydujesz się zastosować to ustawienie na stałe.

LinuxSecurityFreak
źródło
Czy uruchomiłeś go na tej samej maszynie wirtualnej ze zmienionymi rdzeniami, czy na dwóch różnych (ale identycznych) maszynach wirtualnych? Jeśli to ta sama maszyna wirtualna, czy próbowałeś później w innej sekwencji, aby wykluczyć możliwy wpływ algorytmów buforowania systemu operacyjnego gościa?
Wildcard,
Dla zabawy spróbuj uruchomić test spalania procesora.
cylgalad
Coś jak prime95 przez co najmniej godzinę. I spróbuj jednocześnie przeglądać sieć na hoście. Jak powiedziałem, jest w porządku, jeśli nie robisz nic na hoście lub nie uruchamiasz więcej niż jednej maszyny wirtualnej na raz. Gdyby było tak źle, limit zostałby wymuszony w Virtualbox zamiast ostrzeżenia.
cylgalad
Możesz spróbować jeszcze raz, ale może być trudniej. Zainstaluj Gentoo lub Linux ze Scratch VM i sprawdź, jak się sprawy mają, gdy intensywnie się kompiluje. Lub spróbuj zbudować Chromium na maszynie wirtualnej.
cylgalad,
@Vlastimil całkowicie się zgadza. W moim przypadku używam VM do kompilacji w C ++ (która jest zadaniem związanym z procesorem), a jedynym powodem, dla którego dostałem 16-rdzeniowy procesor, była możliwość szybszej kompilacji. To ostrzeżenie jest kompletnym nonsensem bez właściwego wyjaśnienia i prowadzi do takich błędnych wniosków, jak: „Rzeczywiście może być szybciej z mniejszą liczbą procesorów na maszynie wirtualnej”
Pavel P
16

Jako projektant systemu operacyjnego całkowicie zgadzam się z wynikami pomiarów. Ilość bzdur produkowanych gdzie indziej na ten temat jest niewiarygodna.

Zobacz liczbę rdzeni logicznych jako liczbę równoległych wątków / procesów, które może wykonać HW. Osiąga się to poprzez powielanie np. Rejestrów i wskaźników instrukcji rdzenia procesora. Sam rdzeń procesora decyduje teraz, którego wątku (wskaźnika instrukcji) użyć. Zdecyduje się użyć drugiego wątku, ponieważ instrukcja bieżącego wątku nie jest dostępna w pamięci podręcznej i musi zostać pobrana z np. Pamięci lub pamięci podręcznej L3. Ten mechanizm spowoduje 10–30% potencjalną poprawę instrukcji / sekund lub wydajności procesora.

Jeśli uruchomisz pojedynczą aplikację z jednym wątkiem, nie będziesz mógł skorzystać z tej korzyści, ale jeśli uruchomisz dwie aplikacje o wysokim obciążeniu na np. Starym HT Pentium, będziesz mógł czerpać korzyści. To samo dotyczy oczywiście aplikacji, które mają więcej niż jeden wątek. Mój system Linux ma 200 wątków, więc niektóre korzyści zależne od faktycznego obciążenia są zawsze obecne. Wszystkie te uwagi mają zastosowanie bez wirtualizacji.

Virtualbox ogranicza tylko liczbę wątków, które mogą być uruchomione równolegle dla każdej maszyny wirtualnej (VM), ale program planujący procesy hosta zmieni procesor (y) logiczne, a tym samym procesor (y) fizyczny, na których procesy maszyny wirtualnej działają dynamicznie. Jeśli uruchomisz aplikacje o wysokim obciążeniu na maszynie wirtualnej, dodatkowe rdzenie logiczne zapewnią tę samą korzyść w wysokości 10–30%. Obciążenie może być pojedynczą aplikacją wielowątkową lub zestawem różnych aplikacji.

W nowoczesnych systemach z VT-x lub AMD-V nie ma ograniczenia wydajności dla maksymalizacji liczby rdzeni logicznych, ponieważ nie ma też zauważalnej utraty wydajności dla uruchamiania większej liczby maszyn wirtualnych w tym samym czasie. Ograniczeniem jest wydajność procesora CPU, więc nie można renderować wideo na 3 maszynach jednocześnie, bez spowalniania każdej maszyny wirtualnej, ponieważ muszą one dzielić ten sam fizyczny procesor.

System hosta może przestać odpowiadać, jeśli renderujesz wideo na maszynie wirtualnej z obecnymi wszystkimi rdzeniami logicznymi, ale miałbyś prawie ten sam problem, gdybyś uruchomił tę aplikację renderującą na hoście. Przynajmniej w VM masz wybór i możesz go rozwiązać, ograniczając maksymalne obciążenie procesora do 80% -90% lub zmniejszając liczbę rdzeni z tego powodu.

Bert Nijhof
źródło
0

Moje najlepsze dwa centy to nigdy nie używać wszystkich rdzeni / wątków, po prostu pozwól jeden lub dwa hostowi.

Więc w twoim przypadku daj gościowi sześciordzeniowy rdzeń, nigdy ósmy rdzeń (ponieważ masz tylko 8 wątków na hoście).

Jeśli liczba dostępnych wątków (nie mylić z rdzeniami) na hoście to:

  • Jeśli <2, lepiej w ogóle nie używać maszyn wirtualnych
  • Jeśli 2, użyj maszyn wirtualnych w trybie mono-core lub zaryzykuj i skorzystaj z gościa dual core
  • Jeśli> 2, lepiej użyj formuły

W przypadku więcej niż dwóch wątków zwykle używam tej formuły:

  • N = liczba wątków dla hosta
  • M = liczba współbieżnych maszyn wirtualnych, które chcę uruchomić (przy założeniu jednakowej równowagi, takiej samej liczby rdzeni gościa dla każdego gościa)
  • Formula = (N-1) / M, jeśli host ma tylko 4 wątki lub mniej
  • Formula = (N-2) / M, jeśli host ma więcej niż 4 wątki

Moje doświadczenie mówi mi, że przekroczenie limitu formuły jest znacznie płynniejsze i mniej ryzykowne.

Ostrzeżenie: Nie można zmieniać liczby rdzeni gościa podczas działania gościa, ale można obniżyć użycie procesora ze 100% do 75% lub również 50%, nie mniej gość może ulec awarii.

Czasami więc daję dwóm gościom 6 6 rdzeni na 8-wątkowym hoście (numer formuły, jakby tylko jeden gość zamiast dwóch gości), ale ograniczając ich do 50% szybkości procesora (aby obaj goście mogli użyć 1 / 2 czasu procesora), ale tylko wtedy, gdy wiem, że goście będą uruchamiać aplikacje, które mają więcej niż jeden stosunek równoległości, np. Z porównaniem / łączeniem obrazu itp.

Laura
źródło
1
Sam stworzyłeś te formuły? Czy możesz dodać cytaty?
LinuxSecurityFreak