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.
źródło
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.
źródło
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.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).
źródło
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.
źródło