Hermit, een tool voor gecontroleerd testen en foutdetectie

kluizenaar

Hermit geeft als reproduceerbare container een idee van hoe het zou zijn als de systeemstack herhaalbaarheid als abstractie zou bieden

Facebook onthuld onlangs via een publicatie de lancering van Kluizenaar, die een vormt omgeving voor deterministische programma-uitvoering, wat het mogelijk maakt om hetzelfde resultaat te bereiken en het uitvoeringsproces te herhalen bij verschillende lanceringen met dezelfde invoergegevens.

Tijdens normale uitvoering beïnvloeden verschillende externe factoren de uitvoer, zoals de huidige tijd, threadplanningsfuncties, virtuele geheugenadressen, gegevens van een pseudowillekeurige nummergenerator en verschillende unieke identificatoren.

Hermit maakt het mogelijk om het programma in een container uit te voeren waar deze factoren constant blijven in volgende runs. Herhaalbare uitvoering, die de configuratie van de vluchtige omgeving volledig reproduceert, kan worden gebruikt voor foutdiagnose, foutopsporing multi-step met iteraties, waardoor een vaste omgeving wordt gecreëerd voor regressietesten, stresstesten, probleemoplossing met meerdere threads en herhaalbare bouwsystemen.

Hermit dwingt deterministische uitvoering van willekeurige programma's af en fungeert als een reproduceerbare verpakking. Dat wil zeggen, het isoleert het programma hermetisch van bronnen van niet-determinisme zoals timing, thread interleaving, het genereren van willekeurige getallen, enz. Gegarandeerd determinisme is een krachtig hulpmiddel en dient als basis voor een aantal toepassingen, waaronder stresstests voor gelijktijdigheid, opnemen/afspelen, reproduceerbare builds en automatische diagnose van gelijktijdigheidsfouten, en meer.

Hermit kan het gastprogramma niet isoleren van bronnen van niet-determinisme, zoals wijzigingen in het bestandssysteem of reacties van externe netwerken. In plaats daarvan moet de gebruiker, om volledig determinisme te bieden, een basisimage met een vast bestandssysteem leveren (bijvoorbeeld met Docker) en externe netwerken uitschakelen.

Over Kluizenaar

Kluizenaar staat toe macht creëert een reproduceerbare omgeving door systeemoproepen te onderscheppen, waarvan sommige worden vervangen door hun eigen handlers die een constante uitvoer produceren, en waarvan sommige worden omgeleid naar de kernel, waarna niet-persistente gegevens uit de uitvoer worden verwijderd.

Om oproepen te onderscheppen Naar het systeem, kader wordt gebruikt mijmering, waarvan de code ook door Facebook wordt gepubliceerd. Om te voorkomen dat wijzigingen in het bestandssysteem en netwerkverzoeken de voortgang van de uitvoering beïnvloeden, uitvoering wordt uitgevoerd met behulp van een stilstaand beeld van het bestandssysteem en met toegang tot externe netwerken uitgeschakeld. Door toegang te krijgen tot de pseudowillekeurige nummergenerator, produceert Hermit een vooraf gedefinieerde reeks die elke keer wordt herhaald als deze wordt uitgevoerd.

De meest complexe bron van non-determinisme is de threadplanner. De manier waarop de kernel threads plant, is afhankelijk van veel externe factoren, waaronder het aantal fysieke CPU's of andere threads die op het systeem worden uitgevoerd en die CPU-tijd vereisen.

Van de meer complexe niet-permanente invloeden op prestaties, markeert threadplanner, waarvan het gedrag afhangt van veel externe factoren, zoals het aantal CPU-kernen en de aanwezigheid van andere actieve threads.

Om herhaalbaar plannergedrag te garanderen, zijn alle threads geserialiseerd, gebonden aan een enkele CPU-kern en in de volgorde waarin de controle wordt doorgegeven aan de threads. Elke thread mag een vast aantal instructies uitvoeren, waarna de uitvoering wordt gestopt en overgebracht naar een andere thread (voor beperking wordt de CPU PMU (Performance Monitoring Unit) gebruikt, die de uitvoering stopt na een bepaald aantal voorwaardelijke vertakkingen).

Om een ​​diagnose te stellen problemen met threads vanwege een raceconditie, Hermit heeft een modus om bewerkingen te detecteren die niet in orde waren en veroorzaakte een blokkade. Om dergelijke problemen te identificeren, wordt een vergelijking gemaakt tussen de toestanden waarin de correcte werking en de abnormale beëindiging van de uitvoering werden geregistreerd.

Tot slot, als u geïnteresseerd bent om er meer over te leren, moet u dat weten de projectcode het is geschreven in Rust en wordt gedistribueerd onder de BSD-licentie.

U kunt de details bekijken in de volgende link.


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: AB Internet Networks 2008 SL
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.