Facebook vydáva Hermit, súpravu nástrojov na opakovateľné vykonávanie programov

Facebook (zakázaný v Ruskej federácii) zverejnil kód pre sadu nástrojov Hermit, ktorá vytvára prostredie pre deterministické spúšťanie programov, umožňujúce rôzne spúšťanie na dosiahnutie rovnakého výsledku a opakovanie spúšťania s použitím rovnakých vstupných údajov. Kód projektu je napísaný v jazyku Rust a je distribuovaný pod licenciou BSD.

Počas normálneho vykonávania je výsledok ovplyvnený rôznymi vonkajšími faktormi, ako je aktuálny čas, plánovanie vlákien, adresy virtuálnej pamäte, údaje z generátora pseudonáhodných čísel a rôzne jedinečné identifikátory. Hermit vám umožňuje spustiť program v kontajneri, v ktorom tieto faktory zostanú konštantné počas nasledujúcich spustení. Opakovateľné vykonávanie, ktoré plne reprodukuje neperzistentné parametre prostredia, je možné použiť na diagnostiku chýb, viackrokové ladenie s opakovaným spustením, vytvorenie pevného prostredia pre regresné testy, záťažové testovanie, identifikáciu problémov s multithreadingom a v systémoch s opakovaným zostavovaním .

Facebook vydáva Hermit, súpravu nástrojov na opakovateľné vykonávanie programov

Reprodukovateľné prostredie sa vytvára zachytením systémových volaní, z ktorých niektoré sú nahradené vlastnými obslužnými programami, ktoré produkujú trvalý výsledok, a niektoré sú presmerované do jadra, po ktorom je výsledok vyčistený od netrvalých údajov. Na odpočúvanie systémových hovorov sa používa rámec reverie, ktorého kód zverejňuje aj Facebook. Aby zmeny v súborovom systéme a sieťové požiadavky neovplyvnili priebeh vykonávania, vykonávanie sa vykonáva pomocou pevného obrazu FS a so zakázaným prístupom k externým sieťam. Pri prístupe ku generátoru pseudonáhodných čísel Hermit vytvorí preddefinovanú sekvenciu, ktorá sa opakuje pri každom spustení.

Jedným z najkomplexnejších premenných vplyvov na priebeh vykonávania je plánovač vlákien, ktorého správanie závisí od mnohých vonkajších faktorov, ako je počet jadier CPU a prítomnosť iných vykonávaných vlákien. Aby sa zabezpečilo opakovateľné správanie plánovača, všetky vlákna sa spúšťajú sériovo v spojení iba s jedným jadrom CPU a zachováva sa poradie, v ktorom sa riadenie prenáša na vlákna. Každé vlákno môže vykonávať pevný počet inštrukcií, po ktorých sa vykonávanie zastaví a prenesie sa do iného vlákna (na obmedzenie CPU PMU (Performance Monitoring Unit), ktorá zastaví vykonávanie po zadanom počte podmienených vetiev).

Na diagnostiku problémov s vláknami v dôsledku rasových podmienok má Hermit režim na identifikáciu operácií, ktorých príkaz na vykonanie bol mimo prevádzky a viedol k abnormálnemu vypnutiu. Na identifikáciu takýchto problémov sa vykoná porovnanie stavov, v ktorých bola zaznamenaná správna prevádzka a abnormálne ukončenie vykonávania.

Zdroj: opennet.ru

Pridať komentár