Czy istnieje optymalne ustawienie dla liczby rdzeni procesora wystawionych na maszynę wirtualną?

23

VirtualBox i ewentualnie inne oprogramowanie VM pozwala użytkownikowi określić liczbę procesorów narażonych na VM. W moim szczególnym przypadku mam dwurdzeniowy procesor, z Windows 7 64-bit działa natywnie, a Ubuntu 9.04 64-bit jako maszyna wirtualna.

Plik pomocy sugeruje, aby nie ustawiać tego powyżej liczby dostępnych rdzeni fizycznych. To ma sens. Czy najlepiej przydzielić 1 lub 2 rdzenie procesora? Czy zależy to całkowicie od natywnego obciążenia procesora?

sblair
źródło

Odpowiedzi:

6

Zależy to całkowicie od tego, co robi system operacyjny gościa. Z mojego osobistego doświadczenia maszyna wirtualna uruchamia jeden program (serwer kompilacji, serwer trac, SVN itp.), Więc nie ma powodu, aby ustawiać go powyżej jednego.

Możliwym przypadkiem może być sytuacja, w której użytkownik końcowy, powiedzmy na uniwersytecie, który używa systemu-gościa jako ekwipunku (tj. TA), może ustawić go na więcej niż jeden.

Nate
źródło
Innymi słowy: w przypadku systemu tymczasowego możesz równie dobrze zwiększyć limit rdzenia procesora; ale dla „normalnego” lub typowego zastosowania ustaw go na jeden rdzeń (aby nie zakłócać zbytnio wydajności systemu operacyjnego hosta)?
sblair,
18

Informacje w tej odpowiedzi nie są już poprawne . Było to słuszne w czasach ścisłego wspólnego planowania, ale już tak nie jest.

Trzymam odpowiedź poniżej ze względu na dobrobyt, ale proszę nie polegać na jej dokładności dla współczesnych hiperwizorów.


Nigdy nie należy przypisywać wszystkich rdzeni jako vCPU na maszynie wirtualnej.

Jeśli maszyna wirtualna zażąda dowolnego czasu procesora, VMWare musi przydzielić albo wszystkie vCPU, albo żadną z vCPU.

Oznacza to, że w systemie 4-rdzeniowym, jeśli przydzielisz wszystkie 4 rdzenie, tylko hostowi lub gościowi można przypisać czas procesora, a nie oba jednocześnie.

To absolutnie zrujnuje wydajność w obu środowiskach.

Przydziel nieparzystą liczbę rdzeni (powiedzmy 3). To dziwne, ale jest to całkowicie uzasadniona opcja.

Generalnie nigdy nie przydzielam więcej niż (n / 2) vCPU (w twoim przypadku 2) - ale zwykle przydzielam rdzenie na serwerach z 12 do 32 rdzeniami, gdzie możesz przydzielić ogromną liczbę vCPU bez większego wpływu.

Mark Henderson
źródło
to jedyna jak dotąd odpowiedź napisana z jakimkolwiek stopniem autorytetu. Dzięki za podzielenie się swoimi doświadczeniami.
G-Wiz,
5
-1: Niezgodne z moim doświadczeniem. Maszyna wirtualna to proces, którego czas procesora można zaplanować w taki sam sposób, jak każdy inny proces na hoście. Możesz dostosować priorytet procesów VM na hoście, a system odpowiednio zrównoważy obciążenia.
bwDraco
2
( ciąg dalszy ) Załóżmy, że masz 16-rdzeniowy serwer. Przykładowa konfiguracja to 4 maszyny wirtualne, każda skonfigurowana dla 8 rdzeni. Chociaż może się wydawać, że to zbyt wiele wirtualnych rdzeni, pozwala poszczególnym maszynom wirtualnym lepiej skalować się przy większych obciążeniach. Jeśli łączne wykorzystanie przekroczy liczbę rdzeni fizycznych, host odpowiednio zrównoważy obciążenia. W ten sposób wirtualizacja może zwiększyć przepustowość i obniżyć koszty - poprzez maksymalne wykorzystanie sprzętu hosta.
bwDraco
@DragonLord - ta odpowiedź ma ponad 2 lata na pytanie, które ma prawie 4 lata i może być oparta na nieaktualnych informacjach. Mam na myśli „Strict Co-Scheduling” z ESX, ale nie pamiętam, ile lat mają te informacje, i nie śledziłem na bieżąco, jak zmieniło się planowanie CPU w ciągu ostatnich kilku lat.
Mark Henderson
1
Chciałem tylko dodać tutaj notatkę, że zarówno w Ubuntu 14.04, jak i 16.04 występują problemy z uruchamianiem, a także awarie, jeśli ustawisz liczbę procesorów na nieparzystą liczbę. Nie byłem w stanie dowiedzieć się, dlaczego, ponieważ po prostu postanowiłem utrzymać go na parzystych liczbach, aby uniknąć problemów.
Dorian
3

