Facebook avaldab programmide korratava täitmise tööriistakomplekti Hermit

Facebook (Vene Föderatsioonis keelatud) avaldas Hermiti tööriistakomplekti koodi, mis loob keskkonna programmide deterministlikuks täitmiseks, võimaldades erinevatel käikudel saavutada sama tulemust ja korrata täitmist samu sisendandmeid kasutades. Projekti kood on kirjutatud Rust keeles ja seda levitatakse BSD litsentsi all.

Tavalise täitmise ajal mõjutavad tulemust mitmesugused kõrvalised tegurid, nagu praegune aeg, lõime ajastamine, virtuaalse mälu aadressid, andmed pseudojuhuslike numbrite generaatorist ja mitmesugused kordumatud identifikaatorid. Hermit võimaldab teil käivitada programmi konteineris, milles need tegurid jäävad järgmistel käitamistel konstantseks. Korduvat täitmist, mis taasesitab täielikult keskkonna mittepüsivad parameetrid, saab kasutada vigade diagnoosimiseks, mitmeastmeliseks silumiseks korduvate käitustega, fikseeritud keskkonna loomiseks regressioonitestide jaoks, stressitestimiseks, mitme lõimega seotud probleemide tuvastamiseks ja korratavates ehitussüsteemides. .

Facebook avaldab programmide korratava täitmise tööriistakomplekti Hermit

Reprodutseeritav keskkond luuakse süsteemikõnede pealtkuulamisega, millest osa asendatakse oma töötlejatega, mis annavad püsiva tulemuse, ja osa suunatakse ümber kerneli, misjärel tulemus puhastatakse mittepüsivatest andmetest. Süsteemikõnede pealtkuulamiseks kasutatakse unenägude raamistikku, mille koodi avaldab ka Facebook. Et failisüsteemis ja võrgupäringutes tehtud muudatused ei mõjutaks täitmise edenemist, kasutatakse täitmist fikseeritud FS-kujutise abil ja juurdepääs välistele võrkudele on keelatud. Pseudojuhuslike numbrite generaatorile juurdepääsul loob Hermit etteantud jada, mida korratakse iga kord, kui see käivitatakse.

Üks keerukamaid muutujaid täitmise edenemisele on lõime planeerija, mille käitumine sõltub paljudest välistest teguritest, näiteks protsessori tuumade arvust ja muude täitvate lõimede olemasolust. Ajastaja korduva käitumise tagamiseks käivitatakse kõik lõimed jadamisi ainult ühe protsessori tuumaga ja säilitatakse järjekord, milles juhtimine lõimedele üle antakse. Igal lõimel on lubatud täita fikseeritud arv käske, mille järel täitmine peatub ja kantakse üle teisele lõimele (et piirata CPU PMU-d (Performance Monitoring Unit), mis peatab täitmise pärast teatud arvu tingimuslikke harusid).

Võistlustingimustest tingitud keermeprobleemide diagnoosimiseks on Hermitil režiim toimingute tuvastamiseks, mille täitmise järjekord oli korrast ära ja põhjustas ebanormaalse seiskamise. Selliste probleemide tuvastamiseks võrreldakse olekuid, milles registreeriti korrektne toimimine ja täitmise ebanormaalne lõpetamine.

Allikas: opennet.ru

Lisa kommentaar