Varnish Software, mis arendab sisu edastamise ja vahemälu süsteeme, tutvustas avatud projekti TinyKVM, mis arendab vahendeid individuaalsete protsesside käitamise isoleerimiseks KVM hüperviisori abil. Projekti eesmärgiks on luua kiireim süsteem, mis isoleerib individuaalsed protsessid, kasutades riistvaralist virtualiseerimist. Projekti kood on kirjutatud keeltes C ja C++ ning levitatakse GPLv3 litsentsi alusel (need, kes ei soovi järgida GPLv3 nõudeid, saavad kommertsialitsentsi).
TinyKVM on loodud, et isoleerida kõikide Linuxi konsooliprogrammide töötamist, saavutades tulemuse, mis on sarnane tavalise käitamisega. Iga süsteemi kõne väljakutsumise kulud on umbes 2 mikrosekundit. Projekti rakendamise näitena tuuakse välja lisaisolatsiooniprotsessid vahemälu ja veebipäringute töötlemise süsteemides. TinyKVM on loodud, et asendada libriscv emulaator, mida kasutatakse veebipäringute töötlemise isoleerimiseks Varnishi platvormil. Samuti on loodud variant libvmod raamatukogust, mis võimaldab TinyKVM kasutades Varnishi mooduleid käitada.


TinyKVM käitamisel toimub programmide masinkoodi täitmine ilma emuleerivaid kihte CPU-l ja seda piiratakse KVM hüperviisori API kaudu, mis välistab kulud ja saavutab jõudluse, mis on lähedal käitamisele ilma virtualiseerimiseta. TinyKVM peamised võimalused:
- Maksimaalse tööaja piiramine. Programm saab sunniviisiliselt peatada pärast ajavahemiku lõppemist, ilma signaalide ja lõimede töötlejate väljakutsumiseta.
- Mälu tarbimise piiramine.
- Võimalus toota (fork) mittealgatatud eksemplare virtuaalmasinate ühe algatatud isoleeritud programmi eksemplarist. Virtuaalmasinate koopiad luuakse copy-on-write režiimis, mis võimaldab oluliselt säästa mälu, hoides ainult ühe eksemplari jagatud andmetest.
- Forked processes can be reset to their previous state (for example, a forked HTTP request handler can return to its original state after processing each request without restarting). An instance of an isolated process can also be reset to the state of another virtual machine rather than the one from which it was forked, but the overhead will be higher in this case since it requires page table memory modifications.
- The ability to create static memory pages during initialization, suitable even for sophisticated runtimes, such as in the Go language. In this case, changes are only allowed for pages in copy-on-write mode.
- Support for remote debugging with GDB. Live debugging with resuming execution is possible.
The TinyKVM guest environment produces a stripped-down kernel that is protected from changes, built with memory page protection and utilizing SMAP (Supervisor Mode Access Prevention) and SMEP (Supervisor Mode Execution Prevention) for additional isolation between the kernel and user space. TinyKVM uses huge memory pages to enhance performance. System calls invoked by programs are intercepted by the emulator and redirected to the host environment (the processing and translation delay for the emulated call is about 2 microseconds). virtuaalses masinas No drivers, input/output, or virtual devices are used.

Allikas: opennet.ru
