0
Items : 0
Subtotal : 0,00 
View CartCheck Out
0
Items : 0
Subtotal : 0,00 
View CartCheck Out

Zastosowanie maszyn wirtualnych w przedsiebiorstwie – Wstęp

Wirtualizacja jest szerokim pojęciem odnoszącym się do wielu aspektów dzisiejszego świata IT. Najprościej można ją zdefiniować jako szereg sposobów abstrakcji zasobów sprzętowych środowiska informatycznego. Wirtualizacja umożliwia dowolne (ograniczone aktualnymi możliwościami sprzętowymi i programowymi, oraz założeniami projektowymi) modyfikowanie zasobów sprzętowych dla potrzeb oprogramowania czy wymagań użytkownika. Wykorzystanie maszyn wirtualnych w przedsiębiorstwie ma przede wszystkim na celu:

  • zwiększenie stopnia wykorzystania infrastruktury IT przy jednoczesnym zmniejszeniu zapotrzebowania na nowy sprzęt,
  • zmniejszenie zapotrzebowania na powierzchnię w data center, ograniczenie zużycia energii, klimatyzacji, zasobów dyskowych poprzez zmniejszenie ilości fizycznych serwerów,
  • ograniczenie kosztów osobowych poprzez zmniejszenie ilości osób administrujących infrastrukturą wirtualną, oraz integrację zarządzania w jednym miejscu,
  • zwiększenie dostępności serwerów poprzez zaimplementowane w hypervisorach – mechanizmy klastrowania i rozkładania ruchu,
  • przyspieszenie procesu instalacji i konfiguracji nowych serwerów poprzez zastosowanie szablonów maszyn wirtualnych,
  • ułatwienie tworzenia środowisk testowych, oraz programistycznych dla nowych projektów, zarządzanie cyklem życia projektu.
Rys. 1 Idea działania wirtualizacji

Mamy pewne zasoby sprzętowe – procesor, pamięci, interfejsy sieciowe, dyski twarde. Wyobraźmy sobie sytuację w której zasoby te są na tyle duże że wykorzystywanie ich na jeden serwer było by zwykłym marnotrawstwem mocy obliczeniowej jak i pieniędzy. Chcemy więc na jednej maszynie fizycznej zainstalować dwie maszyny wirtualne i uzyskać dzięki temu wyższy stopień utylizacji niewykorzystywanych zasobów.

Niezbędny nam jest do tego program sterujący nazywany „Hypervisorem”. Jest to oprogramowanie działająca na zasadzie monitora, łączące sprzęt fizyczny do maszyn wirtualnych pozwalając wielu systemom operacyjnym korzystać w tym samym czasie z jednych zasobów sprzętowych, nie powodując konfliktów związanych z dostępem do sprzętu. Hypervisory są aktualnie klasyfikowane w dwóch typach.

  • Type 1 (lub natywny) jest to rodzaj hypervisora uruchamianego na dokładnie pod niego skonstruowanej platformie sprzętowej, jako system operacyjny z zaszytym programem kontrolującym, system gościnny w takiej formie jest uruchamiany na drugim poziomie nad sprzętem. Do tego rodzaju hyeprvisorów można zaliczyć CP/CMS, z/VM, Oracle VM, VMware’s ESX Server, LynxSecure from LynuxWorks, L4 microkernels, Green Hills Software’s INTEGRITY Padded Cell, VirtualLogix’s VLX, TRANGO, IBM’s POWER Hypervisor (PR/SM), Microsoft’s Hyper-V (2008), Xen, Citrix XenServer, Parallels Server (2008), ScaleMP’s vSMP Foundation (2005) i Sun Logical Domains Hypervisor (2005). Należy również zwrócić uwagę na oprogramowanie które zmienia jądro systemu operacyjnego Linux na hypervisora – Hitachi’s Virtage, VMware ESXi, KVM.
  • Type 2 (lub gospdaż, właściciel) jest to rodzaj hypervisora uruchamianego na istniejącym innym systemie operacyjnym. Do tego rodzaju hypervisorów możemy zaliczyć VMware Server (znany jaki GSX), VMware Workstation, VMware Fusion, QEMU, Microsoft’s Virtual PC i Microsoft Virtual Server, Sun’s (wcześniej InnoTek) VirtualBox, jak i Parallels Workstation i Parallels Desktop.