Liczba rdzeni wystawionych na procesory gościa nie wpływa na wydajność tak, jak byś tego chciał. Po prostu dostosowuje liczbę rdzeni, które „widzi” procesor gościa.

W zależności od konfiguracji emulatora może on dosłownie zmniejszyć wydajność maszyny wirtualnej o połowę, nic nie robić lub wpływać tylko na sposób, w jaki system operacyjny / aplikacje gościa dzielą harmonogram wątków.

Najlepiej pozostawić to ustawienie domyślne. Jeśli wystąpią problemy z wydajnością na komputerze hosta, możesz po prostu dostosować priorytet procesu za pomocą Menedżera zadań Windows.

Przełom
źródło
3

Jak wspomniał Nate, dopóki maszyna wirtualna będzie głównie obsługiwać proces jednowątkowy, nie ma powodu, aby alokować więcej niż jeden rdzeń.

Jeśli jednak planujesz używać go w taki sposób, aby uzyskać więcej rdzeni (program wielowątkowy, wiele programów równoległych itp.), Historia jest bardziej skomplikowana. Wcześniej zakładałem, że użycie połowy procesorów na maszynę wirtualną było dobrym pomysłem. Okazuje się, że nie zawsze jest to optymalne.

Jedynym sposobem, aby się upewnić, jest uruchomienie testów porównawczych .. Nie wiem dlaczego, ale w moim systemie Core2 Quad (który ma obsługę VT-x, zagnieżdżanie stronicowania ...), faktycznie użycie 1 z 4 rdzeni działa lepiej niż przy użyciu 2 lub więcej rdzeni! Widzę to po prostu w czasie uruchamiania maszyny wirtualnej, ale także podczas testów porównawczych kompilacji.

Z innym sprzętem wyniki są różne. Mam też i7 z 8 rdzeniami, a wydajność wydaje się znacznie lepiej skalować wraz z liczbą rdzeni (przy użyciu 4 tam szczęśliwie).

Moja wskazówka: najpierw sprawdź nowy sprzęt.

Arnout
źródło
1

Ufałbym planistowi systemu operacyjnego i po prostu ustawiłem maszynę wirtualną na liczbę rdzeni fizycznych, chyba że wiesz, że zawsze chcesz, aby host miał potencjalnie bezczynny rdzeń, gdy jesteś zajęty na maszynie wirtualnej.

Andrew Coleson
źródło
1

Zależy to od tego, co chcesz zrobić na maszynie wirtualnej, a także na maszynie fizycznej. Jeśli musisz użyć maszyny wirtualnej, gdy system operacyjny hosta jest używany do innych czynności, może być lepiej użyć dwóch rdzeni procesora dla maszyny wirtualnej, aby na hoście pozostały dwa, jeśli maszyna wirtualna jest w pełni obciążona. Z drugiej strony, jeśli pracujesz głównie na maszynie wirtualnej, możesz użyć wszystkich rdzeni procesora.

Jeśli jednak nie można oczekiwać, że gość użyje wszystkich czterech rdzeni jednocześnie, możesz bezpiecznie korzystać z nich wszystkich, kontynuując pracę nad systemem operacyjnym hosta. Pamiętaj, że zawsze możesz dostosować priorytet procesu VM, gdy jest on uruchomiony w systemie operacyjnym hosta, a system odpowiednio zrównoważy obciążenia.

bwDraco
źródło
Jest to oparte na moich doświadczeniach z VirtualBox. Ponieważ nie znam produktów VMware, mogę się mylić; jeśli tak, usunę tę odpowiedź.
bwDraco
0

tak, powiedziałbym również, że to zależy. Ale powiem, co wolę robić. W pracy mam czterordzeniowy procesor. Więc dla mojego obrazu wirtualnego (win7) przydzieliłem dwa procesory. W ten sposób mogę jednocześnie używać maszyny hosta i maszyny wirtualnej, a każda z nich ma równe zasoby procesora.

Joel Martinez
źródło