Kompania Varnish Software, që zhvillon sisteme për ndërtimin e rrjeteve të shpërndarjes dhe cache-imit të përmbajtjes, prezantoi projektin e hapur TinyKVM, i cili zhvillon mjete për izolimin e ekzekutimit të proceseve individuale me ndihmën e hipervizorit KVM. Qëllimi i projektit është krijimi i sistemit më të shpejtë të izolimit sandbox për procese të veçanta, duke përdorur virtualizimin harduerik. Kodi i projektit është shkruar në gjuhët C dhe C++ dhe shpërndahet nën licencën GPLv3 (për ata që nuk janë të gatshëm të përmbushin kërkesat e GPLv3, ofrohet licencë komerciale).
TinyKVM është projektuar për nisjen e izoluar të çdo programi konsolë për Linux, me performancë të afërt me ekzekutimin e zakonshëm. Kostoja shtesë për çdo thirrje sistemi është rreth 2 mikrosekonda. Si shembull përdorimi të projektit përmendet izolimi shtesë i proceseve në sistemet e cache-imit dhe të përpunimit të kërkesave web. TinyKVM është zhvilluar për të zëvendësuar emulatorin libriscv, i cili përdoret për të izoluar përpunimin e çdo kërkese web në platformën Varnish. Gjithashtu është krijuar një variant i bibliotekës libvmod, që lejon ekzekutimin e moduleve për Varnish duke përdorur TinyKVM.


Kur niset me TinyKVM, kodi makinerik i programeve ekzekutohet pa shtresa emulimi drejtpërdrejt në CPU dhe kufizohet përmes API-së së hipervizorit KVM, gjë që bën të mundur eliminimin e kostove shtesë dhe arritjen e një performance të afërt me ekzekutimin pa virtualizim. Veçoritë kryesore të TinyKVM:
- Kufizimi i kohës maksimale të ekzekutimit. Programi mund të ndalet me forcë pas skadimit të timeout-it, pa thirrur trajtuesit e sinjaleve dhe thread-et.
- Kufizimi i konsumit të memories.
- Mundësia e degëzimit (fork) të instancave të painicializuara makinat virtuale nga një instancë e inicializuar e programit të izoluar. Kopjet e makinave virtuale krijohen në modalitetin copy-on-write, çka mundëson kursim të ndjeshëm të memories, duke ruajtur vetëm një instancë të të dhënave të përbashkëta.
- Proceset e degëzuara mund të rikthehen në gjendjen e mëparshme (për shembull, një përpunues i degëzuar i kërkesave HTTP mund të kthehet në gjendjen fillestare pas përpunimit të çdo kërkese pa rinisje). Një instancë e procesit të izoluar mund të rikthehet edhe në gjendjen e një makine tjetër virtuale, jo domosdoshmërisht asaj nga e cila është degëzuar, por në këtë rast kostoja shtesë do të jetë më e lartë, pasi do të kërkohet ndryshimi i tabelës së faqeve të memories.
- Mundësi për krijimin e faqeve statike të memories gjatë inicializimit, të përshtatshme edhe për runtime më të ndërlikuara, për shembull si në gjuhën Go. Në këtë rast, ndryshimet lejohen vetëm për faqet që janë në regjimin copy-on-write.
- MbĂ«shtetje pĂ«r debugim nĂ« distancĂ« me GDB. ĂshtĂ« i mundur debugimi nĂ« kohĂ« reale me rifillimin e ekzekutimit.
Mjedisi mysafir TinyKVM përbëhet nga një kernel i reduktuar, i mbrojtur nga ndryshimet, i ndërtuar me mbrojtjen e faqeve të memories të aktivizuar dhe që përdor SMAP (Supervisor Mode Access Prevention) dhe SMEP (Supervisor Mode Execution Prevention) për izolim shtesë ndërmjet kernelit dhe hapësirës së përdoruesit. TinyKVM përdor faqe të mëdha memorieje (hugepage) për të rritur performancën. Thirrjet e sistemit të bëra nga programet kapen nga emulatori dhe ridrejtohen në mjedisin host (vonesa për përpunimin dhe përkthimin e thirrjes së emuluar është rreth 2 mikrosekonda). Në vetë makinën virtuale nuk përdoren asnjë lloj drejtuesi, hyrje/dalje apo pajisje virtuale.

Burimi: opennet.ru
