Das Unternehmen Varnish Software, das Systeme zur Erstellung von Content Delivery Networks und Caching-Lösungen entwickelt, hat das Open-Source-Projekt TinyKVM vorgestellt, das Werkzeuge zur Isolation der Ausführung einzelner Prozesse mithilfe des KVM-Hypervisors entwickelt. Ziel des Projekts ist es, das schnellste System zur Sandbox-Isolation von einzelnen Prozessen zu schaffen, das Hardware-Virtualisierung verwendet. Der Code des Projekts ist in den Programmiersprachen C und C++ geschrieben und wird unter der GPLv3-Lizenz verbreitet (für diejenigen, die die Anforderungen der GPLv3 nicht erfüllen können, wird eine kommerzielle Lizenz angeboten).
TinyKVM ist auf die isolierte Ausführung beliebiger Konsolenprogramme für Linux ausgelegt und erreicht eine Leistung, die nahe der herkömmlichen Ausführung liegt. Die Overheadkosten für jeden Systemaufruf betragen etwa 2 Mikrosekunden. Als Anwendungsbeispiel wird die zusätzliche Isolation von Prozessen in Caching-Systemen und der Verarbeitung von Webanfragen genannt. TinyKVM wurde als Ersatz für den Libriscv-Emulator entwickelt, der zur Isolation der Verarbeitung jeder Webanfrage in der Varnish-Plattform verwendet wird. Zusätzlich wurde eine Variante der libvmod-Bibliothek erstellt, die es ermöglicht, Module für Varnish mithilfe von TinyKVM auszuführen.


Beim Starten mit TinyKVM wird der Maschinencode von Programmen ohne emulierende Schichten auf der CPU ausgeführt und durch die KVM-Hypervisor-API eingeschränkt, wodurch Overhead vermieden und eine Leistung erreicht wird, die der Ausführung ohne Virtualisierung nahekommt. Die Hauptfunktionen von TinyKVM sind:
- Begrenzung der maximalen Ausführungszeit. Das Programm kann nach Ablauf des Zeitlimits zwangsweise gestoppt werden, ohne dass Signal- und Thread-Handler aufgerufen werden.
- Begrenzung des Speicherverbrauchs.
- Möglichkeit der Abzweigung (Fork) uninitialisierter Instanzen virtuellen Maschinen aus einer einzigen initialisierten Instanz eines isolierten Programms. Kopien virtueller Maschinen werden im Copy-on-Write-Modus erstellt, was erheblich Speicher spart, da nur eine Instanz gemeinsamer Daten gespeichert wird.
- Abzweigprozesse können in ihren vorherigen Zustand zurückgesetzt werden (zum Beispiel kann ein abgezweigte HTTP-Handler ohne Neustart nach der Verarbeitung jeder Anfrage in den Ursprungszustand zurückkehren). Eine Instanz eines isolierten Prozesses kann ebenfalls auf den Zustand einer anderen virtuellen Maschine zurückgesetzt werden, nicht jedoch auf die, von der sie abgezweigt wurde. In diesem Fall sind die Kosten jedoch höher, da eine Änderung der Seitentabelle erforderlich ist.
- Die Möglichkeit, statische Seiten im Speicher während der Initialisierung zu erstellen, ist auch für komplexe Laufzeiten geeignet, wie beispielsweise in der Programmiersprache Go. In diesem Fall sind Änderungen nur für Seiten im Copy-on-Write-Modus zulässig.
- Unterstützung für die Remote-Debugging mit GDB. Es ist eine Live-Debugging möglich, bei dem die Ausführung wieder aufgenommen werden kann.
Die TinyKVM-Gastumgebung bildet einen abgespeckten Kernel, der vor Änderungen geschützt ist, erstellt mit Seitenmemory-Schutz und nutzt SMAP (Supervisor Mode Access Prevention) sowie SMEP (Supervisor Mode Execution Prevention) für zusätzliche Isolation zwischen Kernel und Benutzerspeicher. TinyKVM verwendet große Seiten (Hugepages) zur Leistungssteigerung. Durch Programme aufgerufene Systemaufrufe werden vom Emulator abgefangen und ins Host-Umfeld umgeleitet (die Verzögerung für die Verarbeitung und Übersetzung des emulierten Aufrufs beträgt etwa 2 Mikrosekunden). In der virtuellen Maschine werden keine Treiber, Ein-/Ausgabe- oder virtuelle Geräte verwendet.

Quelle: opennet.ru
