Facebook udgiver Hermit, et værktøjssæt til gentagelig programudførelse

Facebook (forbudt i Den Russiske Føderation) har udgivet koden til Eremit-værktøjssættet, som danner et miljø for deterministisk programudførelse, som gør det muligt at opnå det samme resultat og gentage fremskridtene i udførelsen ved hjælp af de samme inputdata ved forskellige lanceringer. Projektkoden er skrevet i Rust og distribueret under BSD-licensen.

Under normal udførelse påvirker forskellige uvedkommende faktorer resultatet, såsom det aktuelle tidspunkt, trådplanlægningsfunktioner, virtuelle hukommelsesadresser, data fra en pseudo-tilfældig talgenerator og forskellige unikke identifikatorer. Hermit giver dig mulighed for at køre programmet i en beholder, hvor disse faktorer forbliver konstante ved efterfølgende kørsler. Gentagelig udførelse, som fuldt ud gengiver flygtige miljøindstillinger, kan bruges til fejldiagnose, flertrins-fejlretning med gentagelser, oprettelse af et fast miljø til regressionstest, stresstest, fejlfinding af multithreading-problemer og gentagelige byggesystemer.

Facebook udgiver Hermit, et værktøjssæt til gentagelig programudførelse

Et reproducerbart miljø skabes ved at opsnappe systemkald, hvoraf nogle erstattes med deres egne handlere, der producerer et konstant resultat, og nogle omdirigeres til kernen, hvorefter resultatet renses for ikke-vedvarende data. Til at opsnappe systemopkald bruges drømmerammen, hvis kode også udgives af Facebook. For at forhindre ændringer i filsystemet og netværksanmodninger i at påvirke eksekveringsforløbet, udføres eksekveringen ved hjælp af et fast FS-image og med adgang til eksterne netværk deaktiveret. Når du får adgang til generatoren af ​​pseudo-tilfældige tal, producerer Hermit en foruddefineret sekvens, der gentages, hver gang den køres.

Blandt de mest komplekse ikke-permanente påvirkninger på udførelse er trådplanlæggeren, hvis adfærd afhænger af mange eksterne faktorer, såsom antallet af CPU-kerner og tilstedeværelsen af ​​andre tråde, der kører. For at sikre, at planlæggeren kan gentages, er alle tråde serialiseret, bundet til kun én CPU-kerne og i den rækkefølge, hvori kontrollen overføres til trådene. Hver tråd har lov til at udføre et fast antal instruktioner, hvorefter udførelsen stopper og overføres til en anden tråd (for at begrænse bruges CPU PMU (Performance Monitoring Unit), som stopper eksekveringen efter et specificeret antal betingede forgreninger).

For at diagnosticere problemer med tråde på grund af en racetilstand, har Hermit en tilstand til at opdage operationer, der var ude af drift og førte til et styrt. For at identificere sådanne problemer foretages en sammenligning af de tilstande, hvor korrekt drift og unormal afslutning af eksekveringen blev registreret.

Kilde: opennet.ru

Tilføj en kommentar