Hermit, ein Werkzeug für kontrolliertes Testen und Fehlererkennung

Einsiedler

Hermit als reproduzierbarer Container lässt erahnen, wie es wäre, wenn der System-Stack Wiederholbarkeit als Abstraktion bereitstellen würde

Facebook enthüllt kürzlich durch eine Veröffentlichung, den Start von Einsiedler, die eine bildet Umgebung für deterministische Programmausführung, wodurch es möglich ist, dasselbe Ergebnis zu erzielen und den Ausführungsprozess bei verschiedenen Starts mit denselben Eingabedaten zu wiederholen.

Während der normalen Ausführung beeinflussen verschiedene äußere Faktoren die Ausgabe, wie z. B. die aktuelle Zeit, Thread-Scheduling-Funktionen, virtuelle Speicheradressen, Daten von einem Pseudozufallszahlengenerator und verschiedene eindeutige Kennungen.

Hermit erlaubt es, das Programm in einem Container auszuführen wobei diese Faktoren in nachfolgenden Läufen konstant bleiben. Wiederholbare Ausführung, die die Konfiguration der flüchtigen Umgebung vollständig reproduziert, kann für Fehlerdiagnose, Debugging verwendet werden mehrstufig mit Iterationen, wodurch eine feste Umgebung für Regressionstests, Belastungstests, Multithread-Fehlerbehebung und wiederholbare Build-Systeme geschaffen wird.

Hermit erzwingt die deterministische Ausführung beliebiger Programme und fungiert als reproduzierbarer Wrapper. Das heißt, es isoliert das Programm hermetisch von Quellen des Nichtdeterminismus wie Timing, Thread-Interleaving, Generierung von Zufallszahlen usw. Garantierter Determinismus ist ein leistungsstarkes Tool und dient als Grundlage für eine Reihe von Anwendungen, darunter Parallelitäts-Stresstests, Aufzeichnung/Wiedergabe, reproduzierbare Builds und automatische Diagnose von Parallelitätsfehlern und mehr.

Hermit kann das Gastprogramm nicht von Quellen des Nichtdeterminismus isolieren, wie z. B. Dateisystemänderungen oder Antworten von externen Netzwerken. Um einen vollständigen Determinismus bereitzustellen, muss der Benutzer stattdessen ein festes Basisimage des Dateisystems bereitstellen (z. B. mit Docker) und externe Netzwerke deaktivieren.

Über Einsiedler

Einsiedler ermöglicht Macht schafft eine reproduzierbare Umgebung durch Abfangen von Systemaufrufen, von denen einige durch ihre eigenen Handler ersetzt werden, die eine konstante Ausgabe erzeugen, und einige an den Kernel umgeleitet werden, wonach nicht persistente Daten aus der Ausgabe entfernt werden.

Um Anrufe abzufangen Zum System, Rahmen verwendet wird Träumereien, dessen Code ebenfalls von Facebook veröffentlicht wird. Um zu verhindern, dass Dateisystemänderungen und Netzwerkanforderungen den Ausführungsfortschritt beeinträchtigen, Ausführung wird unter Verwendung eines Standbildes durchgeführt des Dateisystems und mit deaktiviertem Zugriff auf externe Netzwerke. Durch den Zugriff auf den Pseudozufallszahlengenerator erzeugt Hermit eine vordefinierte Sequenz, die bei jeder Ausführung wiederholt wird.

Die komplexeste Quelle für Nichtdeterminismus ist der Thread-Scheduler. Die Art und Weise, wie der Kernel Threads plant, hängt von vielen externen Faktoren ab, einschließlich der Anzahl der physischen CPUs oder anderer Threads, die auf dem System ausgeführt werden und CPU-Zeit benötigen.

Von den komplexeren nicht dauerhaften Einflüssen auf die Leistung hebt den Thread-Scheduler hervor, dessen Verhalten von vielen externen Faktoren abhängt, z. B. der Anzahl der CPU-Kerne und dem Vorhandensein anderer laufender Threads.

Um ein wiederholbares Scheduler-Verhalten sicherzustellen, werden alle Threads serialisiert und an einen einzelnen CPU-Kern gebunden und in der Reihenfolge, in der die Steuerung an die Threads übergeben wird. Jeder Thread darf eine feste Anzahl von Anweisungen ausführen, wonach die Ausführung gestoppt und an einen anderen Thread übertragen wird (zur Begrenzung wird die CPU PMU (Performance Monitoring Unit) verwendet, die die Ausführung nach einer bestimmten Anzahl bedingter Verzweigungen stoppt).

Zu diagnostizieren Probleme mit Threads aufgrund einer Racebedingung, Hermit verfügt über einen Modus zur Erkennung von Operationen, die außer Betrieb waren und verursachte eine Blockade. Um solche Probleme zu identifizieren, wird ein Vergleich zwischen den Zuständen durchgeführt, in denen die korrekte Operation und die abnormale Beendigung der Ausführung registriert wurden.

Schließlich, wenn Sie daran interessiert sind, mehr darüber zu erfahren, sollten Sie das wissen den Projektcode es ist in Rust geschrieben und wird unter der BSD-Lizenz vertrieben.

Sie können die Details überprüfen den folgenden Link.


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: AB Internet Networks 2008 SL
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.