Najlepsza praktyka: vCPU na rdzeń fizyczny

27

Próbuję znaleźć dokumentację lub przewodniki po najlepszych praktykach dotyczące wirtualizacji w odniesieniu do udostępniania vCPU na rdzeń fizyczny (procesora). Jeśli to ma znaczenie, patrzę na vmWare dla implementacji wirtualizacji. Na przykład procesor Intel Xeon może mieć 4, 8 itd. Rdzeni. Chciałbym dowiedzieć się więcej o udostępnianiu poza jednym vCPU na jeden rdzeń fizyczny. Sprzedawca, z którym rozmawiam, zdecydowanie uważa, że ​​jeden rdzeń może być przydzielony do wielu vCPU.

To, co do tej pory obserwuję w moich badaniach, to: „Cóż, to zależy od twojego zastosowania”. W takim przypadku moja aplikacja edytuje kod, kompiluje / łączy, testuje i zarządza konfiguracją. Oczywiście nie wszystkie maszyny wirtualne muszą być skonfigurowane z wieloma procesorami vCPU na rdzeń, ale w ogólnym przypadku.

Dr Watson
źródło

Odpowiedzi:

24

Pojedynczy fizyczny procesor może być wykorzystany jako wiele procesorów vCPU. W rozwiązaniach do wirtualizacji rzadko brakuje zasobów procesora. Pamięć RAM i pamięć są zawsze ograniczającymi czynnikami ...

Pamiętaj, że w VMware wykorzystanie procesora jest reprezentowane w MHz, a nie w rdzeniach ... O ile nie ustawisz wszystkich swoich wirtualnych procesorów w 100% CAŁKOWITYM CZASIE , nie sądzę, że twój sprzedawca ma rację.

Spójrzmy na następujący klaster systemów ...

  • 9 hostów ESXi.
  • 160 maszyn wirtualnych
  • 104 fizyczne rdzenie procesora w klastrze.
  • Średni profil maszyny wirtualnej to: 4 vCPU i 4 GB do 18 GB pamięci RAM.
  • Procesor można bezpiecznie przesadzić ... ale pamiętaj, że można go również ograniczyć, zarezerwować i nadać mu priorytet na poziomie maszyny wirtualnej.

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

z innego aktywnego klastra - 3 hosty 42 maszyny wirtualne wprowadź opis zdjęcia tutaj

ewwhite
źródło
4
Po obejrzeniu 3936 migracji vMotion nie czuję się źle z powodu naszej 1200
Mark Henderson
2
Wczoraj patrzyłem na statystyki naszego klastra VM, które potwierdzają liczby podane przez @ewwhite. Mamy 3 hosty, łącznie 24 procesory i 55 GHz. Mamy 59 maszyn wirtualnych z przydzielonymi łącznie 79 procesorami wirtualnymi. Zgodnie ze statystykami vSphere w ciągu ostatnich 6 miesięcy uśredniliśmy nieco ponad 14 GHz (min. 9 GHz, maks. 25 GHz), aw tym czasie wystąpiła 0 rywalizacji o liczbę rdzeni procesora.
Paul Gear
7

Aby rozwinąć zapisywanie ewwhite, chyba że masz aplikacje, które mogą jawnie korzystać z wielu vCPU lub wielu rdzeni na vCPU, absolutnie zerowa korzyść z alokacji wielu vCPU / rdzeni do maszyny wirtualnej. W rzeczywistości częściej kończy się to niższą wydajnością, w przeciwieństwie do uruchamiania na pojedynczym procesorze vCPU, do którego przypisany jest jeden rdzeń, częściowo ze względu na narzut związany z planowaniem wymagany do uruchomienia wielu procesorów vCPU.

FWIW, w ustawieniach VDI często cytowaną liczbą jest 5 vCPU na rdzeń fizyczny. Oczywiście, biorąc pod uwagę pulpity biurowe. Jeśli twoje maszyny wirtualne są cały czas zajęte kompilowaniem kodu, możesz nie być w stanie zmieścić 5 vCPU na rdzeń fizyczny.

Powodem, dla którego tak wiele osób mówi, że „to zależy”, jest to, że tak naprawdę jest. Sprawdź wartości gotowości procesora, a następnie zdecyduj, czy możesz zwiększyć obciążenie procesora w danym systemie. CPU Ready jest miarą gotowości procesora vCPU do wykonania polecenia, ale musi poczekać, aż fizyczny czas procesora stanie się dostępny.

W twoim przypadku, jeśli kompilujesz duże programy, jest całkiem możliwe, że twoje maszyny wirtualne będą potrzebowały dużo czasu procesora. Jak zauważył ewwhite, normalnie wirtualizacja zwykle ogranicza się do operacji we / wy dysku i pamięci RAM, a nie procesora.

