Možnosti virtualizace

08. 12. 2013

Dnes se virtualizuje kde co. Při administraci služeb to ulehčuje práci a snižuje náklady. Ale proč vždycky brát největší kladivo, co je k dispozici?

Virtualizace není vůbec nová věc. Provází svět počítačů celkem od počátků a nejrozšířenější způsob je pravděpodobně systém virtuálního adresního prostoru paměti, kdy procesor předstírá, že každý program má svoji paměť velikou 4GB (na 32bitovém systému). Ale podívejme se konkrétně na virtualizaci ve smyslu celých počítačů, nebo alespoň něčeho tomu podobnému.

Většina lidí alespoň tuší, že existuje něco, jako virtuální počítače. Ukousne se kus paměti a disku a nějaký program (např. VirtualBox či LibVirt s KVM) předstírá, že je to celý počítač, do kterého se nainstaluje celý operační systém a ten, aniž by tušil, že si jeho počítač jen někdo představuje, vesele běží. Je to pohodlné, ale je to docela veliké kladivo. A také to má jisté výkonnostní problémy.

Další možnost je tzv. paravirtualizace. Funguje to v mnohém podobně, jen ten operační systém uvnitř ví, že je ve virtuálním stroji. Jádro tohoto systému je upravené a požadavky na komunikaci s HW deleguje na opravdové jádro ve fyzickém stroji o patro výš. Odpadá tím část práce při předstírání chování té či oné periferie. Ten fyzický stroj, resp. program na něm běžící, už nepotřebuje předstírat, že je ta a ta zvuková karta a posílat systému uvnitř byty po neexistující sběrnici. Takto vypadá např Xen. Nevýhodou je, že systém uvnitř musí být upraven (stačí jeho jádro, programy v něm už být upravené nemusí).

To byly ty známější přístupy. Ale existují i další. V ještě menší míře virtualizují Linux Containers (používány např. nástroji LXC). Při nich se sdílí celý kernel, ale lze jej požádat o vytvoření odděleného kontejneru, který může mít vlastní nastavení sítě, vlastní omezení na paměť, vlastní sadu uživatelů a podobně. A nebo je může sdílet, jak si uživatel řekne. V podstatě tím jde spustit jak celý linuxový operační systém ve skoro virtuálním stroji a nebo také jen program či dva, které mají virtualizovaného jen něco. A také, nároky na výkon jsou v podstatě stejné, jako bez libovolné virtualizace. Programy potom na sebe navzájem nemůžou, ale vnější systém vidí transparentně dovnitř. Také, u předchozích virtualizačních metod bylo potřeba alokovat celou paměť pro virtuální stroj a i když ji programy uvnitř nevyužily, tak byla obsazená (např. cachema uvnitř virtuálního stroje, které duplikovaly ty venku). Tady lze paměť sice omezit, ale pokud není využitá celá, tak je považována za volnou.

Asi nejslabší metodou je tzv. chroot. Ten jen umožní pustit program s tím, že se mu navykládá, že existují jen soubory v daném adresáři a podadresářích. Opět, teoreticky uvnitř může žít celý operační systém ‒ tedy bez jádra. Ale nezbývá, než přímo sdílet síť, uživatele a podobně.

Zřejmě se na různé účely hodí různé výše zmíněné metody. Proč tedy skoro všichni prostě vždy sáhnou po té první?

Re: Možnosti virtualizace Libča (13. 1. 2014 - 15:04) Sbalit(2)
V práci chci být na linuxu, ale k práci potřebuju nutně používat (zaměstnavatelem dodané) widle. Tak mám widle spuštěné neustále ve virtualboxu - hlavní důvod je vlastně ten, že chci mít na jednom počítači puštěné 2 OS najednou. Co navrhuješ ?
Re: Možnosti virtualizace Michal 'vorner' Vaner (16. 1. 2014 - 8:33) Sbalit(1)
U úplně jiného OS není moc na výběr, tam sdílet kernel moc nepůjde. Takže tak ten Virtualbox. Možná se podívej, jestli neexistují drivery pro VirtIO pro windows. To je trik co umí použít KVM pro urychlení přístupu k disku a síti. Ale hádám, že mouse integration a tak ve VirtualBoxu ti bude milejší.