„Facebook“ išleidžia „Hermit“ – įrankių rinkinį, skirtą pakartotiniam programos vykdymui

„Facebook“ (uždraustas Rusijos Federacijoje) paskelbė „Hermit“ įrankių rinkinio kodą, kuris sukuria deterministinio programų vykdymo aplinką, leidžiančią skirtingais paleidimais pasiekti tą patį rezultatą ir pakartoti vykdymą naudojant tuos pačius įvesties duomenis. Projekto kodas parašytas Rust ir platinamas pagal BSD licenciją.

Įprasto vykdymo metu rezultatui įtakos turi įvairūs pašaliniai veiksniai, tokie kaip dabartinis laikas, gijų planavimas, virtualios atminties adresai, duomenys iš pseudoatsitiktinių skaičių generatoriaus ir įvairūs unikalūs identifikatoriai. „Hermit“ leidžia paleisti programą konteineryje, kuriame šie veiksniai išlieka pastovūs per vėlesnius paleidimus. Pakartotinis vykdymas, visiškai atkuriantis nepastovius aplinkos parametrus, gali būti naudojamas klaidų diagnostikai, kelių etapų derinimui su pakartotiniais paleidimais, fiksuotos regresijos testų aplinkos kūrimui, testavimui nepalankiausiomis sąlygomis, problemų, susijusių su kelių gijų ir pakartojamų kūrimo sistemų nustatymu. .

„Facebook“ išleidžia „Hermit“ – įrankių rinkinį, skirtą pakartotiniam programos vykdymui

Atkuriama aplinka sukuriama perimant sistemos iškvietimus, kai kurie iš jų pakeičiami savo tvarkyklėmis, kurios sukuria nuolatinį rezultatą, o kai kurios nukreipiamos į branduolį, o po to rezultatas išvalomas nuo nepastovių duomenų. Sisteminiams skambučiams perimti naudojama svajonių sistema, kurios kodą taip pat skelbia Facebook. Kad failų sistemos pakeitimai ir tinklo užklausos nepaveiktų vykdymo eigos, vykdymas atliekamas naudojant fiksuotą FS vaizdą ir išjungus prieigą prie išorinių tinklų. Pasiekdamas pseudoatsitiktinių skaičių generatorių, Hermit sukuria iš anksto nustatytą seką, kuri kartojama kiekvieną kartą, kai ji paleidžiama.

Vienas iš sudėtingiausių kintamųjų įtakų vykdymo eigai yra gijų planavimo priemonė, kurios elgsena priklauso nuo daugelio išorinių veiksnių, tokių kaip procesoriaus branduolių skaičius ir kitų vykdomųjų gijų buvimas. Kad būtų užtikrintas kartojamas planuotojo elgesys, visos gijos vykdomos nuosekliai tik su vienu procesoriaus branduoliu ir išlaikoma tvarka, kuria valdymas perduodamas gijomis. Kiekvienai gijai leidžiama vykdyti fiksuotą skaičių instrukcijų, po kurių vykdymas sustabdomas ir perkeliamas į kitą giją (siekiant apriboti CPU PMU (Performance Monitoring Unit), kuris sustabdo vykdymą po nurodyto skaičiaus sąlyginių šakų).

Norėdami diagnozuoti gijų problemas dėl lenktynių sąlygų, Hermit turi režimą, leidžiantį nustatyti operacijas, kurių vykdymo tvarka buvo pažeista ir dėl kurių įvyko neįprastas išjungimas. Norint nustatyti tokias problemas, palyginamos būsenos, kuriose užfiksuotas teisingas veikimas ir nenormalus vykdymo nutraukimas.

Šaltinis: opennet.ru

Добавить комментарий