Facebook publiserer Hermit, et verktøysett for repeterbar programkjøring

Facebook (forbudt i den russiske føderasjonen) publiserte koden for Hermit-verktøysettet, som skaper et miljø for deterministisk kjøring av programmer, som tillater forskjellige kjøringer for å oppnå samme resultat og gjenta kjøringen ved å bruke de samme inndataene. Prosjektkoden er skrevet i Rust og distribueres under BSD-lisensen.

Under normal utførelse påvirkes resultatet av en rekke fremmede faktorer, som gjeldende tid, trådplanlegging, virtuelle minneadresser, data fra pseudorandom-nummergeneratoren og forskjellige unike identifikatorer. Hermit lar deg kjøre et program i en beholder der disse faktorene forblir konstante over påfølgende kjøringer. Repeterbar utførelse, som fullt ut reproduserer de ikke-vedvarende parametrene i miljøet, kan brukes til feildiagnose, flertrinns debugging med gjentatte kjøringer, skape et fast miljø for regresjonstester, stresstesting, identifisere problemer med multithreading og i repeterbare byggesystemer .

Facebook publiserer Hermit, et verktøysett for repeterbar programkjøring

Et reproduserbart miljø skapes ved å avskjære systemanrop, hvorav noen erstattes med sine egne behandlere som produserer et permanent resultat, og noen blir omdirigert til kjernen, hvoretter resultatet fjernes for ikke-vedvarende data. For å avskjære systemanrop brukes reverie-rammeverket, koden som også publiseres av Facebook. For å forhindre at endringer i filsystemet og nettverksforespørsler påvirker utførelsesfremdriften, utføres utførelse ved hjelp av et fast FS-bilde og med tilgang til eksterne nettverk deaktivert. Når du får tilgang til pseudo-tilfeldig tallgenerator, produserer Hermit en forhåndsdefinert sekvens som gjentas hver gang den startes.

En av de mest komplekse variable påvirkningene på utførelsesfremdriften er trådplanleggeren, hvis oppførsel avhenger av mange eksterne faktorer, for eksempel antall CPU-kjerner og tilstedeværelsen av andre utførende tråder. For å sikre repeterbar oppførsel av planleggeren, kjøres alle tråder serielt i forbindelse med kun én CPU-kjerne og opprettholder rekkefølgen som kontrollen overføres til trådene. Hver tråd har lov til å utføre et fast antall instruksjoner, hvoretter kjøringen stopper og overføres til en annen tråd (for å begrense CPU PMU (Performance Monitoring Unit), som stopper kjøringen etter et spesifisert antall betingede grener).

For å diagnostisere problemer med tråder på grunn av raseforhold, har Hermit en modus for å identifisere operasjoner hvis utførelsesordre var ute av drift og førte til en unormal nedleggelse. For å identifisere slike problemer, er det foretatt en sammenligning av tilstandene der korrekt drift og unormal avslutning av utførelse ble registrert.

Kilde: opennet.ru

Legg til en kommentar