Varnish Software, mis arendab sisu edastamise ja vahemälu süsteeme, esitles avatud projekti TinyKVM, mis arendab tööriistu üksikute protsesside täitmise isolatsiooniks KVM hüperviisoriga. Projekti eesmärgiks on luua kiireim süsteem, mis isoleerib üksikuid protsesse, kasutades riistvaralist virtualiseerimist. Projekti kood on kirjutatud C ja C++ keeltes ning levitatakse GPLv3 litsentsi alusel (need, kes ei saa järgida GPLv3 nõudeid, saavad kaubandusliku litsentsi).
TinyKVM on loodud isoleeritud jooksutamiseks kõigi Linuxi konsooliprogrammide jaoks, pakkudes jõudlust, mis on umbes tavalise täitmisega samaväärne. Iga süsteemikõne overhead on umbes 2 mikrosekundit. Projekti rakendamise näidetena tuuakse välja protsesside täiendav isoleerimine vahemälu ja veebipäringute töötlemise süsteemides. TinyKVM on välja töötatud libriscv emulaatori asendamiseks, mida kasutatakse iga veebipäringu töötlemise isoleerimiseks Varnishi platvormil. Samuti on välja töötatud libvmodi teegi variant, mis võimaldab TinyKVM-i kasutades Varnishile mooduleid käitada.


TinyKVM käivitamisel täidetakse programmide masinkood ilma emuleerivate kihtideta CPU-l ning piiratakse KVM hyperviseori API kaudu, mis elimineerib overheadi ja saavutab jõudluse, mis on lähedane virtualiseerimata täitmisele. TinyKVM peamised võimalused:
- Maksimaalse täitmise aja piiramine. Programm saab pärast ajapiirangu lõppu sundida peatama, ilma signaalide ja lõimede töötlejate väljakutsumiseta.
- Mälu tarbimise piiramine.
- Võimalus mitteinitsialiseeritud koopiate (fork) jagamiseks ühe initsialiseeritud eraldatud programmi eksemplarist. Virtuaalmasinate koopiad luuakse copy-on-write režiimis, mis säästab märkimisväärselt mälu, hoides ainult ühe koopiat ühiseid andmeid. virtuaalmasinad Jagatud protsessid saavad naasta eelnevisse olekusse (näiteks jagatud HTTP päringute töötleja võib iga päringu töötlemise järel naasta algsesse olekusse ilma taaskäivitamiseta). Eraldatud protsessi eksemplar võib samuti taastuda teise virtuaalmasina olekusse, mitte sellele, millest ta jagati, kuid sel juhul on kulud kõrgemad, kuna on vajalik mälulehe tabeli muutmine.
- Võimalus luua initsialiseerimise ajal staatilisi mälulehti, mis sobivad isegi keerukate jooksuaegade jaoks, näiteks Go keeles. Sellisel juhul on muudatused lubatud ainult lehtedele, mis on copy-on-write režiimis.
- Toetatakse kaugdebugimist GDB abil. Debugimine on võimalik reaalajas, võimaldades jätkata täitmist.
- Kaugdebugimise tugi GDB abil. Võimalik on sooritada debugimist reaalajas koos täitmise jätkamisega.
TinyKVM külalisolek loob kärbitud tuuma, millel on kaitse muudatuste eest; see on koostatud mälulehtede kaitse kasutamisega ning kasutab SMAP-i (Supervisor Mode Access Prevention) ja SMEP-i (Supervisor Mode Execution Prevention), et pakkuda täiendavat isolatsiooni tuuma ja kas kasutaja ruumi vahel. TinyKVM kasutab suurte mälulehtede (hugepage) tehnoloogiat, et parandada jõudlust. Protsesside kutsutud süsteemikõned püütakse kinni emulaatori poolt ja suunatakse host-keskkonda (emuleeritud kutsumise töötlemise ja tõlke viivitus on umbes 2 mikrosekundit). virtuaalmasinas Mingit tüüpi draivereid, sisendeid/väljundeid ega virtuaalseid seadmeid ei kasutata.

Allikas: opennet.ru
