Spoločnosť Varnish Software, vyvíjajúca systémy na budovanie sietí na dodávanie a ukládanie obsahu, predstavila otvorený projekt TinyKVM, ktorý rozširuje nástroje na izoláciu vykonávania jednotlivých procesov pomocou hypervízora KVM. Cieľom projektu je vytvoriť najrýchlejší systém sandbox-izolácie jednotlivých procesov, ktorý využíva hardvérovú virtualizáciu. Kód projektu je napísaný v jazykoch C a C++ a je distribuovaný pod licenciou GPLv3 (pre tých, ktorí nie sú pripravení splniť požiadavky GPLv3, je k dispozícii komerčná licencia).
TinyKVM je určený na izolované spustenie akýchkoľvek konzolových programov pre Linux s výkonom blízkym bežnému vykonávaniu. Náklady na každý systémový volanie sú približne 2 mikrosekundy. Ako príklad aplikácie projektu sa uvádza ďalšia izolácia procesov v systémových cache a spracovaní webových požiadaviek. TinyKVM bol vyvinutý na nahradenie emulátora libriscv, ktorý sa používa na izoláciu spracovania každej webovej požiadavky na platforme Varnish. Navyše bola vytvorená verzia knižnice libvmod, ktorá umožňuje vykonávanie modulov na Varnish s využitím TinyKVM.


Pri spustení pomocou TinyKVM sa strojový kód programov vykonáva bez emulačných vrstiev na CPU a je obmedzený pomocou API hypervízora KVM, čo umožňuje vylúčiť náklady a dosiahnuť výkon blízky vykonávaniu bez virtualizácie. Hlavné funkcie TinyKVM:
- Obmedzenie maximálneho času vykonávania. Program môže byť nútene zastavený po uplynutí časového limitu, bez volania spracovateľov signálov a vlákien.
- Obmedzenie spotreby pamäte.
- Možnosť odvetvenia (fork) neinitializovaných inštancií virtuálních strojů z jednej inicializovanej inštancie izolovaného programu. Kópie virtuálnych strojov sa vytvárajú v režime copy-on-write, čo umožňuje výrazne šetriť pamäť, pričom sa uchováva iba jedna kópia zdieľaných údajov.
- Odbité procesy môžu byť resetované do predchádzajúceho stavu (napríklad, odbitý spracovávateľ http požiadaviek sa môže bez reštartu vrátiť do pôvodného stavu po spracovaní každej požiadavky). Inštancia izolovaného procesu môže byť taktiež resetovaná na stav inej virtuálnej mašiny, nie tej, z ktorej bola odbitá, ale náklady v tomto prípade budú vyššie, pretože bude potrebné zmeniť tabuľku strán pamäte.
- Možnosť vytvárania statických strán pamäte počas inicializácie, vhodných aj pre sofistikované runtime, napríklad ako v jazyku Go. V tomto prípade sú povolené zmeny iba pre stránky, ktoré sú v režime copy-on-write.
- Podpora vzdialeného ladenia pomocou GDB. Je možné ladění za behu s obnovením vykonávania.
Hostiteľské prostredie TinyKVM formuje zúžené jadro, chránené pred zmenami, zostavené so zapnutou ochranou strán pamäte a využívajúce SMAP (Prevencia prístupu v režime správcu) a SMEP (Prevencia vykonávania v režime správcu) pre dodatočnú izoláciu medzi jadrom a užívateľským priestorom. TinyKVM používa veľké stránky pamäte (hugepage) na zvýšenie výkonu. Systémové volania vyvolané programami sú zachytávané emulátorom a presmerovávané do hostiteľského prostredia (oneskorenie na spracovanie a preklad emulovaného volania činí približne 2 mikrosekundy). V samotnej virtuálnom stroji sa nepoužívajú žiadne ovládače, vstup/výstup a virtuálne zariadenia.

Zdroj: opennet.ru
