Tak naprawdę, jaki jest narzut związany z wirtualizacją i kiedy powinienem się martwić?

16

Szukam dobrych praktycznych zasad, aby zrozumieć, kiedy NIE należy wirtualizować maszyny.

Na przykład wiem, że w pełni związany z procesorem proces przy prawie 100% wykorzystaniu prawdopodobnie nie jest dobrym pomysłem na wirtualizację, ale czy ma sens uruchamianie czegoś, co wykorzystuje procesor przez większość czasu w „znacznej ilości” (powiedzmy 40 lub 50%)?

Kolejny przykład: jeśli zwirtualizuję 1000 maszyn, nawet jeśli są one używane tylko w niewielkim lub umiarkowanym stopniu, prawdopodobnie źle byłoby uruchomić je wszystkie na hoście z tylko 4 rdzeniami.

Czy ktoś może streścić wskazówki dotyczące wirtualizacji na podstawie obciążenia maszyny lub liczby komputerów-gości w porównaniu do zasobów hosta?

Zazwyczaj wirtualizuję na hostach Windows za pomocą VirtualBox lub VMWare, ale zakładam, że jest to dość ogólne pytanie.

kvista
źródło
1
nawet w przypadku niektórych zadań związanych z CPU proces wirtualizacji ma sens - umożliwia użytkownikom przesyłanie zadań do klastrów, ponieważ obrazy maszyn wirtualnych umożliwiają im znacznie większą kontrolę nad środowiskiem, w którym działają zadania, niż byłoby to możliwe na przykład przy użyciu prostego harmonogramu wsadowego.
Flexo
Ale w pewnym momencie planowanie „wykonywania maszyny wirtualnej” wydaje się zbędnym kosztem, gdy już jest wystarczająco trudne, aby zaplanować wątki w ramach jednej maszyny wirtualnej, mam rację?
kvista

Odpowiedzi:

13

Podsystem dyskowy. Jest to zazwyczaj najmniej dostępny zasób. Pamięć oczywiście, ale ta jest widoczna.

Ograniczenia podsystemu dyskowego działają na dwa sposoby. Jeśli system wykorzystuje dużo dyskowych operacji we / wy, inni goście zwalniają. Jeśli gość jest w produkcji, prawdopodobnie potrzebuje szybkiej odpowiedzi na zapytania internetowe. Może to być bardzo frustrujące, a także duży powód, dla którego nie wynająć sprzętu wirtualnego. Możesz zminimalizować ten problem, używając dedykowanych dysków.

Użycie tylko 512 MB pamięci w Gośćach powoduje umieszczenie całej pamięci podręcznej dysku na hoście. I nie jest równo podzielony między gości.

Nie martw się o procesory IO. W ten sposób wirtualizacja jest bardzo wydajna, często powiązana z wieloma procesami działającymi w tym samym systemie. Rzadko widuję systemy multi-xeon działające w 100% na procesorze.

edycja: literówki

Antti Rytsölä
źródło
3
ciężkie wymagania we / wy dysku byłyby najlepszym powodem, aby nie wirtualizować - jest to zasób najbardziej dotknięty karami za wirtualizację, patrz codinghorror.com/blog/2006/10/...
Jeff Atwood
Dzięki - oba komentarze są pomocne. Zastanawiam się, czy ktoś wie, dlaczego duże wykorzystanie dysku jest problematyczne w wirtualizacji? Dlaczego inżynierowie wirtualizacji ignorują ten stosunkowo podstawowy problem? A może jest to po prostu bardziej złożone niż wirtualizacja procesora?
kvista
Uwaga - @Jeff, czytam twój post na blogu z 2006 roku i zakładam, że to wyjaśni, dlaczego lepiej (tj. Rezerwacja wrzeciona), ale moje pytanie do projektantów / implementatorów wirtualizacji pozostaje takie samo - czy jest to po prostu problematyczne w przypadku wirtualizacji w sposób wirtualizacji procesora nie jest?
kvista
3
Jest tylko tyle prób, które może zrobić dysk twardy. W przypadku dysku twardego o długości 5 ms będzie to 200 sekund. I na ogół, gdy system operacyjny kopiuje pliki lub skanuje katalogi, zawsze używa 100% dysku io. W tym czasie wszystkie małe żądania z dysku są opóźnione i jest ich dużo. Również bufory systemu plików są marnowane z powodu kopiowania. Można powiedzieć, że nasza koncepcja działania systemu operacyjnego opiera się na bezczynnym dysku twardym.
Antti Rytsölä
1
Dzięki. Myślę, że byłoby interesujące zobaczyć, czy dyski SSD w ogóle zmienią to równanie. Ale teraz wchodzimy zbyt daleko w tryb dyskusji. Rozumiem - dziękuję wszystkim.
kvista
15

Rzeczy, których nigdy nie umieściłem w maszynie wirtualnej:

  • Wszystko, co korzysta ze specyficznego sprzętu, którego nie można zwirtualizować: zwykle grafika, sporo sprzętowych modułów bezpieczeństwa, wszystko ze spersonalizowanymi sterownikami (na przykład sterowniki sieciowe specjalnego przeznaczenia).

  • Systemy z problemami z licencją. Niektóre opłaty za oprogramowanie na fizyczny procesor lub rdzeń, bez względu na to, ile ich przydzielono do maszyny wirtualnej. Zostaniesz trafiony w audycie, jeśli posiadasz licencję na oprogramowanie dla jednego rdzenia uruchomionego na maszynie wirtualnej na 32-rdzeniowym serwerze.