Następnie hypervisor wirtualizuje sprzęt udostępniając go dla maszyn wirtualnych w taki sposób aby systemy goszczące w tych maszynach rozpoznały je jako swoje. Istnieje kilka typów wirtualizacji.

  • Pełna wirtualizacja – pozwala na zupełne uniezależnienie systemu goszczącego w maszynie wirtualnej od warstwy fizycznej, daje możliwość instalowania każdego systemu operacyjnego, umożliwia ona pełna symulacje dla systemu gościa zasobów sprzętowych.
  • Wspierana sprzętowo wirtualizacja – zapewnia pełną wirtualizację spieraną dodatkowo przez możliwości sprzętu w szczególności procesora, po raz pierwszy zaimplementowana w maszynach System/370, od 2005 roku wspierana na architekturze x86 poprzez technologie Intel VT i AMD-V.
  • Para wirtualizacja – technologia wirtualizacji która oparta jest na oprogramowaniu, w której system goszczący w maszynie wirtualnej współpracuje z maszyną matką w zakresie dostępu do zasobów sprzętowych, tak aby żaden z systemów nie wszedł z nim w kolizję.

Podczas konfiguracji hypervisora można przydzielić dla jednego serwera więcej zasobów dla drugiego mniej, zależnie od potrzeb usług, aplikacji które będą na nim uruchamiane. Dzięki zastosowaniu wirtualizacji możemy zamiast kilkunastu, maszyn fizycznych które będą miały utylizację zasobów na poziomie 5 – 10% stworzyć jedną maszynę fizyczną z zainstalowanym hypervisorem, oraz maszynami wirtualnymi odpowiedzialnymi za usługi której utylizacja będzie na poziomie 80%. Takie rozwiązanie zapewnia nam oszczędności w kosztach utrzymania infrastruktury informatycznej, gdyż zdecydowanie taniej i łatwiej jest zapewnić energię elektryczną, chłód, miejsce dla jednego a nie kilku serwerów, poza tym wykorzystamy w pełni możliwości serwera. Dodatkowo warto zauważyć jak spadają koszty zarządzania i łatwość tworzenia kopii bezpieczeństwa platformy firmowej która zintegrowana jest w jednym miejscu. Wraz z rozwojem wirtualizacji w środowiskach serwerowych można zaobserwować że czołowi producenci oprogramowania integrują w swoje hypervisory mechanizmy bezpieczeństwa umożliwiające zapewnienie ciągłości działania, jak i szybkiego odzyskania sprawności systemu po awarii. Szereg systemów klastrowania, rozkładania obciążenia stają się standardem w oprogramowaniu klasy enterprises [Tulloch, 2009].

Rys. 2 Schemat działania wirtualizacji wspartej poprzez rozszerzenia zaimplementowane w procesorach [przykład na podstawie: Advanced Micro Devices, 2008]

Dzięki zaimplementowaniu rozszerzenia wspierającego wirtualizację w procesorach przez czołowych producentów – firm AMD i Intel. Wirtualizacja stała się bardziej popularna na komputerach osobistych. Firma AMD wprowadziła technologię AMD-V dostępną w procesorach 64 bitowych. Firma Intel nazwała rozszerzenie Intel VT-x, składa się ono z dwóch elementów, rozszerzenie dla platformy 32 bitowej – VT-x z VT-d, oraz dla platformy 64 bitowej – VT-i. Technologie te usuwają wiele problemów napotkanych przy tworzeniu maszyn wirtualnych na architekturze x86.

