Kompania Varnish Software, e cila zhvillon sisteme për ndërtimin e rrjeteve të shpërndarjes dhe keCaching të përmbajtjes, ka prezantuar projektin hapur TinyKVM, i cili zhvillon një mjet për izolimin e ekzekutimit të proceseve të veçanta duke përdorur hipervizorin KVM. Qëllimi i projektit është krijimi i sistemit më të shpejtë të izolimit sandbox të proceseve 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 një licencë komerciale).
TinyKVM është projektuar për ekzekutimin e izoluara të çdo programi konsolë për Linux me performancë të ngjashme me ekzekutimin normal. Shpenzimet për çdo thirrje sistemike janë rreth 2 mikrosekonda. Si shembuj të përdorimit të projektit përmendet izolimi shtesë i proceseve në sistemet e cachimit dhe përpunimit të kërkesave web. TinyKVM është zhvilluar për të zëvendësuar emulatorin libriscv, i cili përdoret për izolimin e përpunimit të çdo kërkese web në platformën Varnish. Gjithashtu është krijuar një version i bibliotekës libvmod, i cili lejon ekzekutimin e moduleve për Varnish me përdorimin e TinyKVM.


Kur ekzekutohet me TinyKVM, kodi makinerik i programeve përfundon pa shtresa emulatorësh në CPU dhe është i kufizuar përmes API-së së hipervizorit KVM, çka lejon eliminimin e shpenzimeve dhe arritjen e një performancë më të ngjashme me ekzekutimin pa virtualizim. Mundësitë kryesore të TinyKVM:
- Kufizimi i kohës maksimale për ekzekutim. Programi mund të ndalohet me forcë pas përfundimit të kohës, pa thirrjen e trajtuesve të sinjaleve dhe çdo rrjedhe.
- Kufizimi i konsumit të memories.
- Mundësia për ndarjen (fork) e instancave të pa-iniziluara makinave virtuale nga një instancë të inicuar të programit të izoluar. Kopjet e makinerive virtuale krijohen në modin copy-on-write, çka lejon ruajtjen e konsiderueshme të memories, duke ruajtur vetëm një instancë të të dhënave të përbashkta.
- Proceset e ndara mund të kthehen në gjendjen e mëparshme (për shembull, trajtuesi i kërkesave http i ndarë mund të kthehet në gjendjen fillestare pas përpunimit të çdo kërkese pa rivendosur programin). Një instancë e procesit të izoluar gjithashtu mund të kthehet në gjendjen e një makinerie virtuale tjetër, jo asaj nga e cila është ndarë, por shpenzimet në këtë rast do të jenë më të larta pasi do të kërkohet ndryshimi i tabelës së faqeve të memories.
- Mundësia për krijimin e faqeve statike të memories gjatë inicializimit, të përshtatshme edhe për runtime të avancuara, për shembull, si në gjuhën Go. Në këtë rast, modifikimi lejohet vetëm për faqet që ndodhen në modin copy-on-write.
- Mbështetje për debugin e largët përmes GDB. Debuguar në flakë me rinisje të ekzekutimit.
Mjedisi mikpritës TinyKVM formon një bërthamë të reduktuar, të mbrojtur nga ndryshimet, e ndërtuar duke përfshirë mbrojtjen e faqeve të memories dhe duke përdorur SMAP (Mbrojtja e Qasjes në Modin e Mbikëqyrës) dhe SMEP (Mbrojtja e Ekzekutimit në Modin e Mbikëqyrës) për izolim të shtuar midis bërthamës dhe hapësirës së përdoruesit. TinyKVM përdor faqe të mëdha të memories (hugepage) për përmirësimin e performancës. Thirrjet sistemore të programeve kapen nga emulatori dhe redirigjohen në mjedisin mikpritës (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ë drejtues, hyrje/dalje dhe pajisje virtuale.

Burimi: opennet.ru
