Facebook objavlja Hermit, komplet orodij za ponovljivo izvajanje programov

Facebook (prepovedan v Ruski federaciji) je objavil kodo kompleta orodij Hermit, ki tvori okolje za deterministično izvajanje programa, ki omogoča pridobivanje enakega rezultata in ponavljanje napredka izvajanja z uporabo istih vhodnih podatkov pri različnih zagonih. Koda projekta je napisana v Rustu in se distribuira pod licenco BSD.

Med običajnim izvajanjem na rezultat vplivajo različni zunanji dejavniki, kot so trenutni čas, funkcije razporejanja niti, naslovi navideznega pomnilnika, podatki iz generatorja psevdonaključnih števil in različni edinstveni identifikatorji. Hermit vam omogoča izvajanje programa v vsebniku, v katerem ti faktorji ostanejo nespremenjeni pri naslednjih zagonih. Ponovljivo izvajanje, ki v celoti reproducira nestanovitne nastavitve okolja, se lahko uporablja za diagnozo napak, večstopenjsko odpravljanje napak s ponovnimi zagoni, ustvarjanje fiksnega okolja za regresijske teste, stresno testiranje, odpravljanje težav z večnitnostjo in sisteme za ponovljivo gradnjo.

Facebook objavlja Hermit, komplet orodij za ponovljivo izvajanje programov

Ponovljivo okolje je ustvarjeno s prestrezanjem sistemskih klicev, od katerih so nekateri nadomeščeni z lastnimi obdelovalci, ki proizvajajo stalen rezultat, nekateri pa so preusmerjeni v jedro, po katerem je rezultat očiščen neobstojnih podatkov. Za prestrezanje sistemskih klicev se uporablja ogrodje reverie, katerega kodo objavlja tudi Facebook. Da bi preprečili, da bi spremembe v datotečnem sistemu in omrežne zahteve vplivale na napredek izvajanja, se izvajanje izvaja s fiksno sliko FS in z onemogočenim dostopom do zunanjih omrežij. Ko dostopa do generatorja psevdonaključnih števil, Hermit ustvari vnaprej določeno zaporedje, ki se ponovi vsakič, ko se zažene.

Med najkompleksnejšimi občasnimi vplivi na izvajanje je razporejevalnik niti, katerega vedenje je odvisno od številnih zunanjih dejavnikov, kot je število jeder procesorja in prisotnost drugih delujočih niti. Da bi zagotovili ponovljivo vedenje razporejevalnika, so vse niti serializirane, vezane na samo eno jedro CPE in v vrstnem redu, v katerem se nadzor prenaša na niti. Vsaka nit lahko izvede določeno število ukazov, po katerem se izvajanje ustavi in ​​prenese na drugo nit (za omejitev se uporablja CPU PMU (Performance Monitoring Unit), ki prekine izvajanje po določenem številu pogojnih vej).

Za diagnosticiranje težav z nitmi zaradi stanja tekmovanja ima Hermit način za zaznavanje operacij, ki niso bile v redu in so privedle do zrušitve. Za prepoznavanje takšnih težav je narejena primerjava stanj, v katerih sta bila zabeležena pravilna operacija in neobičajno dokončanje izvajanja.

Vir: opennet.ru

Dodaj komentar