TinyKVM für die Virtualisierung auf Prozesslevel wurde vorgestellt.

Das Unternehmen Varnish Software, das Systeme zur Erstellung von Content Delivery Networks und Caching entwickelt, hat das Open-Source-Projekt TinyKVM vorgestellt, das Werkzeuge zur Isolierung der Ausführung einzelner Prozesse mithilfe des Hypervisors KVM weiterentwickelt. Ziel des Projekts ist es, das schnellste System zur Sandbox-Isolierung einzelner Prozesse unter Verwendung von Hardware-Virtualisierung zu schaffen. Der Code des Projekts ist in 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 für die isolierte Ausführung beliebiger Konsolenprogramme für Linux konzipiert, mit einer Leistung, die der normalen Ausführung nahekommt. Die Overhead-Kosten für jeden Systemaufruf betragen etwa 2 Mikrosekunden. Als Beispiel für die Anwendung des Projekts wird eine zusätzliche Prozessisolation in Caching- und Webanfragesystemen erwähnt. TinyKVM wurde als Ersatz für den Emulator libriscv entwickelt, der zur Isolierung der Verarbeitung jeder Webanfrage auf der Varnish-Plattform verwendet wird. Zusätzlich wurde eine Variante der Bibliothek libvmod erstellt, die die Ausführung von Varnish-Modulen unter Verwendung von TinyKVM ermöglicht.

TinyKVM für die Virtualisierung auf Prozesslevel wurde vorgestellt.TinyKVM für die Virtualisierung auf Prozesslevel wurde vorgestellt.

Bei der Ausführung mit TinyKVM wird der Maschinencode der Programme ohne emulierende Schichten auf der CPU ausgeführt und über die API des Hypervisors KVM eingeschränkt, was es ermöglicht, Overhead zu vermeiden und eine Leistung zu erzielen, die der Ausführung ohne Virtualisierung nahekommt. Die Hauptmerkmale von TinyKVM sind:

  • Begrenzung der maximalen Ausführungszeit. Ein Programm kann nach Ablauf des Timeouts zwangsweise gestoppt werden, ohne dass Signal- und Thread-Handler aufgerufen werden.
  • Begrenzung des Speicherverbrauchs.
  • Möglichkeit der Forking nicht initialisierter Instanzen virtuelle Maschinen von einer initialisierten Instanz des isolierten Programms. Kopien von virtuellen Maschinen werden im Copy-on-Write-Modus erstellt, was erhebliche Einsparungen im Speicher ermöglicht, da nur eine Instanz gemeinsamer Daten gespeichert wird.
  • Abgespaltene Prozesse können in ihren vorherigen Zustand zurückgesetzt werden (zum Beispiel kann ein abgespaltener HTTP-Request-Handler ohne Neustart nach der Verarbeitung jeder Anfrage in seinen Ursprungszustand zurückkehren). Eine Instanz eines isolierten Prozesses kann ebenfalls in den Zustand einer anderen virtuellen Maschine zurückgesetzt werden, nicht jedoch in den Zustand derjenigen, von der sie abgespalten wurde, aber die Kosten für diesen Fall sind höher, da eine Änderung der Seitentabelle erforderlich ist.
  • Die Möglichkeit, während der Initialisierung statische Speicherseiten zu erstellen, die auch für komplexe Laufzeiten geeignet sind, beispielsweise wie in der Programmiersprache Go. In diesem Fall sind Änderungen nur für Seiten zulässig, die sich im Copy-on-Write-Modus befinden.
  • Unterstützung für Remote-Debugging mit GDB. Live-Debugging ist möglich, wobei die Ausführung fortgesetzt werden kann.

Die Gastumgebung TinyKVM bildet einen abgespeckten Kernel, der vor Änderungen geschützt ist und mit aktivierter Seitenschutzsicherung gebaut wurde, wobei SMAP (Supervisor Mode Access Prevention) und SMEP (Supervisor Mode Execution Prevention) für zusätzliche Isolation zwischen Kernel und Nutzerspace verwendet werden. TinyKVM nutzt große Speicherseiten (hugepage) zur Leistungssteigerung. Von Programmen 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-/Ausgabegeräte und virtuellen Geräte verwendet.

TinyKVM für die Virtualisierung auf Prozesslevel wurde vorgestellt.


Quelle: opennet.ru
60GB SSD 8Gb DDR4