Varnish Software, une sociĂ©tĂ© qui dĂ©veloppe des systĂšmes pour crĂ©er des rĂ©seaux de diffusion et de mise en cache de contenu, a prĂ©sentĂ© le projet open source TinyKVM, qui dĂ©veloppe des outils permettant d'isoler l'exĂ©cution de processus individuels Ă l'aide de l'hyperviseur KVM. Lâobjectif dĂ©clarĂ© du projet est de crĂ©er le systĂšme dâisolation sandbox le plus rapide pour les processus individuels Ă lâaide de la virtualisation matĂ©rielle. Le code du projet est Ă©crit en C et C++ et est distribuĂ© sous la licence GPLv3 (pour ceux qui ne sont pas prĂȘts Ă se conformer aux exigences de la GPLv3, une licence commerciale est fournie).
TinyKVM est conçu pour exĂ©cuter n'importe quel programme console de maniĂšre isolĂ©e. Linux Avec des performances proches de l'exĂ©cution standard, le temps de traitement de chaque appel systĂšme est d'environ 2 microsecondes. L'isolation supplĂ©mentaire des processus dans les systĂšmes de mise en cache et de traitement des requĂȘtes web est citĂ©e en exemple d'application du projet. TinyKVM est conçu pour remplacer l'Ă©mulateur libriscv, utilisĂ© pour isoler le traitement de chaque requĂȘte web sur la plateforme Varnish. Une variante de la bibliothĂšque libvmod a Ă©galement Ă©tĂ© créée, permettant l'exĂ©cution de modules Varnish avec TinyKVM.


Lors de l'exécution avec TinyKVM, le code natif des programmes est exécuté sans couches d'émulation sur le processeur et est contraint à l'aide de l'API de l'hyperviseur KVM, éliminant ainsi les frais généraux et obtenant des performances proches de celles de l'exécution sans virtualisation. Principales caractéristiques de TinyKVM :
- Limitation du temps d'exĂ©cution maximal. Le programme peut ĂȘtre arrĂȘtĂ© de force aprĂšs un dĂ©lai d'attente, sans appeler les gestionnaires de signaux et les threads.
- Limitation de la consommation de mémoire.
- Possibilité de créer des instances non initialisées machines virtuelles à partir d'une seule instance initialisée d'un programme isolé, des copies de machines virtuelles sont créées en mode copie à l'écriture, ce qui permet de réaliser d'importantes économies de mémoire en ne stockant qu'une seule copie des données partagées.
- Les processus forkĂ©s peuvent ĂȘtre rĂ©initialisĂ©s Ă un Ă©tat antĂ©rieur (par exemple, un gestionnaire de requĂȘtes http forkĂ© peut ĂȘtre rĂ©initialisĂ© Ă son Ă©tat d'origine aprĂšs le traitement de chaque requĂȘte sans redĂ©marrage). Une instance de processus isolĂ©e peut Ă©galement ĂȘtre rĂ©initialisĂ©e sur un Ă©tat de machine virtuelle diffĂ©rent de celui Ă partir duquel elle a Ă©tĂ© dĂ©rivĂ©e, mais la surcharge sera plus Ă©levĂ©e dans ce cas car la table des pages de mĂ©moire devra ĂȘtre modifiĂ©e.
- La possibilitĂ© de crĂ©er des pages de mĂ©moire statiques lors de l'initialisation, adaptĂ©e mĂȘme aux environnements d'exĂ©cution sophistiquĂ©s tels que le langage Go. Dans ce cas, les modifications ne sont autorisĂ©es que pour les pages en mode copie sur Ă©criture.
- Prise en charge du débogage à distance à l'aide de GDB. Le débogage à la volée avec reprise d'exécution est possible.
L'environnement invité TinyKVM est un noyau allégé et inviolable, conçu avec la pagination mémoire activée et utilisant SMAP (Supervisor Mode Access Prevention) et SMEP (Supervisor Mode Execution Prevention) pour une isolation renforcée entre le noyau et l'espace utilisateur. TinyKVM utilise des pages mémoire de grande taille (hugepages) pour optimiser les performances. Les appels systÚme effectués par les programmes sont interceptés par l'émulateur et redirigés vers l'environnement hÎte (la latence de traitement et de traduction de l'appel émulé est d'environ 2 microsecondes). machine virtuelle Aucun pilote, périphérique d'entrée/sortie ou périphérique virtuel n'est utilisé.

Source: opennet.ru
