Czy maszyna wirtualna z 2 procesorami jest naprawdę szybsza niż maszyna z 4 procesorami?

67

Nasz dział IT stworzył maszynę wirtualną z przydzielonymi 2 procesorami zamiast 4, o które prosiłem. Powodem jest to, że maszyna wirtualna działa lepiej z 2 procesorami niż 4 (według nich). Uzasadnieniem jest to, że hypervisor VM (w tym przypadku VMWare) czeka na dostępność wszystkich procesorów przed uruchomieniem któregokolwiek z nich. Dlatego oczekiwanie na 4 procesory zamiast 2 zajmuje więcej czasu.

Czy to stwierdzenie ma sens?

AngryHacker
źródło

Odpowiedzi:

62

To kiedyś było prawdą, ale nie jest już wyłącznie prawdą.

Odnoszą się one do ścisłego wspólnego planowania .

Co najważniejsze, podczas gdy w ścisłym algorytmie współsprawiania istnienie opóźnionego vCPU powoduje zatrzymanie całej maszyny wirtualnej. W uproszczonym algorytmie wspólnego planowania szereg wiodący vCPU decyduje, czy powinien się zatrzymać na podstawie pochylenia względem najwolniejszego vCPU rodzeństwa

Teraz, jeśli host ma tylko 4 wątki, głupio byłoby przydzielić je wszystkie. Jeśli to ma dwa procesory i 4 wątki na procesorze, to może nie chcą przeznaczyć całą zawartość pojedynczego procesora, jak Twój hypervisor powinien starać się zachować vCPUs w tym samym węźle NUMA, aby dostęp do pamięci szybciej, a ty utrudniając to zadanie, przydzielając całe gniazdo jednej maszynie wirtualnej (patrz strona 12 tego pliku PDF powyżej).

Są więc scenariusze, w których mniej vCPU może działać lepiej niż więcej, ale nie jest to prawdą w 100% przypadków.

Wszystko, co zostało powiedziane i zrobione, bardzo rzadko przydzielam więcej niż 3 vCPU na gościa. Każdy dostaje domyślnie 2, 3, jeśli jest to duże obciążenie, i 4 za takie rzeczy, jak serwery SQL lub naprawdę duże maszyny wirtualne do przetwarzania wsadowego lub serwer terminali z dużą liczbą użytkowników.

Mark Henderson
źródło
3
Na marginesie - nawet poza przeszkodami w wirtualizacji pisanie oprogramowania wykorzystującego równoległość jest zazwyczaj trudne. Jeśli twoi specjaliści od oprogramowania nie są wystarczająco dobrzy, może być lepiej mieć czterech wirtualnych hostów obsługujących jedno wystąpienie oprogramowania, każdy niż jeden host z czterema wątkami wykonania.
Luaan
4
@Luaan W pudełku jest SQL Server, więc zakładam, że mają tam dobrych facetów od oprogramowania.
AngryHacker
1
@AngryHacker tak Serwer SQL może bardzo efektywnie używać wszystkich 4 rdzeni, zakładając, że masz odpowiednie MAXDOPustawienia. Jednak w zależności od obciążenia nadmiernie opodatkowany serwer SQL jest często oznaką złego projektu bazy danych - złe indeksy, brak indeksów klastrowych, zbyt wiele indeksów, brak optymalizacji itp. (Nie zawsze, ale często).
Mark Henderson
1
@Luaan To wciąż paralelizm ... tylko z dużo większym opóźnieniem, jeśli muszą ze sobą rozmawiać. :)
reirab
@MarkHenderson Jest dość dobrze zoptymalizowany, ale niektóre obciążenia są po prostu zbyt duże, aby mogły być łatwo obsługiwane przez 2 procesory i mnóstwo innych zapytań w tym samym czasie.
AngryHacker
15

W dużej mierze zależy to od hiperwizora i administratorów, którzy go uruchamiają, pozwól mi wyjaśnić:

  1. Złą praktyką jest dowolne dawanie 4 procesorów tylko dlatego, że o to prosiłeś. Mówiąc ogólnie, uważasz, że potrzebujesz 4; ale monitorowanie zasobów mówi, że potrzebujesz tylko 1.
  2. Na przykład VMware ESXi wymaga zablokowania wszystkich pCPU, gdy vCPU żąda zasobów procesora ; więc na tym hiperwizorze ma to zły wpływ na wydajność. KVM nie wykonuje blokowania jak ESXi; używa bazowego harmonogramu jądra, ale nadal na dłuższą metę może tworzyć rywalizację z procesorem.
  3. Jeśli budujesz systemy od samego początku z 4 procesorami, tak naprawdę nie skalujesz się, ale zwiększasz (co jest złą praktyką, szczególnie na maszynach wirtualnych). Możesz sprawdzić, w jaki sposób projektujesz wszystko, nad czym pracujesz, aby można go było dostosować do współczesnej nowoczesnej infrastruktury chmurowej.

Czego możesz się z tego nauczyć? Zawsze twórz maszyny wirtualne z minimalnymi zasobami i zwiększaj je w razie potrzeby. Zawsze skaluj w górę zamiast w górę, a będziesz mógł uruchomić aplikację w dowolnym miejscu.

Z powodu blokowania, którego można doświadczyć za pomocą hiperwizora, prawdą jest, że 2 procesory mogą być szybsze niż 4 procesory.


źródło
4

Tak, stwierdzenie to ma sens w ogóle. Jest to jednak coś, co powinieneś przetestować pod kątem dokładnej konfiguracji i obciążenia. Czasami więcej procesorów jest lepsze, jeśli można z nich skorzystać. Jeśli jednak nie masz tak dużej równoległości, maszyna wirtualna skonfigurowana z mniejszą liczbą procesorów będzie często działać nieco lepiej, ponieważ unika spowolnień spowodowanych przerwami w stanie gotowości procesora.

Zmniejszyłem vCPU na wielu naszych maszynach wirtualnych i zauważyłem poprawę przepustowości na większości. Garstka pogorszyła się i trzeba było podbić liczbę vCPU.

Brian Knoblauch
źródło