Maszyna fizyczna VMCB0 posiada zainstalowany program kontrolny umożliwiający wirtualizację. Podczas gdy ma zostać uruchomiona maszyna wirtualna VMCB1 urządzenie VMCB0 wywołuje instrukcję „VMRUN”, która jest zaimplementowana w procesorze. Polecenie te uruchamia cała procedurę tworzącą maszynę wirtualną i inicjuje ono działanie na rejestrze „RDMSR” co w efekcie tworzy podstawy maszyny wirtualnej w której może być uruchomiony system operacyjny a następnie aplikacje. Istnieje jeszcze szereg instrukcji wspierających wirtualizację, miedzy innymi – „VMPTRLD, VMPTRSD, VMCLEAR, VMREAD, VMWRITE, VMCALL, VMLAUNCH, VMRESUME, VMXOFF, VMXON”. Dodatkowo warto zauważyć, że rozszerzenia owe mają dwa tryby pracy – VMX root operation, VMX non-root operations, kontrolowane przez specjalną strukturę VMCS/VMCB (zawiera guest-state area, host-state area i VMexecution control fields, oraz w przypadku AMD MSR). Dodatkowym wsparciem dla wirtualizacji jest technologia IO MMU, która zapewnia sposób konfiguracji dostarczania przerwań do maszyn wirtualnych oraz zapobiega używaniu DMA. IO MMU jest pośrednikiem pomiędzy dyskiem a pamięcią główną, podobnie jak MMU jest pośrednikiem między procesorem a pamięcią główną [Rutkowska, 2008] [Neiger, Santoni, Leung, Rodgers, Uhlig, 2006].

Warto również wspomnieć o kryteriach skuteczności maszyny wirtualnej sformułowanych przez Gerald J. Popeka i Roberta P. Goldberga. Według nich maszyna wirtualna musi spełniać trzy kryteria:

  • Odpowiedniość – program działający na maszynie wirtualnej musi zachowywać się w dokładnie taki sam sposób, jak na rzeczywistym sprzęcie,
  • Kontrola zasobów – wirtualna maszyna musi w pełni kontrolować wszystkie zasoby, które są wirtualizowane,
  • Wydajność – większa część instrukcji musi być wykonywana bez udziału maszyny wirtualnej.

Natomiast system operacyjny posiada trzy zbiory instrukcji dostępnych na danej architekturze:

  • Instrukcje uprzywilejowane – ich efektem jest przerwanie lub wywołanie systemowe w trybie użytkownika lub ich brak w trybie jądra,
  • Instrukcja wrażliwe ze względu na kontrolę – w trakcie wykonywania mogą zmienić konfigurację zasobów systemowych,
  • Instrukcje wrażliwe ze względu na wykonanie – ich działanie jest zależne od konfiguracji systemu.

Biorąc pod uwagę powyższe kryteria, oraz instrukcje można poznać twierdzenie przedstawione przez Geralda J. Popeka i Roberta P. Goldberga [Popek, Goldberg, 1974]:

„Dla każdego standardowego komputera trzeciej generacji wirtualna maszyna może zostać skonstruowana, jeśli zbiór instrukcji wrażliwych jest podzbiorem zbioru instrukcji uprzywilejowanych.”

Z tego twierdzenia wynika, że każda operacja mogąca spowodować niepoprawne działanie maszyny wirtualnej skutkuje przerwaniem dzięki któremu maszyna może wykonać operację prawidłowo, lub podjąć działanie to umożliwiające. Reszta instrukcji nieuprzywilejowanych jest wysyłana do fizycznego sprzętu, aby utrzymać odpowiedni poziom wydajności.

Jednak okazuje się, że można zbudować maszynę wirtualną opartą o architekturę nie spełniającą założeń twierdzenia. Przykładam dynamiczna rekompilacja z wykrywaniem wrażliwych instrukcji, czy para wirtualizacja.

About the author

Bloger i niezależny konsultant z wieloletnim doświadczeniem w branży IT. Specjalizujący się w wirtualizacji i cloud computingu. Posiada tytuły MCP, MCTS, VCP oraz VMware vExpert.

Leave a Reply