Pokročilé architektury počítačů Přednáška 5 Virtualizace Martin Milata
Obsah Typy virtualizace (připomenutí) Tři třídy virtualizace VM s vlastním OS Softwarová úplná virtualizace Paravirtualizace Úplná virtualizace s podporou HW Virtualizace paměti Stránkování a způsoby jeho realizace Virtualizace I/O zařízení Přímo mapovaná zařízení DMA přemapování Přemapování přerušení BIOS
Typy virtualizace Virtualizaci a s ní spojené virtuální stroje (Virtual Machines VM) obvykle dělíme do tříd podle způsobu poskytování HW prostředků Mapování fyzických prostředků VM Emulace prostředků pro VM (vytváření virtuálního HW) Hardwarové Emulátory duplikuje nebo emuluje HW prostředky s cílem poskytnout programům nativní přístup k nim emulace dnes zastaralého či již neexistujícího HW, sdílení drahých HW zdrojů, umožnění běhu programu na různých počítačových architekturách emulací HW prostředků Emulátor i386 architektury pro PowerPC, Emulátor MIPS procesoru na x86 architekturách Aplikační virtuální stroje (Application Virtual Machine - AVM) cílem je izolace běžící aplikace od hardware počítače a tím zvýšení její přenositelnosti mezi různými platformami pro různé platformy je potřeba implementovat pouze AVM Java, Microsoft.NET
Typy virtualizace Mainframové virtuální stroje (Mainframe Virtual Machine MVM) Obvykle nákladná mainframe řešení, efektivní sdílení výpočetních prostředků, rozsáhlé možnosti bezpečnostních politik IBM mainframe System/370, System/390 Virtuální stroje s vlastním OS (Operating systém Virtual Machine OSVM) Softwarová emulace uživatelského počítače. Uživateli dává iluzi plnohodnotného počítače se vlastním OS Vytváří prostředí virtuálního počítače, ve kterém běží samostatný OS Hostitelský počítač provozuje na VM nezávislý OS, který mapuje nebo emuluje HW prostředky potřebné pro běh OS v rámci VM VMware řešení, KVM, Xen, Microsoft Virtual PC, Virtual Server, VirtualBox a další Dále budeme předpokládat virtualizaci tohoto typu Paralelní virtuální stroje (Parallel Virtual Machine PVM) Obtížně odlišitelná od paralelního počítaní Vytváří distribuované výpočetní prostředí běžící na mnoha počítačích s iluzí přítomnosti jen jednoho výpočetního uzlu Obvykle distribuována přes stovky až tisíce počítačů. Seti@Home projekt, Projekt RC5
Tři třídy virtualizace Softwarová plná virtualizace Hypervisor asistuje každé privilegované instrukci hostovaného OS Nevyžaduje žádné změny v software ani vlastním OS hostovaného počítače (guest VM) Pokus o provádění privilegovaných instrukcí guest OS způsobí vyvolání výjimky obsluhované hypervisorem (pouze VMM běží v ringu 0 ) Zachycená privilegovaná instrukce je nahrazena odpovídající skupinou instrukcí definovaných jako důsledek obsluhy VMM, které zajistí izolaci a ekvivalentní výsledek pro VM Provoz dnes zastaralých OS (MSDOS, MS Windows 3.1,...) Představuje vysokou zátěž a tím významný pokles výkonu VM při provádění privilegovaných instrukcí Mezi privilegované instrukce patří například instrukce změn mapování paměti (stránkování, ) nebo požadavky na I/O zařízení
Tři třídy virtualizace
Tři třídy virtualizace Operačním systémem asistovaná virtualizace nebo paravirtualizace Je založena na modifikaci OS pro VM OS virtuálního počítače spolupracuje s hypervisorem a spoluutváří virtuální prostředí (resp. počítač) Modifikací kódu OS se snižuje počet privilegovaných instrukcí, které je potřeba obsluhovat výjimkou na procesoru Hypervisor stále řídí přístup k HW prostředkům a zajišťuje izolaci jednotlivých VM Znemožněn běh OS, které nejsou pro daný hypervisor upraveny Přináší nejmenší výkonnostní dopad na VM Komunikace s I/O zařízeními je obvykle výhradou hypervisoru
Tři třídy virtualizace Hardwarově asistovaná virtualizace Přináší zjednodušení virtualizačních technik ve spolupráci s hardware Intel VT-x a AMD AMD-V podpora na úrovni procesoru Základní podpora spočívá v rozšíření tříd oprávnění o třídu pod ringem 0 Vyšší stupeň oprávnění přináší možnost zachování běhu hostovaného OS na úrovni 0 Procesor ukládá stav VM v Virtual Machine Control Structures resp. Virtual Machine Control Blocks Dosahuje vyššího výkonu než plná virtualizace a s další podporou v HW se vyrovnává paravirtualizaci Privilegované instrukce mohou být klasifikovány do dílčích tříd s rozdílnou úrovní zásahu hypervisoru Zásah hypervisoru je realizován na základě výjimky, která má za následek snížení výkonu VM (při obsluze je řízení a tedy i procesor předán VMM) Dnes je HW podpora rozšiřována o další techniky, z nichž některé jsou uvedené dále
Tři třídy virtualizace
Úplná virtualizace Nahrazování privilegovaných instrukcí Označováno jako technika binárního překladu Můžeme rozlišit tři odlišné přístupy Interpretace pro spuštěný kód hypervisor opakovaně provádí načtení instrukce; dekódování; provedení výpočtu nebo nahrazení instrukce voláním obslužné rutiny (privilegované instrukce) Statický překlad v závislosti na implementaci překladače se před spuštěním programu provede jeho celé prohledání na přítomnost privilegovaných instrukcí; nalezené instrukce jsou buď nahrazeny voláním obslužné rutiny nebo ošetřeny předřazením umělé výjimky Dynamický překlad provádí se za běhu programu vždy na základním bloku kódu (kód, který neprovádí změnu hodnoty PC); překladem je prováděno zmapování bloku spolu s produkcí seznamu adres privilegovaných instrukcí; pokud PC dosáhne některé z uvedených adres, řízení převezme hypervisor
Úplná virtualizace Dynamický překlad Při běhu programu je VMM analyzován a překládán pouze jeden základní blok Blok, který neobsahuje privilegované instrukce nebo instrukce, jenž by mohly narušit sekvenční provádění Pokud se v analyzované části taková instrukce objeví, překlad je zastaven a její adresa uložena Načtení uložené instrukce procesorem vyvolá výjimku a řízení je předáno hypervisoru VMM po převzetí řízení Provede kontrolu typu instrukce, která výjimku způsobila Privilegovanou instrukci obslouží odpovídající rutinou Při instrukci větvení provede překlad cílového bloku nebo spustí jeho provádění pokud již byl přeložen
Úplná virtualizace Dynamický překlad Co s přeloženými bloky VMM je může po dobu běhu programu uchovávat Přeložený blok musí být sledován na případné změny Stránka s blokem je označena pouze pro čtení ; případný zápis vyvolá výjimku a dá tím VMM možnost korektně realizovat zápis a nový překlad Modifikovaný blok nesmí být dostupný původnímu programu Vede k urychlení provádění; blok se nemusí znovu překládat Program nemůže pracovat s modifikovaným kódem; při provádění je virtualizace zcela transparentní Ochrana paměti na úrovni práv neumožňuje danou situaci vyřešit (paměť kterou nelze číst, nelze ani spouštět) Řešením je separátní uložení přeloženého bloku na jiném místě paměti (čtení se provádí z adres původního programu; spouštění provádí VMM z nové adresy) Optimalizace dynamického překladu je dále možná při prvním průchodu přeloženým blokem; vede k vyšší efektivnosti opakovaného provádění
Paravirtualizace Vychází z předpokladu že hostovaný systém si je vědom běhu ve virtualizovaném prostředí Privilegované instrukce a rutiny, které by vedly k jejich vzniku, jsou v hostovaném OS nahrazeny za volání hypervisoru (hypercall) Oproti úplné virtualizaci VM nepotřebuje BIOS HW je emulován resp. přístupný přes volání hypervisoru Provádět pravidelnou synchronizaci času na základě přerušení časovače (VM se při aktivaci na skutečný čas zeptá) Překlady adres a stránkování Řešeny bez zvláštního HW na standardní MMU Hostovaný systém může tabulky stránek jen číst Jen hypervisor může provádět změny (OS při změně volá hypercall na hypervisor)
Hardwarová podpora virtualizace Dnes nezahrnuje pouze HW podporu virtualizace procesoru Direct I/O (DMA a Interrupt přemapování) Na procesoru přítomnost ringu -1 Označován VMX root; slouží pro běh hypervisoru Operace pro vstup resp. výstup z VMX root úrovně pracují se Virtual Machine Control Structure resp. Virtual Machine Control Blocks Slouží k rychlému uložení stavu procesoru při změně úrovně oprávnění nebo přepnutí mezi hostovanými systémy Ukládají se např. segmentové registry, registry stránkování, registry mapy přerušení
Virtualizace paměti Cílem je umožnit sdílení a dynamickou alokaci fyzické paměti virtuálním počítačům Přístup k virtualizaci velmi podobný k virtuální paměti v moderních OS Mezi reálnou fyzickou a virtuální fyzickou paměť vložena virtualizační vrstva Přítomnost virtualizační vrstvy včetně navazujících mechanizmů správy paměti přináší bez HW podpory znatelnou zátěž pro hostitelský systém
Stránkování a segmentace Segmentace na procesorech 80386 a dalších
Stránkování a segmentace Stránkování
Virtualizace paměti Adresní prostory a typy adres pamětí Pro každý z níže uvedených adresních prostorů lze definovat odpovídající typ adresy virtuální adresní prostor VM (virtual address VA) lineární adresní prostor VM (linear address LA) Překlad virtuální adresy procesu vzniká lineární adresa, její další dělení závisí na počtu úrovní stránkování, každý proces disponuje nezávislým lineárním prostorem pseudo-fyzický adresní prostor VM (guest physical address gpa) Prostor alokován procesu běžícího v rámci VM (obvykle segmentován) Pomocí stránkování v rámci VM je přeložena lineární adresa na pseudofyzickou adresu, adresy fyzické paměti virtuálního počítače (nejedná se o skutečnou fyzickou adresu, v tomto smyslu jí pouze chápe OS virtuálního PC) fyzický adresní prostor (system physical address spa) Obvykle překlad pomocí stránkování na úrovni hypervisoru (VMM), produkuje skutečnou fyzickou adresu
Stránkování a virtualizace Při realizaci virtualizace paměti se obvykle používá dvou úrovní stránkování Stránkování paměti v rámci hostovaného OS Vnořená úroveň v rámci VM Vyžaduje SW řešení stránkování nebo explicitní HW podporu (dnešní procesory Nedted page resp. Rapid Virtualization Indexing a Extended Page Table) Přináší zátěž pro hostující systém resp. CPU a paměť Stránkování paměti v rámci hypervisoru Nativní podpora v HW (hypervisor představuje stejnou úroveň jako nevirtualizovaný OS) Stránkování vnořené virtuální úrovně je potřeba udržovat v konzistentním stavu s používaných HW stránkováním
Softwarové řešení stránkování Procesor v době běhu VM využívá k překladu LA na PA skryté tabulky stránek (shadow page table spt) spt je derivována z tabulky stránek OS virtuálního počítače (guest page table gpt) Přenos dat musí být obousměrný, OS na základě aktualizací gpt při používání např. počítá stránky pro výměnu (LRU algoritmus) Techniky zachování konzistence jsou obvykle založeny na obsluze výpadku stránky docílené pomocí write-protected gpt hypervisor chání proti zápisu gpt změna obsahu gpt vyvolá výjimku výpadku stránky obsluha výjimky hypervisorem se zachováním konzistence gpt a spt Virtual TLB (líná synchronizace) gpt je přímo modifikována OS virtuálního počítače bez účasti hypervisoru požadavek na překlad podle vloženého záznamu způsobí výpadek stránky (procesor pracuje na základně spt ne na gpt) Výpadek je obsloužen hypervisorem s dodatečnou synchronizací obou tabulek stránek
Softwarové řešení stránkování Host využívá vlastního stránkování k udržování informace o gpm OS realizuje vlastní správu paměti, která se nesmí lišit od reálné Každý přístup do paměti vyžaduje v VMM realizovaný (SW) překlad adresy Hypervisor provádí přístup do paměti pomocí stránkování, které je na VM nezávislé Provádí skutečný přístup do fyzické paměti v závislosti na umístění gpm ve fyzické paměti V obou případech se k výpočtu fyzické adresy využívá virtuální adresa hosta
HW podpora stránkování Rozšiřuje standardní mechanizmus stránkování o možnost souběžné práce s dvěma nezávislými tabulkami stránek Tabulka udržovaná virtualizovaným OS překládá gva na gpa Tabulka udržovaná hypervisorem překládá gpa na spa pro přístup do reálné fyzické paměti Obojí překlad je realizován s podporou HW Významné snížení zátěže VMM a zvýšení výkonu VM při práci s pamětí Dříve byl překlad v rámci VM realizován softwarově Paralelní prohledávání vnáší navíc režii spojenou s nutností intenzivnější práce s pamětí (projevuje se vyšší penaltou při TLB mis) Pro 4-úrovňové stránkování se počet přístupů ze 4 zvýší na 24
HW podpora stránkování Návaznost na TLB Ukládá výsledky překladu gva na spa Hypervisor musí zajistit vymazání TLB při přepnutí VM Značkování TLB záznamů tagy virtuálních počítačů pro předcházení destrukce obsahu HW podpora na procesorech AMD Nested Page Table resp. Intel Extended Page Table
HW podpora stránkování
Čtyři typy virtualizace I/O zařízení Emulace VMM emuluje kompletní zařízení I/O zařízení nemusí fyzicky existovat, emulace starých zařízení Nevýhodou je pomalost vše se děje za účasti VMM v SW Softwarové rozhraní VMM poskytuje pouze syntetizované softwarové rozhraní k fyzickému I/O HW VMM je stále přítomno v komunikaci s I/O SW rozhraní více počítá s virtualizací, Zvýšení výkonu proti plné emulaci Přiřazení I/O zařízení (Přímé mapování) I/O zařízení je přímo mapováno na konkrétní VM Model umožňuje přímou interakci s HW s minimální nebo dokonce žádnou účastí VMM Nejmenší výkonnostní dopad, téměř reálný výkon fyzického zařízení Sdílení I/O zařízení Rozšiřuje předešlý model přímého mapování o možnost sdílení zařízení více VM se zachováním přímého přístupu Zařízení musí být schopno akceptovat I/O požadavky z více zdrojů (více funkčních rozhraní)
Model přímého mapování I/O zařízení do VM Všechny předešlé modely mají za cíl izolaci a omezení přístupu ke zdrojům vlastněným různými VM Pro minimalizaci výkonnostních dopadů VMM je potřeba při přímém mapování zajistit podporu v HW pro Přidělení I/O zařízení flexibilní přidělení zařízení konkrétnímu VM pro možnost rozšíření ochrany a izolace I/O operací prováděných VM Přemapování DMA (DMA Remapping) podpora nezávislého překladu adres pro realizaci DMA ze zařízení Přemapování přerušení (Interrupt Remapping) přesměrování a izolace přerušení od zařízení na externí kolektor nebo konkrétní VM Řešení chybových stavů zacházení s DMA výjimkami (ochrana paměti, dopady VM isolace)
HW podpora DMA přemapování DMA přemapování přináší hardwarovou podporu izolace přístupu zařízení do paměti Pomocí odlišných skupin I/O (paměťových) stránek jsou zařízení rozdělena do specifických domén HW DMA přemapování zachytí DMA požadavek, který pomocí stránkovacího mechanizmu přeloží a provede kontrolu zda je přístup povolen OS může využít DMA přemapování k Ochraně OS Doména (stránky v paměti) operačního systému není přístupná pomocí DMA (ochrana před chybami v ovladačích zařízení, atd.). Přemapování DMA požadavků starých zařízení do oblasti vysoké paměti (32bit zařízení pracuje s daty za 4GB adresním prostorem) Izolaci DMA každé zařízení má vlastní doménu, registrované buffery u OS nemohou kolidovat
OS a DMA přemapování
HW podpora DMA přemapování Umožňuje minimalizaci účasti VMM při přímém mapování I/O zařízení Zařízení je umožněn přístup pouze do domény virtuálního stroje Při podpoře přímo mapovaného zařízení musí VMM zajistit Izolaci DMA požadavků mapováním zařízení na konkrétní doménu VM Změnu DMA přemapování v případě realokace domény VM v paměti Využití DMA přemapování virtuálním počítačem HW podpora DMA přemapování může být přínosná i pro OS v rámci virtuálního PC VMM může poskytovat virtuální (emulovaný) HW pro DMA přemapování Hostovaný OS může řízeně pomocí VMM měnit DMA mapování v rámci své domény (VMM udržuje kopii DMA přemapování hostovaného OS). VMM podle lokální kopie DMA přemapování VM prování nastavení fyzického hardware
VMM a DMA přemapování
Virtualizace a překlad adres pro DMA přenos Rozlišujeme tři druhy adres DMA Virtual Address (DVA) Adresa obsažená v DMA požadavku. Vztahuje se k pseudofyzickému adresnímu prostoru VM Guest Physical Address (gpa) Pseudofyzická paměť virtuálního stroje. V závislosti na implementaci DMA ve virtuálním OS může splývat s DVA Host Physical Address (hpa) Adresa skutečné fyzické paměti na kterou má být DVA transformována Při DMA požadavku iniciátor zasílá adresu paměti na kterou chce přistupovat (např. adresu u OS registrovaného bufferu) Pokud je iniciátor svázán s OS ve virtuálním stoji, pak uvedená DVA míří do gpa prostoru VM (I/O zařízení je přímo mapováno do VM a jeho ovladač registruje buffery u OS ve virtuálním počítači, tedy v prostoru gpa) gpa prostor je překládán na hpa v závislosti na jeho uložení v paměti (může se během běhu VM měnit) a tedy DVA adresu je potřeba obdobně přemapovat do hpa prostoru
Virtualizace a překlad adres pro DMA přenos HW jednotka pro přemapování Může být zastoupena jednou či vícekrát. Obvykle v závislosti na složitosti I/O hierarchie (separátní pro PCI Expres root port) Realizuje překlad GPA na HPA před dalším zpracováním (prohledávání cache, předání řadiči paměti) a následná kontrola oprávnění
HW podpora přemapování přerušení Přináší možnost přemapování a přesměrování požadavku na přerušení od I/O zařízení a jejich izolaci mezi různými oblastmi (VM, hostující OS a jeho podčásti) VMM obvykle využívá přemapování přerušení k jejich izolaci mezi VM Přerušení při DMA přenosech mohou být izolovány a doručovány na VM, kterých se týkají resp. které mají příslušení I/O přímo mapované Migrace přerušení HW podpora pro přemapování přerušení může být použita pro dynamické přesměrování přerušení při migraci jeho cíle z jednoho logického procesoru na druhý Přesměrování přerušení může být řešeno efektivně bez nutnosti přeprogramování jeho zdroje Může být využita OS při vyvažování zátěže jednotlivých CPU (procesy jsou přes CPU distribuovány dynamicky) nebo VMM při přesunu virtuálního CPU z jednoho fyzického na druhý
HW podpora přemapování přerušení Přemapování přerušení představuje způsob softwarové kontroly externích přerušení všech zdrojů včetně řadiče přerušení Při rozhodování přesměrování přerušení je nutné identifikovat jeho zdroj Přerušení generované HW přemapování přerušení jsou obsluhovány jiným způsobem. Rozpoznání zdroje je založeno na tzv. source-id přerušení, které je běžně komponováno na základě ID přiřazeného při registraci ovladače a ID funkcionality HW Tabulka přemapování přerušení Běžně jednoúrovňová tabulka (Interrupt Remapping Table) uchovávaná v paměti s fixní velikosti záznamů Její pozice v paměti bývá stanovena pomocí speciálního registru, který určuje počáteční adresu a velikost tabulky
Tabulka přemapování přerušení Obsah tabulky je indexován pomocí interrupt_index hodnoty, která je odvozena od adresy handleru přerušení, případně od adresy handleru a podhandleru přerušení. Maximální počet záznamů 64k pro každé přerušení odlišná Skutečný maximální počet odvozen indexovacím mechanizmem Aktuální velikost tabulky je uchovávána v speciálním registru spolu s její pozicí v paměti Podmínky pro přemapování přerušení Přemapování musí být pro daný zdroj povoleno (závisí na typu zdroje, některá zařízení přemapování neumožňují) Po vypočtení indexu přerušení je provedená kontrola zdroje a srovnání s velikostí tabulky přemapování (pokud index ukazuje mimo tabulku, přerušení je blokováno)
Urychlování použitím cache pamětí Context cache IOTLB Cache Ukládá překlady DMA adres a to včetně oprávnění k přístupu do paměti Interrupt Entry Caching Uchovává často listované vazby zařízení - doména Obsahuje často přemapovávaná přerušení Využívání cache pamětí při softwarové správě vyžaduje explicitní invalidaci obsahu v případě jeho modifikace pomocí SW Zneplatnění lze provést pomocí nastavení zneplatnění v odpovídajícím registru nastavení dané cache (HW implementováno) zneplatněna může být celá cache nebo jen vybrané součásti spojené s danou doménou či zařízením
BIOS BIOS nutný pro přístup k zařízení Zodpovídá za detekci schopnosti zařízení být přímo mapováno a správu paměťově mapovaných registrů Řeší konfiguraci zařízení s podporou sdílení mezi VM (virtualizace na úrovni zařízení) Popisuje a zpřístupňuje zařízení pomocí obslužných volání VM musí mít totožnou kopii čísti BIOS paměti, která se vztahuje k používání I/O zařízení Otázka konfigurace zařízení
Závěr Seznámení s třídami virtualizace VM s vlastním OS Stručné představení HW podpory virtualizace procesoru paměti I/O zařízení
Literatura John L. Hennessy, David A. Patterson, Computer Architecture: A Quantitative Approach (4th Edition) Andrew S. Tanenbaum, Operating Systems: Design and Implementation Intel Virtualization Technology for Directed I/O AMD-V Nested Paging J. Fisher-Ogden: Hardware Support for Efficient Virtualization