Facebook publikon Hermit, një paketë veglash për ekzekutimin e programit të përsëritur

Facebook (i ndaluar në Federatën Ruse) publikoi kodin për paketën e veglave Hermit, i cili krijon një mjedis për ekzekutimin determinist të programeve, duke lejuar ekzekutime të ndryshme për të arritur të njëjtin rezultat dhe për të përsëritur ekzekutimin duke përdorur të njëjtat të dhëna hyrëse. Kodi i projektit është shkruar në Rust dhe shpërndahet nën licencën BSD.

Gjatë ekzekutimit normal, rezultati ndikohet nga një sërë faktorësh të jashtëm, të tillë si koha aktuale, planifikimi i temave, adresat e memories virtuale, të dhënat nga gjeneruesi i numrave pseudorandom dhe identifikuesit e ndryshëm unikë. Hermit ju lejon të ekzekutoni një program në një kontejner në të cilin këta faktorë mbeten konstant gjatë ekzekutimeve të mëvonshme. Ekzekutimi i përsëritshëm, i cili riprodhon plotësisht parametrat jo të vazhdueshëm të mjedisit, mund të përdoret për diagnostikimin e gabimeve, korrigjimin me shumë hapa me ekzekutime të përsëritura, krijimin e një mjedisi fiks për testet e regresionit, testimin e stresit, identifikimin e problemeve me multithreading dhe në sistemet e ndërtimit të përsëritshëm .

Facebook publikon Hermit, një paketë veglash për ekzekutimin e programit të përsëritur

Një mjedis i riprodhueshëm krijohet duke përgjuar thirrjet e sistemit, disa prej të cilave zëvendësohen me mbajtësit e tyre që prodhojnë një rezultat të përhershëm, dhe disa ridrejtohen në kernel, pas së cilës rezultati pastrohet nga të dhënat jo të qëndrueshme. Për të përgjuar thirrjet e sistemit, përdoret kuadri reverie, kodi i të cilit publikohet edhe nga Facebook. Për të parandaluar që ndryshimet në sistemin e skedarëve dhe kërkesat e rrjetit të ndikojnë në përparimin e ekzekutimit, ekzekutimi kryhet duke përdorur një imazh fiks FS dhe me akses në rrjetet e jashtme të çaktivizuar. Kur hyn në gjeneratorin e numrave pseudo të rastësishëm, Hermit prodhon një sekuencë të paracaktuar që përsëritet sa herë që lëshohet.

Një nga ndikimet më komplekse të variablave në progresin e ekzekutimit është planifikuesi i thread-it, sjellja e të cilit varet nga shumë faktorë të jashtëm, si numri i bërthamave të CPU-së dhe prania e thread-ve të tjerë ekzekutues. Për të siguruar sjellje të përsëritshme të planifikuesit, të gjitha thread-et ekzekutohen në mënyrë serike në lidhje me vetëm një bërthamë të CPU-së dhe duke ruajtur rendin në të cilin kontrolli transferohet në thread. Çdo thread lejohet të ekzekutojë një numër fiks instruksionesh, pas së cilës ekzekutimi ndalon dhe transferohet në një thread tjetër (për të kufizuar CPU PMU (Njësia e Monitorimit të Performancës), e cila ndalon ekzekutimin pas një numri të caktuar degësh të kushtëzuara).

Për të diagnostikuar problemet me fijet për shkak të kushteve të garës, Hermit ka një mënyrë për identifikimin e operacioneve, rendi i ekzekutimit të të cilave ishte jashtë rregullit dhe çoi në një mbyllje jonormale. Për të identifikuar probleme të tilla, bëhet një krahasim i gjendjeve në të cilat është regjistruar funksionimi i saktë dhe përfundimi jonormal i ekzekutimit.

Burimi: opennet.ru

Shto një koment