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 de console pour Linux de manière isolée avec des performances proches de l'exécution normale. La surcharge liée à l’invocation de chaque appel système est d’environ 2 microsecondes. Un exemple d’application du projet est l’isolation supplémentaire des processus dans les systèmes de mise en cache et le traitement des requêtes Web. TinyKVM est conçu pour remplacer l'émulateur libriscv utilisé pour isoler le traitement de chaque requête Web dans la plate-forme Varnish. De plus, une version de la bibliothèque libvmod a été créée qui permet d'exécuter des modules Varnish à l'aide de 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