Extractor rzeczywistości
źródło
13
absolutely zero benefit in allocating multiple vCPUs/cores to a VM- nie do końca poprawne. Mamy aplikację jednowątkową, która zawieszała się co tydzień. Gdy pojedyncza karta vCPU była na poziomie 100%, nie było możliwości uzyskania dostępu do tego systemu i musieliśmy zresetować maszynę wirtualną na poziomie hiperwizora. Dodaliśmy drugi vCPU, a gdy aplikacja się zawiesiła, mogliśmy łatwo wejść i zabić obraźliwy wątek. Jest to trochę przypadek prawdy, ale nigdy nie można traktować absolutnie.
Mark Henderson
4
To, co napisał Mark, jest powodem, dla którego używamy dwóch rdzeni jako dolnej granicy dla każdej maszyny wirtualnej - bez względu na to, czy są one potrzebne, czy nie.
Nils
2
Wartość gotowa to najlepszy sposób na stwierdzenie, czy masz problem z hostowaniem hosta, wartość gotowa powinna być jak najniższa. Jest to% czasu, w którym maszyna wirtualna jest „gotowa” do użycia cyklu procesora, ale musi czekać, ponieważ procesor jest zajęty innym zadaniem. Aby wyjaśnić, dlaczego podanie vm wielu rdzeniom może mieć wpływ na wydajność, posłużę się prostym przykładem: jeśli mam 4 rdzenie fizyczne i 4 vms, jeśli masz 3 maszyny wirtualne z 2 rdzeniami i jeden VM z 4 rdzeniami, Twoje mniejsze maszyny wirtualne faktycznie dostaną więcej cykli, ponieważ lepiej „pasują” do wielokrotności. Idź jak najbardziej konserwatywny z tobą vcpus!
Rqomey
@ MarkHenderson Widzę, jak to może być korzystne, a coś takiego może potencjalnie spotkać faceta, który zadał pytanie, ponieważ pracuje z kompilatorami.
Reality Extractor
@Nils Uważam, że podawanie każdego rdzenia VM 2 niezależnie od tego, czy jest to potrzebne dla biznesu, jest naprawdę złym pomysłem. Może z łatwością wpłynąć negatywnie na Ciebie na wiele sposobów, rozmiar gniazda, niewystarczająca liczba rdzeni do ponownego uruchomienia / przełączenia awaryjnego, utrata wydajności z powodu tego, co napisał Rqomey, po prostu niezliczone inne rzeczy. Prawie zawsze możesz dostać się na maszynę wirtualną za pośrednictwem vCenter i DCUI.
Reality Extractor
3

Podstawowy problem jest zasadniczo taki sam jak w przypadku planowania procesów w systemie fizycznym. Dopóki obciążenie systemu jest niższe niż liczba rdzeni (lub nawet procesorów logicznych, w przypadku HyperThreading), wszystko jest w porządku, a procesory mogą obsłużyć obciążenie.

Tak długo, jak równoczesne obciążenie wszystkich używanych vCPU nie przekracza obciążenia, które mogą być obsługiwane przez twoje fizyczne rdzenie, wszystko jest w porządku.

Dla twoich potrzeb tylko kompilacja jest pracą wymagającą dużej mocy obliczeniowej, co jest potrzebne tylko od czasu do czasu. W przypadku maszyn wirtualnych kompilatora przydzielamy tyle procesorów, ile jest dostępnych. Więc jeśli istnieje potrzeba kompilacji, zostanie ona wykonana tak szybko, jak to możliwe (jeśli twój kompilator obsługuje kompilację równoległą).

Może to nie być prawdą w przypadku maszyny wirtualnej kompilatora, która jest pod stałym obciążeniem (np. Jeśli udostępniasz usługę internetową do tworzenia kompilacji i jest ona ciągle używana).

Nils
źródło
2

Jedną z podstawowych zasad, które widziałem (być może w dokumentacji VMware), jest nieprzydzielanie większej liczby rdzeni do maszyny wirtualnej, niż fizycznie istnieje na hoście, ponieważ spowodowałoby to emulację wielu rdzeni wirtualnych na jednym rdzeniu, co powodowałoby niepotrzebne obciążenie.

Paul Gear
źródło
1
A co z odwrotnością? Co się stanie, jeśli mam 6-rdzeniowy Xeon i przydzielę tylko 4 rdzenie na maszynie wirtualnej? Jaki byłby wtedy występ? Czy system VM będzie w stanie pobierać energię ze wszystkich 6 rdzeni fizycznych, czy będzie ograniczony do 4?
Overmind
Jeśli dasz mu tylko 4 rdzenie, będzie miał dostęp tylko do 4 rdzeni jednocześnie. Ale rozumiem (niepotwierdzone), że te 4 wirtualne rdzenie mogą być przydzielone do dowolnych 4 z 6 fizycznych rdzeni, chyba że skonfigurowałeś przypinanie.
Paul Gear