Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Memória és perifériák virtualizációja
Virtualizációs technológiák és alkalmazásaik Memória és perifériák virtualizációja Micskei Zoltán, Tóth Dániel Utolsó módosítás:
2
Mi történt az elmúlt egy hétben?
Forrás:
3
Tartalom Előző rész tartalmából: Memória virtualizáció
CPU virtualizáció A három alap virtualizációs megközelítés Memória virtualizáció Virtuális memória az operációs rendszerekben Virtuális memória a platform virtualizációban Virtuális memóriakezelés speciális képességei: megosztás, késleltetett allokáció, memória-ballon Perifériák virtualizációja Perifériák programozói felülete általában Periféria virtualizációs architektúrák
4
Emlékeztető: A három virtualizációs lehetőség
Virtualizáció – az utasításokat (egy részüket) változatlanul hagyja végrehajtani, csak a problémás privilegizáltakkal kell valamit kezdeni Szoftveres virtualizáció (Trap & emulate + bináris fordítás) Paravirtualizáció (módosítjuk a vendég OS forrását) Hardveres virtualizáció (Trap & emulate, teljesen hardveres támogatással)
5
Tartalom Előző rész tartalmából: Memória virtualizáció
CPU virtualizáció A három alap virtualizációs megközelítés Memória virtualizáció Virtuális memória az operációs rendszerekben Virtuális memória a platform virtualizációban Virtuális memóriakezelés speciális képességei: megosztás, késleltetett allokáció, memória-ballon Perifériák virtualizációja Perifériák programozói felülete általában Periféria virtualizációs architektúrák
6
Virtuális memóriakezelés
Modern CPU-k tartalmaznak memóriakezelő egységet (MMU – memory management unit) Feladata „virtuális” memóriacímeket leképezni „fizikaira” Mi is az a virtuális memóriacím? Hol használható? CPU felhasználói (pl. ring 1-3) módjaiban virtuális címekkel dolgozik (nem feltétlenül, de a modern OS-eknél ez igaz) A folyamatok nem a fizikai memóriacímeket látják Cél: áthelyezhető legyen az oprendszer felett futó alkalmazások kódja, ne csak fix bedrótozott helyen tudjon futni (akár szoftveresen is megoldható lenne…) Cél2: eközben a teljesítmény ne romoljon számottevően (ehhez már hardver támogatás is kell) MMU != fizikai memóriaillesztő áramkör. Az utóbbinak a feladata a memória modulok elektromos alacsonyszintű vezérlése, ez sokáig a CPU-n kívül a chipset „északi hídban” foglalt helyet, csak a közelmúltban (Athlon64, Core i7) került be a processzorba. A memóriaillesztő áramkör is végez címfordítást, de ez már teljesen láthatatlan a CPU és a perifériák számára. A fizikai memóriacím alatt a továbbiakban azt értjük amit a CPU és/vagy perifériák kiadnak a buszokon. x86-ra jellemző, hogy kétféle virtuális memóriacím kezelési mechanizmus van: szegmens alapú és lapozott. A szegmens alapú 32 bites üzemmódban _mindig_ be van kapcsolva, de egy szegmens tartalmazhatja a teljes memóriát. 64 bites üzemmódban viszont szegmens alapú memóriaszervezés nincs. A lapozott üzemmód az aktuális ringtől függetlenül lehet ki vagy bekapcsolt állapotban, de átkapcsolni csak ring 0-ban lehet. Manapság tipikusan csak a kernel használ fizikai memóriacímeket (nem feltétlenül az összes funkciójához), az alkalmazások mindig lapozott memóriát használnak. Részletek: Intel® 64 and IA-32 Architectures Software Developer’s Manual
7
Virtuális memóriakezelés
Fizikai memória Cím: 0 Cím: N-1 Cím: 0 Cím: M-1 A folyamat egy 0-tól induló összefüggő virtuális címtartományt lát. Tehát minden pointer a virtuális címtartományban értelmezett. Folyamat memóriája
8
Virtuális memóriakezelés
Fizikai memória Cím: 0 Cím: N-1 Cím: 0 Cím: M-1 Cím: 0 Cím: K-1 Folyamat 1 memóriája Folyamat 2 memóriája Ez minden folyamatra igaz
9
Virtuális memória megvalósítása lapokkal
Memória lapok (pages) Virtuális → fizikai memória cím hozzárendelés Tipikusan (x86) 4 kB méretű allokációs egységekben A cím utolsó 12 bitje a lapon belüli cím A cím első 20 bitje kétszintű (10-10 bit) laptábla cím Létezik óriás lap üzemmód is, ilyenkor csak egyszintű laptábla van, ezen belül 22 bit (4MB) pozíciócím Megjegyzés: A felsorolt konkrét számadatok x86 architektúrán érvényesek, más architektúrán előfordul más beosztás is. (Például x64 esetén hosszabb címek vannak, jelenleg 48 címbitet használnak és 4 Kbyte-os lapok esetén 4 szintű leképezés van.) Az x86-on is léteznek még speciális üzemmódok (PAE – paging area extension, NX – no execute), amik 1-1 felső helyiértékű bitet saját célra használnak. Lap könyvtár (page directory) – első 10 bit Lap tábla (page table) – második 10 bit Pozíció a lapon belül – 12 bit Fizikai memória címtartomány
10
Virtuális memória megvalósítása lapokkal
További jellegzetességek: A laptáblák is a fizikai memóriában foglalnak helyet Csak az operációs rendszer kernel módosíthatja őket Minden folyamathoz másik táblakészlet tartozik, a kernel kontextus váltáskor cseréli ki mindig a megfelelőre Az MMU a CPU laptábla regisztere alapján tudja, hogy hol kell keresni legfelső szintű lap könyvtárat Automatikusan feloldja a virtuális címeket fizikaira, a virtuális címeket használó kód módosítás nélkül fut A virtuális címtartományból kicímzés vagy read-only bittel jelölt lapra írás hibát (fault) vált ki a CPU-ban A page fault mechanizmus teszi lehetővé, hogy az éppen nem használt lapokat lemezre lehessen menteni majd vissza behúzni a memóriába akkor, amikor éppen hozzáférés történik. A hozzáférés a nem létező lapra fault-ot vált ki, ezt elfogja és ekkor teszi vissza a kernel a lapot a swap területről.
11
Tartalom Előző rész tartalmából: Memória virtualizáció
CPU virtualizáció A három alap virtualizációs megközelítés Memória virtualizáció Virtuális memória az operációs rendszerekben Virtuális memória a platform virtualizációban Virtuális memóriakezelés speciális képességei: megosztás, késleltetett allokáció, memória-ballon Perifériák virtualizációja Perifériák programozói felülete általában Periféria virtualizációs architektúrák
12
Memória virtualizálása
A Ring 0-tól eltérő szinteken futó folyamatok virtuális memóriát látnak A virtuális -> fizikai cím feloldása hardverben történik laptáblák alapján. Gyors, TLB cache-eli fizikai-virtuális cím hozzárendelést. Használhatjuk-e ezt a vendég gépek memóriájához? Több szint kell: a VM-ben is kell saját laptábla a saját alkalmazásokhoz De a CPU ilyet nem támogat VM1 VM2 Vendég: virtuális memória Innentől a fizikai memória fogalmánál meg kell különböztetni a hoszt gép szempontjából fizikai memóriacímeket és guest operációs rendszer által „fizikai” memóriának látott címeket, amik valójában a hoszt gép szempontjából már virtuálisak. Tehát az idézőjelnek itt most jelentésmegkülönböztető szerepe van. :) Érdekesség, hogy x86-on a szegmens szervezés teszi lehetővé, hogy a guest-tel azonos memóriatartományban, de mégis a guest beavatkozásától védett módon legyenek elhelyezhetőek a VMM kezelésében lévő memóriaterületek. Például a JIT fordított kódterületek ilyen elhelyezésével lehet gyors (trap és kontextusváltás nélküli) áthívás a kétféle memóriaterület között. Viszont 64 bites üzemmódban a szegmens alapú védelem nem működik, ez a legfőbb oka annak, hogy x86-64 bites üzemmódot bináris fordítással a legtöbb virtualizációs szoftverben nem építettek ki. Az AMD egyes processzoraiban éppen emiatt viszont korlátozottan mégis van szegmens alapú védelem 64 bites üzemmódban is, de ez nem túl széles körben támogatott. Vendég: „fizikai” memória Gazda: fizikai memória
13
Memória virtualizálása
A virtuális gépben futó folyamat virtuális memóriája Folyamat Árnyék laptábla Vendég laptábla A virtuális gép „fizikai” memóriája VM allokációs laptábla Kell két példány a laptáblából: az egyik a vendég kernel számára látható és a vendég VM „fizikai” címeit képezi le a VM-en belül futó folyamatok „virtuális” címeire (vendég laptábla), a másik a VMM (és a CPU) számára látható ún. árnyék laptábla (Shadow page table), ez a futtató gép „igazi fizikai” címeit képezi le a VM-en belül futó folyamatok virtuális címére. Az árnyék laptábla szerepe, hogy az eredetileg kétszintű indirekcióból egyszintű indirekciót csináljon. Fizikai memória a hardverben
14
Memória virtualizálása
Vendég OS azt „hiszi”, hogy ezt használja. A kernele ezt próbálja módosítani VM allokációs laptábla: Virtuális gép „fizikai” memóriacímei -> Fizikai gép fizikai memóriacímei Árnyék laptábla Virtuális gép virtuális címei -> Fizikai gép fizikai címei Vendég laptábla Virtuális gép virtuális címei -> Virtuális gép „fizikai” címei A fizikai processzor valójában ezt használja. A vendég ennek létezéséről nem tud. Ha módosítja a vendég a saját laptábláját, ezt is frissíteni kell.
15
Memória virtualizálása
Mi van, ha vendég kernel módosítani akarja a laptábláját? Megfelelően frissíteni kell az árnyék táblát is 1. Természetesen Trap and emulate, de hogyan? Read-only-ra állítjuk a vendég kernel számára látható laptáblákat, ha azt módosítani akarja, akkor jön a kivétel, átkerül a vezérlés a VMM-hez ami biztonságosan elvégzi a módosítást az árnyék táblán is 2. „természetesen?! trap and emulate?” A vendég kernel egyszerűen ne maga akarja módosítani a laptáblát, kérje meg a VMM-et erre 3. Hardveres kiegészítés több szintű laptáblák kezelésére Core i7 és Phenom processzoroktól kezdve van (EPT / RVI) Az egész árnyék tábla frissítési problémát hardveresen lekezeli A 2. megoldást természetesen paravirtualizációs megközelítésnek nevezik. A hardveres laptábla kezelés elég sok előnnyel jár, ezzel már a hardveres virtualizáció egyértelműen gyorsabb lehet a bináris fordításnál. Elkerülhetőek vele a kontextusváltásnál a TLB ürítések, a VMM-ben tett körök a memória allokáció változtatásánál stb. Intel megvalósításának részletes leírása: Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3B: System Programming Guide, chapter 25.2
16
Memória virtualizálása
Tanulságok: A memóriakezelésben is a háromféle fő megvalósítás megtalálható. A memóriakezeléshez extra laptáblák kellenek, tehát a VM több fizikai memóriát igényel, mint amennyi számára látható lesz A memória foglalása és felszabadítása extra feladatot jelenthet a VMM számára is (kivéve hardveresen virtualizált MMU-nál)
17
Tartalom Előző rész tartalmából: Memória virtualizáció
CPU virtualizáció A három alap virtualizációs megközelítés Memória virtualizáció Virtuális memória az operációs rendszerekben Virtuális memória a platform virtualizációban Virtuális memóriakezelés speciális képességei: megosztás, késleltetett allokáció, memória-ballon Perifériák virtualizációja Perifériák programozói felülete általában Periféria virtualizációs architektúrák
18
Extra memória virtualizálási lehetőségek
Memórialap deduplikáció azonos tartalmú memórialapok megosztása több vendég VM között hasonlóképpen azonos lapok megosztása egy vendégen belül is gyakorlati haszna főleg speciális alkalmazásokban (Virtual Desktop Infrastructure), tipikusan több példány fut azonos OS-ből Megvalósítása gyors hash számítás, ez alapján egyezés keresés közösített lapok megbontása beleíráskor, copy-on-write elv Hasonló: memória tömörítés Egészen új lehetőség VMM-ekben (az ötlet persze régi) CPU költsége nagyon nagy lenne, ezért: az inaktív, amúgy háttértárra kilapozásra ítélt lapokat szokás tömöríteni -> a ki/be tömörítés még így is gyorsabb a merevlemeznél Nem csodaszer… kompromisszumot kell kötni a tömörítetlen és tömörített lapoknak fenntartott memória mérete között, csak korlátozott méretben előnyös
19
Extra memória virtualizálási lehetőségek
Dinamikus allokáció: Ami memóriát nem használ a vendég, azt ne is kapja meg Gyakorlati haszna önmagában elenyésző, a legtöbb OS az összes szabad memóriát disk cache-nek használja Háttértárra swappelhetők a lapok a vendég OS tudta nélkül Memória felfújás (memory ballooning) Ha kifogy a host memóriája, akkor „elvesz” a vendégtől Egy ágens vagy driver a vendég kernelben (paravirtualizációs szemléletmód) elkezd memóriát foglalni a VMM utasítására. A VMM az ágens által „foglalt” memórialapok mögé nem is allokál fizikai memóriát, így nyer vissza helyet Egyrészt a vendég fel fog adni a disk cache-ből, Másrészt el fog kezdeni kilapozni a saját swap területre, elkerüli, hogy a host is swappeljen Miért olyan rossz az, ha a hoszt swappel? Mert a vendég nem tudja, hogy a memóriatartományának egy része diszken van, tehát lassú, ezt a területet lemez cache-nek vagy alkalmazásoknak fogja használni, amivel még többet árt. Esetleg ha a fizikai és a vendég gép is swappel egyszerre, akkor lehet, hogy a vendég a saját swap területéről a (memóriának képzelt) fizikai gép swap területére fog mozgatni adatot és viszont -> mega trashelés. Ha csak a vendég gép swappel, akkor ez a helyzet nem fordulhat elő.
20
Extra memória virtualizálási lehetőségek
Tanulságok: Sokféle extra lehetőség, nem triviális megállapítani az aktuális használatot Figyelni kell a memóriafoglalást, nagyot esik a teljesítmény, ha lemezre kell lapozni Ha van rá lehetőség, ki kell használni a vendégbe telepíthető ballooning drivert, elkerülhető vele a vergődés
21
Kitekintés: VMware ESXi memóriakezelés
Figyelem: az ábra csak szemléltető jellegű, az egyes régiók nem ilyen egyenletesen vannak elosztva a valóságban! Részletes leírás az egyes metrikák jelentéséről: Micskei Zoltán. Memory metrics in VMware ESX 4.1, , URL: Egy másik áttekintő diagram a VMware vSphere 5 memóriakezeléséről: - VMware. VMware vSphere 5 Memory Management and Monitoring diagram,
22
Kitekintés: VMware ESXi memóriakezelés
A képernyőképen az látható, hogy az indítás után a vendég gép memóriáját fokozatosan pásztázza végig a VMM, megosztható memórialapokat keresve, így fokozatosan emelkedik a shared memória mennyisége. Jelmagyarázat: granted (lila) active (kék) overhead (sárga) zero (piros) consumed (zöld) shared (szürkés-kék)
23
Tartalom Előző rész tartalmából: Memória virtualizáció
CPU virtualizáció A három alap virtualizációs megközelítés Memória virtualizáció Virtuális memória az operációs rendszerekben Virtuális memória a platform virtualizációban Virtuális memóriakezelés speciális képességei: megosztás, késleltetett allokáció, memória-ballon Perifériák virtualizációja Perifériák programozói felülete általában Periféria virtualizációs architektúrák
24
Perifériákról általában
A perifériák kezelése jellegzetesen CPU felprogramozza a perifériát, regiszterek átírása Periféria eseményt jelez a CPU felé, megszakítás Ilyenkor valamilyen módon le kell kezelni az eseményt, valamit reagálni kell rá (driver felelőssége) Periféria maga elvégzi a feladatát, közvetlen memória hozzáférés Kiolvas elküldendő adatot, vagy berak beérkező adatot a memóriába Külön lefoglalt fizikai memóriaterület kell erre a célra
25
Perifériákról általában
Az adapter modell Az üzenet egy saját (gyakran szabványos) protokollon keresztül jut el a perifériához HDD ==== Ezt szeretném programozni Cél periféria Az adaptert kell megkérni, hogy adja át a perifériának az üzenetet Adapter
26
Perifériákról általában
Az adapter modell Perifériának szánt konkrét utasítás, adat Periféria protokollja Rétegzett programozási modell (pl. USB, SCSI, SATA): HDD ==== Adapter programozás Cél periféria Adapter
27
Tartalom Előző rész tartalmából: Memória virtualizáció
CPU virtualizáció A három alap virtualizációs megközelítés Memória virtualizáció Virtuális memória az operációs rendszerekben Virtuális memória a platform virtualizációban Virtuális memóriakezelés speciális képességei: megosztás, késleltetett allokáció, memória-ballon Perifériák virtualizációja Perifériák programozói felülete általában Periféria virtualizációs architektúrák
28
Teljes periféria emuláció
Virtuális gép Meghajtó Meghajtó Meghajtó Virtualizációs réteg Backend Backend Backend Ütemező Statikus Hozzárendelés Távoli hozzáférés szerver Meghajtó Meghajtó Meghajtó (Vigyázat: az ábra „csal”, természetesen azért érdekes a helyzet, mert több virtuális gépünk van, és azok mind ugyanahhoz a hardverhez szeretnének kapcsolódni.) Teljes periféria emulációnál a virtualizációs környezetben vannak a fizikai eszköz meghajtó programjai (driver), minden perifériát ilyenek kezelnek. A virtuális gép számára egy szoftveres „backend” emulálja a hardvert. Három jellegzetes eset lehetséges: Valamilyen többszörös hozzáférést biztosító erőforrás-megosztó vagy ütemező komponens osztja szét a backendek felé a fizikai hardver erőforrást (háttértár, hálózat, stb.) Statikusan valamelyik virtuális géphez hozzárendelünk egy-egy hardvert (Soros port, USB eszközök, esetleg háttértár, CD meghajtó) Távoli elérés szerver komponens hálózaton keresztül tesz elérhetővé valamilyen elemet a virtuális hardverből (Grafikus konzol, CD meghajtó) HDD ==== Hardver
29
Lehetőségek perifériák virtualizációjára I.
Emuláció Trap and emulate -> az I/O műveleteket kell elfogni Adódik: ring 1-3-ban az I/O műveleteket elfogja a CPU Memóriatartományba illesztett periféria: read-only memórialappal fogható el Valamilyen létező hardver működését emuláljuk Szoftveres komponens segítségével: backend Hardver pontos emulálása (regiszterek, megszakítás, DMA) Vendégben használható a klasszikus meghajtó program Minden I/O művelet egy kör a VMM-ben -> lassú Tipikusan valami nagyon elterjedt hardvert emulálnak, amihez biztos van minden vendég OS-ben beépített driver (pl. Intel e1000 hálózati kártya, S3 Trio videókártya…).
30
Lehetőségek perifériák virtualizációjára II.
Paravirtualizáció Egyszerűsítsük az emulált hardvert, tervezzünk „nem létező fajta” hardvert, amit a legkevesebb művelettel lehet vezérelni Egy összetett művelet akár csak egy VMM hívás Saját „hardverek”, amik magas szintű műveleteket végeznek Pl. hoszt fájlrendszerhez hozzáférés Itt kezd keveredni a virtualizáció és az OS… Speciális meghajtót kell telepíteni a VM-ben!
31
Paravirtualizált I/O eszközök
Balra egy VMware ESXi-n futó virtuális Windows eszközkezelője látszik, jobbra egy Hyper-V szerveren futó. (VMware Tools, Hyper-V Integration Components kell)
32
Lehetőségek perifériák virtualizációjára III.
Hardveres virtualizáció I/O eszköz közvetlenül elérhető a vendégből Általános esetben veszélyes… DMA-val a fizikai memória egésze elérhető Léteznek IOMMU megoldások is (pl.: Intel VT-d) Hasznos pl.: 3D grafikus kártya DE: elvesztjük a virtualizáció rugalmasságát! Hardver támogatás az I/O eszközben, hogy többen használják (pl. SR-IOV) Belső állapot konzisztens megtartással kéréseket fogadnak Hasznos pl.: 10 Gb/s Ethernet hálózati kártya I/O eszköz közvetlen hozzárendelése: VMware DirectPath I/O néven emlegeti Gond vele: nem tudjuk az I/O eszköz állapotát elmenteni, így a VM állapotmentése nem (vagy csak nagyon körülményesen) lehetséges. Továbbá a különböző live migration jellegű funkciók se működnek, hiszen a HW-t nem tudja „magával vinni” a VM.
33
Példa: Intel SR-IOV megvalósítás
Physical Funtion, Virtual Function (PF és VF) Belső regiszterek, sorok, leírók többszörözése (tipikusan 16-64) VMM támogatás is kell! SR-IOV: Single Root I/O Virtualization, PCI-SIG csoport szabványa, hardver oldal specifikálása További információ: Intel. PCI-SIG SR-IOV Primer: An Introduction to SR-IOV Technology URL: Szoftveres támogatás: Hyper-V: John Howard. Everything you wanted to know about SR-IOV in Hyper-V Part 3, URL: (az első és második rész jó áttekintő az I/O virtualizációról meg az SR-IOV hardveres részéről, a következő részek meg az MS megvalósításról) ESXi 5.1: VMware. vSphere Networking Guide URL: (Chapter 4 Managing Network Resources) Forrás: Intel
34
Hardveres periféria virtualizáció
Virtuális gép Réteges architektúrájú busz elérési protokollok esetén (SCSI, USB) lehetséges: a busz adapter emulált rendszeren keresztül érhető el, de a magasabb rétegekben már a virtuális gép közvetlenül a hardverrel beszél Lehet olyan hardver, ami közvetlenül I/O műveletekkel vezérelhető virtuális gépből. Manapság ez még nem elterjedt, hardveres feltételei hiányosak. (DMA veszély) Meghajtó Meghajtó Meghajtó Lehet olyan hardver, ami közvetlenül I/O műveletekkel vezérelhető egyszerre több virtuális gépből is. (SR-IOV) Virtualizációs réteg Backend Meghajtó Hardver HDD ====
35
Perifériák virtualizációja
Tanulságok: I/O intenzív alkalmazásoknál számolni lehet jelentős teljesítményvesztéssel Ha van rá lehetőség, telepítsük fel a paravirtualizált eszközmeghajtókat a vendég operációs rendszerbe Lehet olyan feladat, amit közvetlenül a virtuális géphez rendelt hardverrel célszerű megoldani (backup szerver, 3D gyorsítás…) Fontos tanulság megint: amikor a paravirtualizációnál magas szintű erőforrásokat adunk át a guest OS-nek, akkor látható, hogy itt is - mint mindenhol máshol is – folytonos átmenet kezd kialakulni az operációs rendszerek és virtualizációs környezetek között. Tehát a szigorú taxonomizálás valójában megint csak egy „modell”, ami a megértést segíti, de a valóságot kicsit absztrahálja.
36
További információ Carl Waldspurger and Mendel Rosenblum. I/O virtualization. Commun. ACM 55, 1 (January 2012), DOI= / Abramson, D. et al. "Intel® Virtualization Technology for Directed I/O." Intel Technology Journal. (August 2006). Darvas Dániel, Horányi Gergő. „Intel és AMD technológiák a hardveres virtualizáció megvalósítására”, virttech házi feladat, 2010. Garaczi Tamás. Intel VT-d (IOMMU) technológia részleteinek megismerése, virttech HF, 2010.
37
Összefoglaló A virtualizáció alapjai I-II CPU virtualizáció
CPU utasításkészlet architektúra és szerepe A három alap virtualizációs megközelítés Memória virtualizáció Virtuális memória az operációs rendszerekben Virtuális memória a platform virtualizációban Virtuális memóriakezelés speciális képességei: megosztás, késleltetett allokáció, memória-ballon Perifériák virtualizációja Perifériák programozói felülete általában Periféria virtualizációs architektúrák
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.