Hermit, un outil de test contrôlé et de détection d'erreurs

ermite

Hermit, en tant que conteneur reproductible, donne une idée de ce que ce serait si la pile système offrait une répétabilité en tant qu'abstraction

Facebook dévoilé récemment à travers une publication, le lancement de Ermite, qui forme un environnement pour l'exécution de programme déterministe, ce qui permet d'obtenir le même résultat et de répéter le processus d'exécution sur différents lancements en utilisant les mêmes données d'entrée.

Pendant l'exécution normale, divers facteurs externes affectent la sortie, tels que l'heure actuelle, les fonctions de planification de threads, les adresses de mémoire virtuelle, les données d'un générateur de nombres pseudo-aléatoires et divers identifiants uniques.

Hermit permet d'exécuter le programme dans un conteneur où ces facteurs restent constants dans les exécutions suivantes. Exécution répétable, qui reproduit intégralement la configuration de l'environnement volatil, peut être utilisé pour le diagnostic d'erreur, le débogage multi-étapes avec itérations, créant un environnement fixe pour les tests de régression, les tests de résistance, le dépannage multithread et les systèmes de construction reproductibles.

Hermit force l'exécution déterministe de programmes arbitraires et agit comme un wrapper reproductible. C'est-à-dire qu'il isole hermétiquement le programme des sources de non-déterminisme telles que la synchronisation, l'entrelacement de threads, la génération de nombres aléatoires, etc. Le déterminisme garanti est un outil puissant et sert de base à un certain nombre d'applications, y compris les tests de stress simultanés, l'enregistrement/relecture, les versions reproductibles et le diagnostic automatique des erreurs de simultanéité, et plus encore.

Hermit ne peut pas isoler le programme invité des sources de non-déterminisme, telles que les modifications du système de fichiers ou les réponses des réseaux externes. Au lieu de cela, pour fournir un déterminisme complet, l'utilisateur doit fournir une image de base du système de fichiers fixe (par exemple, avec Docker) et désactiver les réseaux externes.

À propos de l'ermite

Ermite permet la puissance crée un environnement reproductible en interceptant les appels système, dont certains sont remplacés par leurs propres gestionnaires qui produisent une sortie constante, et dont certains sont redirigés vers le noyau, après quoi les données non persistantes sont supprimées de la sortie.

Pour intercepter les appels Au système, le cadre est utilisé rêverie, dont le code est également publié par Facebook. Pour empêcher les modifications du système de fichiers et les requêtes réseau d'affecter la progression de l'exécution, l'exécution est effectuée à l'aide d'une image fixe du système de fichiers et avec l'accès aux réseaux externes désactivé. En accédant au générateur de nombres pseudo-aléatoires, Hermit produit une séquence prédéfinie qui se répète à chaque exécution.

La source la plus complexe de non-déterminisme se trouve dans le planificateur de threads. La façon dont le noyau planifie les threads dépend de nombreux facteurs externes, notamment le nombre de processeurs physiques ou d'autres threads exécutés sur le système qui nécessitent du temps CPU.

Parmi les influences non permanentes les plus complexes sur la performance, planificateur de threads en surbrillance, dont le comportement dépend de nombreux facteurs externes, tels que le nombre de cœurs de processeur et la présence d'autres threads en cours d'exécution.

Pour assurer un comportement reproductible du planificateur, tous les threads sont sérialisés, liés à un seul cœur de processeur et dans l'ordre dans lequel le contrôle est passé aux threads. Chaque thread est autorisé à exécuter un nombre fixe d'instructions, après quoi l'exécution est arrêtée et transférée à un autre thread (pour la limitation, le CPU PMU (Performance Monitoring Unit) est utilisé, qui arrête l'exécution après un nombre spécifié de branches conditionnelles).

diagnostiquer problèmes avec les threads en raison d'une condition de concurrence, Hermit a un mode pour détecter les opérations qui étaient hors service et a provoqué un blocus. Afin d'identifier de tels problèmes, une comparaison est faite entre les états dans lesquels le bon fonctionnement et l'arrêt anormal de l'exécution ont été enregistrés.

Enfin, si vous souhaitez en savoir plus, sachez que le code du projet il est écrit en Rust et est distribué sous licence BSD.

Vous pouvez vérifier les détails dans le lien suivant.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données : AB Internet Networks 2008 SL
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.