Facebook publiceert Hermit, een toolkit voor herhaalbare programma-uitvoering

Facebook (verboden in de Russische Federatie) publiceerde de code voor de Hermit-toolkit, die een omgeving creëert voor deterministische uitvoering van programma's, waardoor verschillende runs hetzelfde resultaat kunnen bereiken en de uitvoering kunnen herhalen met dezelfde invoergegevens. De projectcode is geschreven in Rust en wordt gedistribueerd onder de BSD-licentie.

Tijdens normale uitvoering wordt het resultaat beïnvloed door een verscheidenheid aan externe factoren, zoals de huidige tijd, threadplanning, virtuele geheugenadressen, gegevens van de pseudo-willekeurige nummergenerator en verschillende unieke identificatiegegevens. Met Hermit kunt u een programma uitvoeren in een container waarin deze factoren bij volgende uitvoeringen constant blijven. Herhaalbare uitvoering, die de niet-persistente parameters van de omgeving volledig reproduceert, kan worden gebruikt voor foutdiagnose, foutopsporing in meerdere stappen met herhaalde runs, het creëren van een vaste omgeving voor regressietests, stresstests, het identificeren van problemen met multi-threading en in herhaalbare uitvoeringen. systemen bouwen.

Facebook publiceert Hermit, een toolkit voor herhaalbare programma-uitvoering

Er wordt een reproduceerbare omgeving gecreëerd door het onderscheppen van systeemaanroepen, waarvan sommige worden vervangen door hun eigen handlers die een permanent resultaat opleveren, en sommige worden omgeleid naar de kernel, waarna het resultaat wordt gewist van niet-persistente gegevens. Voor het onderscheppen van systeemoproepen wordt gebruik gemaakt van het mijverieframework, 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, wordt de uitvoering uitgevoerd met behulp van een vast FS-image en is de toegang tot externe netwerken uitgeschakeld. Bij toegang tot de generator voor pseudo-willekeurige getallen produceert Hermit een vooraf gedefinieerde reeks die elke keer dat deze wordt gelanceerd, wordt herhaald.

Een van de meest complexe variabele invloeden op de voortgang van de uitvoering is de threadplanner, waarvan het gedrag afhangt van veel externe factoren, zoals het aantal CPU-kernen en de aanwezigheid van andere uitvoerende threads. Om herhaalbaar gedrag van de planner te garanderen, worden alle threads serieel uitgevoerd in verbinding met slechts één CPU-kern, waarbij de volgorde wordt gehandhaafd waarin de controle wordt overgedragen naar de threads. Elke thread mag een vast aantal instructies uitvoeren, waarna de uitvoering stopt en wordt overgedragen naar een andere thread (om de CPU PMU (Performance Monitoring Unit) te beperken, die de uitvoering stopt na een bepaald aantal voorwaardelijke vertakkingen).

Om problemen met threads als gevolg van raceomstandigheden te diagnosticeren, heeft Hermit een modus voor het identificeren van bewerkingen waarvan de uitvoeringsvolgorde niet in orde was en tot een abnormale afsluiting leidde. Om dergelijke problemen te identificeren, wordt een vergelijking gemaakt van de toestanden waarin correcte werking en abnormale beëindiging van de uitvoering werden geregistreerd.

Bron: opennet.ru

Voeg een reactie