Compania Varnish Software, care dezvoltă sisteme pentru construirea de rețele de livrare și caching de conținut, a lansat proiectul open-source TinyKVM, care dezvoltă instrumentele pentru izolarea execuției proceselor individuale cu ajutorul hypervisorului KVM. Scopul proiectului este de a crea cel mai rapid sistem de izolare sandbox pentru procesele individuale, utilizând virtualizarea hardware. Codul proiectului este scris în limbajele C și C++, și este distribuit sub licența GPLv3 (pentru cei care nu pot respecta cerințele GPLv3 se oferă o licență comercială).
TinyKVM este destinat rulării izolate a oricăror programe de consolă pentru Linux, cu performanță aproape de cea a execuției normale. Cheltuielile adiționale pentru fiecare apel de sistem sunt de aproximativ 2 microsecunde. Ca exemplu de utilizare a proiectului, se menționează izolarea suplimentară a proceselor în sistemele de caching și procesare a cererilor web. TinyKVM a fost dezvoltat pentru a înlocui emulatorul libriscv, utilizat pentru izolarea procesării fiecărei cereri web în platforma Varnish. De asemenea, a fost creată o variantă a bibliotecii libvmod, care permite adăugarea de module la Varnish folosind TinyKVM.


Atunci când este lansat cu ajutorul TinyKVM, codul mașinii programelor este executat fără straturi de emulare pe CPU și este restricționat prin API-ul hypervisorului KVM, ceea ce permite eliminarea cheltuielilor adiționale și atingerea unei performanțe apropiate de cea a execuției fără virtualizare. Principalele caracteristici ale TinyKVM:
- Limitarea timpului maxim de execuție. Programul poate fi oprit forțat după expirarea unui timeout, fără a apela handleri de semnale sau threaduri.
- Limitarea consumului de memorie.
- Posibilitatea de a crea (fork) instanțe neinițializate mașini virtuale dintr-o instanță inițializată a programului izolat. Copiile mașinilor virtuale sunt create în modul copy-on-write, ceea ce permite economisirea semnificativă a memoriei, păstrând doar o singură instanță de date comune.
- Procesele ramificate pot fi resetate la starea anterioară (de exemplu, un handler HTTP ramificat poate reveni la starea inițială, fără a necesita repornirea, după procesarea fiecărei cereri). O instanță a unui proces izolat poate fi, de asemenea, resetată la starea unei alte mașini virtuale, nu neapărat celei din care a fost ramificată, dar costurile vor fi mai mari, deoarece va fi necesară modificarea tabelului paginilor de memorie.
- Posibilitatea de a crea pagini de memorie statice în timpul inițializării, adecvate chiar și pentru runtime-uri sofisticate, cum ar fi Golang. În acest caz, modificările sunt permise doar pentru paginile aflate în modul copy-on-write.
- Suport pentru depanarea de la distanță folosind GDB. Este posibilă depanarea în timp real cu reluarea execuției.
Mediul gazdă TinyKVM formează un nucleu restricționat, protejat împotriva modificărilor, compilat cu activarea protecției paginilor de memorie și folosind SMAP (Supervisor Mode Access Prevention) și SMEP (Supervisor Mode Execution Prevention) pentru o izolare suplimentară între nucleu și spațiul utilizatorului. TinyKVM utilizează pagini mari de memorie (hugepage) pentru a îmbunătăți performanța. Apelurile sistemului efectuate de aplicații sunt interceptate de emulator și redirecționate către mediul gazdă (întârzierea pentru procesarea și traducerea apelului emulator este de aproximativ 2 microsecunde). În interiorul mașina virtuală nu sunt utilizate drivere, I/O și dispozitive virtuale.

Sursa: opennet.ro
