„Facebook“ pristatė neseniai per leidinį, paleisti Ermitas, kuris sudaro a aplinka deterministiniam programos vykdymui, kuri leidžia pasiekti tą patį rezultatą ir pakartoti vykdymo procesą įvairiais paleidimais naudojant tuos pačius įvesties duomenis.
Įprasto vykdymo metu išvestį veikia įvairūs pašaliniai veiksniai, tokie kaip dabartinis laikas, gijų planavimo funkcijos, virtualios atminties adresai, duomenys iš pseudoatsitiktinių skaičių generatoriaus ir įvairūs unikalūs identifikatoriai.
Hermit leidžia paleisti programą konteineryje kur šie veiksniai išlieka pastovūs vėlesniuose važiavimuose. Pakartotinis vykdymas, kuris visiškai atkuria nepastovios aplinkos konfigūraciją, gali būti naudojamas klaidų diagnostikai, derinimui kelių žingsnių su iteracijomis, sukuriant fiksuotą aplinką regresijos testavimui, testavimui nepalankiausiomis sąlygomis, kelių gijų trikčių šalinimui ir pakartojamoms kūrimo sistemoms.
Atsiskyrėlis verčia deterministiškai vykdyti savavališkas programas ir veikia kaip atkuriamas paketas. Tai yra, ji hermetiškai izoliuoja programą nuo nedeterminizmo šaltinių, tokių kaip laikas, gijų persipynimas, atsitiktinių skaičių generavimas ir kt. Garantuotas determinizmas yra galingas įrankis ir naudojamas kaip daugelio programų pagrindas, įskaitant lygiagretumo testavimą nepalankiausiomis sąlygomis, įrašymą / pakartojimą, atkuriamą kūrimą ir automatinę lygiagretumo klaidų diagnostiką ir kt.
Hermit negali atskirti svečio programos nuo nedeterminizmo šaltinių, pvz., failų sistemos pakeitimų ar atsakymų iš išorinių tinklų. Vietoj to, norėdamas užtikrinti visišką determinizmą, vartotojas turi pateikti fiksuotą failų sistemos bazinį vaizdą (pavyzdžiui, su Docker) ir išjungti išorinius tinklus.
Apie Atsiskyrėlį
Ermitas leidžia galia sukuria atkuriamą aplinką perimdami sistemos iškvietimus, kai kurie iš jų pakeičiami savo tvarkyklėmis, kurios gamina pastovią išvestį, o kai kurios nukreipiamos į branduolį, o po to nepaliaujami duomenys pašalinami iš išvesties.
Norėdami perimti skambučius Į sistemą, naudojamas karkasas pamišimas, kurio kodą taip pat skelbia „Facebook“. Kad failų sistemos pakeitimai ir tinklo užklausos nepaveiktų vykdymo, vykdymas atliekamas naudojant nejudantį vaizdą failų sistemos ir išjungus prieigą prie išorinių tinklų. Pasiekęs pseudoatsitiktinių skaičių generatorių, Hermit sukuria iš anksto nustatytą seką, kuri kartojama kiekvieną kartą, kai ji vykdoma.
Sudėtingiausias nedeterminizmo šaltinis yra gijų planavimo priemonėje. Branduolio gijų planavimo būdas priklauso nuo daugelio išorinių veiksnių, įskaitant fizinių procesorių ar kitų sistemoje veikiančių gijų, kurioms reikia procesoriaus laiko, skaičių.
Iš sudėtingesnių nenuolatinių įtakų našumui, pabrėžia gijų planavimo priemonę, kurio elgesys priklauso nuo daugelio išorinių veiksnių, tokių kaip procesoriaus branduolių skaičius ir kitų veikiančių gijų buvimas.
Kad būtų užtikrintas kartojamas planuotojo elgesys, visos gijos yra serijinės, susietos su vienu procesoriaus branduoliu ir ta tvarka, kuria valdymas perduodamas gijomis. Kiekvienai gijai leidžiama vykdyti fiksuotą skaičių instrukcijų, po kurių vykdymas sustabdomas ir perkeliamas į kitą giją (ribojimui naudojamas CPU PMU (Performance Monitoring Unit), kuris sustabdo vykdymą po nurodyto skaičiaus sąlyginių šakų).
Diagnozuoti problemų su siūlais dėl lenktynių būklės, Atsiskyrėlis turi režimą, leidžiantį aptikti operacijas, kurios buvo netinkamos ir sukėlė blokadą. Siekiant nustatyti tokias problemas, palyginamos būsenos, kuriose buvo užregistruota teisinga operacija ir nenormalus vykdymo nutraukimas.
Galiausiai, jei jus domina galimybė apie tai sužinoti daugiau, turėtumėte tai žinoti projekto kodas jis parašytas Rust ir platinamas pagal BSD licenciją.
Išsamią informaciją galite patikrinti šią nuorodą.