Varnish Software, ontwikkelaar van systemen voor het opzetten van netwerken voor contentlevering en caching, heeft het open-source project TinyKVM gelanceerd, dat de tools uitbreidt voor het isoleren van de uitvoering van individuele processen met behulp van de KVM-hypervisor. Het doel van het project is het creëren van het snelste systeem voor sandbox-isolatie van aparte processen, dat gebruikmaakt van hardwarevirtualisatie. De code van het project is geschreven in C en C++ en wordt verspreid onder de GPLv3-licentie (voor degenen die niet aan de vereisten van GPLv3 kunnen voldoen, is er een commerciële licentie beschikbaar).
TinyKVM is ontworpen voor de geïsoleerde uitvoering van alle consoleprogramma's voor Linux met een prestaties dicht bij die van gebruikelijke uitvoering. De overheadkosten voor elke systeemaanroep bedragen ongeveer 2 microseconden. Een voorbeeld van het gebruik van het project is de extra isolatie van processen in caching- en webverzoekverwerkende systemen. TinyKVM is ontwikkeld ter vervanging van de libriscv-emulator, die wordt gebruikt voor het isoleren van de verwerking van elke webaanroep op het Varnish-platform. Daarnaast is er een versie van de libvmod-bibliotheek gecreëerd, waarmee modules voor Varnish kunnen worden uitgevoerd met behulp van TinyKVM.


Bij het uitvoeren via TinyKVM wordt de machinecode van programma's zonder emulerende lagen op de CPU uitgevoerd en beperkt door de KVM-hypervisor-API, wat helpt om overhead uit te sluiten en prestaties te behalen die dicht bij die van geen virtualisatie liggen. De belangrijkste mogelijkheden van TinyKVM zijn:
- Beperking van de maximale uitvoeringstijd. Een programma kan gedwongen worden gestopt na het verstrijken van een timeout, zonder het aanroepen van signaal- en threadhandlers.
- Beperking van geheugengebruik.
- Mogelijkheid tot het fork'en van niet-geïnitialiseerde exemplaren virtuele machines van één geïnitialiseerd exemplaar van een geïsoleerd programma. Kopieën van virtuele machines worden aangemaakt in copy-on-write-modus, wat aanzienlijk geheugen bespaart door slechts één exemplaar van gedeelde gegevens op te slaan.
- Afgestemde processen kunnen worden teruggezet naar een eerdere staat (bijvoorbeeld, een afgestemd http-verzoekverwerker kan zonder herstart terugkeren naar de oorspronkelijke staat na de verwerking van elk verzoek). Een exemplaar van een geïsoleerd proces kan ook worden teruggezet naar de staat van een andere virtuele machine dan die waarvan het is afgeleid, maar de overhead zal in dit geval hoger zijn, aangezien een wijziging van de paginatabel vereist is.
- De mogelijkheid om statische geheugenpagina's te creëren tijdens de initialisatie, die zelfs geschikt zijn voor geavanceerde runtime, zoals in de programmeertaal Go. In dit geval zijn wijzigingen alleen toegestaan voor pagina's die zich in de modus copy-on-write bevinden.
- Ondersteuning voor externe debugging met behulp van GDB. Debuggen terwijl de uitvoering doorgaat is mogelijk.
De gastomgeving TinyKVM vormt een afgeslankt kernel, beschermd tegen veranderingen, opgebouwd met inschakeling van geheugenpagina-beveiliging en gebruikmakend van SMAP (Supervisor Mode Access Prevention) en SMEP (Supervisor Mode Execution Prevention) voor extra isolatie tussen de kernel en de gebruikersruimte. TinyKVM gebruikt grote geheugenpagina's (hugepage) voor prestatieverbetering. Door programma's aangeroepen systeemcalls worden onderschept door de emulator en omgeleid naar de hostomgeving (de vertraging voor verwerking en transformatie van de geëmmuleerde aanroep bedraagt ongeveer 2 microseconden). In de een virtuele machine worden geen stuurprogramma's, in-/uitvoer en virtuele apparaten gebruikt.

Bron: opennet.ru