Rzeczy, których odradzałbym umieszczając maszynę wirtualną:

  • Oprogramowanie, które już stara się wykorzystać wszystkie zasoby w sprzęcie towarowym. Maszyny działające w ramach „dużych zbiorów danych”, takie jak hadoop, są zwykle zaprojektowane do pracy na goły metal.

  • Wszystko, co zostanie dokładnie dostrojone, aby wykorzystać zasoby. Kiedy naprawdę zaczniesz dostrajać bazę danych, maszyny wirtualne walczące o zasoby naprawdę wrzucą klucz do pracy.

  • Wszystko, co już ma duże wąskie gardło. Już nie gra dobrze ze sobą, prawdopodobnie nie będzie dobrze grał z innymi.

Jest kilka rzeczy, które są całkiem niesamowite do umieszczania w maszynach wirtualnych:

  • Wszystko, co spędza sporo czasu bezczynnie. Hosty narzędzi, takie jak poczta i DNS, mają trudności z wygenerowaniem wystarczającego obciążenia na nowoczesnym sprzęcie, aby zagwarantować serwery dedykowane.

  • Aplikacje, które same nie skalują się dobrze (lub łatwo). Starszy kod dość często należy do tej kategorii. Jeśli aplikacja nie rozszerzy się, aby zająć serwer, użyj wielu małych serwerów wirtualnych.

  • Projekty / aplikacje, które zaczynają się małe, ale rosną. Znacznie łatwiej jest dodawać zasoby do maszyny wirtualnej (a także przechodzić na nowszy, większy sprzęt), niż zaczynać od samego początku.

Ponadto nie jestem pewien, czy przesadzasz w umieszczaniu ogromnej liczby maszyn wirtualnych na jednym hoście, ale jeśli próbujesz uzyskać duży stosunek VM: HW, możesz zamiast tego rozważyć ESX, Xen, KVM. Poradzisz sobie znacznie lepiej niż używanie VMware lub virtualbox w systemie Windows.

Cakemox
źródło
1
+1 bardzo pomocne zorganizowane komentarze - dzięki!
kvista
Jeszcze jeden komentarz - nawet jeśli używam ESX itp. Zakładam, że w pewnym momencie nie ma sensu umieszczać maszyn X na hoście Y-core. Jakie są dobre zasady? Zakładam, że gdzieś białe księgi wirtualizacji muszą rozwiązać ten problem, ale niestety nie jestem w stanie go łatwo znaleźć.
kvista
1
W przypadku VMware możesz zacząć tutaj: vmware.com/technology/whyvmware/calculator
Cakemox
Dla odniesienia: za pomocą powyższego łącza VMWare można skonfigurować do 30 maszyn wirtualnych na procesor. Domyślnie jest to 6 maszyn wirtualnych na procesor.
Alex Yursha
4

Wydajność wirtualizacji ma dwa punkty.

  • wspólne wąskie gardło
  • współzawodnictwo

Kto ma wspólne żelazne wąskie gardła? Jeśli jesteś zlokalizowany w środowisku zwirtualizowanym, jesteś bardzo zależny od uczciwości partnera hostingowego.

Myślę, że głównym pytaniem, jakie należy zadać surowej wydajności (szczególnie interaktywności), jest to, które części systemu wirtualizacji są emulowane. Różni się to w zależności od konfiguracji. Dysk i sieć to typowi kandydaci. Zasadniczo emulacja podwaja „koszt” wydajności wykonywania akcji, dlatego wszelkie opóźnienia sprzętowe należy liczyć dwukrotnie, a liczbę thruput o połowę.

Bittrance
źródło
1
liczby, które widziałem to CPU na 96-97%, sieć na 70-90%, a dysk na 40-70% (z czystego metalu)
Jeff Atwood
1
Komentowanie reguły +1 jest pomocne.
kvista 24.01.11
2

Ostatecznie żadne obciążenie o wysokiej wydajności nie powinno być wirtualizowane. Wydajność wirtualizacji nie jest trywialna. Zobacz wyniki moich testów tutaj:

http://www.altechnative.net/2012/08/04/virtual-performance-part-1-vmware/

OTOH, jeśli chcesz skonsolidować wiele maszyn, które są w większości bezczynne przez cały czas, wirtualizacja jest rozwiązaniem.

Gordan
źródło
1

Dobra odpowiedź od anttiR.

Ponadto systemy krytyczne czasowo. Po prostu stwierdziłem, że zgnilizna Hyper-V (VM powoli się opóźnia, wszystkie nowoczesne systemy operacyjne w VM robią to, często się resynchronizują) nie gra zbyt dobrze z niektórymi krytycznymi dla mnie aplikacjami, które rozwijam. Dodatkowo zamierzam użyć tam „dużej” jednostki centralnej i planuję zdobyć 12-rdzeniową maszynę tylko do tej aplikacji w produkcji.

TomTom
źródło
Gwiazdka to jedna z takich aplikacji. Podczas wizualizacji zdarzają się bardzo fajne rzeczy podczas połączeń konferencyjnych.
Ryaner
Mam problem ze stabilnością zegara przy nagrywaniu danych;) Dzięki Bogu otrzymuję wiarygodny znacznik czasu z pliku danych, ale ustalenie, czy występują problemy z siecią, jest trudne, gdy zegar systemowy nie jest stabilny.
TomTom