Facebook predstavený nedávno prostredníctvom publikácie, spustenia pustovník, ktorý tvorí a prostredie na vykonávanie deterministického programu, čo umožňuje dosiahnuť rovnaký výsledok a opakovať proces vykonávania pri rôznych spusteniach s použitím rovnakých vstupných údajov.
Počas normálneho vykonávania ovplyvňujú výstup rôzne vonkajšie faktory, ako napríklad aktuálny čas, funkcie plánovania vlákien, adresy virtuálnej pamäte, údaje z generátora pseudonáhodných čísel a rôzne jedinečné identifikátory.
Hermit umožňuje spustiť program v kontajneri kde tieto faktory zostávajú v nasledujúcich behoch konštantné. Opakovateľné vykonávanie, ktoré plne reprodukuje konfiguráciu nestáleho prostredia, možno použiť na diagnostiku chýb, ladenie viackrokové s iteráciami, vytváranie pevného prostredia pre regresné testovanie, stresové testovanie, viacvláknové riešenie problémov a opakovateľné zostavovacie systémy.
Hermit si vynucuje deterministické vykonávanie ľubovoľných programov a pôsobí ako reprodukovateľný obal. To znamená, že hermeticky izoluje program od zdrojov nedeterminizmu, ako je časovanie, prekladanie vlákien, generovanie náhodných čísel atď. Zaručený determinizmus je výkonný nástroj a slúži ako základ pre množstvo aplikácií vrátane záťažového testovania súbežnosti, záznamu/prehrávania, reprodukovateľných zostavení a automatickej diagnostiky chýb súbežnosti a ďalších.
Hermit nemôže izolovať hosťovský program od zdrojov nedeterminizmu, ako sú zmeny systému súborov alebo reakcie z externých sietí. Namiesto toho, aby sa dosiahol úplný determinizmus, musí používateľ poskytnúť pevný základný obraz systému súborov (napríklad pomocou Docker) a vypnúť externé siete.
O Pustovníkovi
pustovník umožňuje napájanie vytvára reprodukovateľné prostredie zachytením systémových volaní, z ktorých niektoré sú nahradené vlastnými obslužnými programami, ktoré produkujú konštantný výstup, a niektoré z nich sú presmerované do jadra, po ktorom sú neperzistentné dáta odstránené z výstupu.
Na odpočúvanie hovorov Do systému, používa sa rámec snenie, ktorej kód zverejňuje aj Facebook. Ak chcete zabrániť tomu, aby zmeny systému súborov a sieťové požiadavky ovplyvňovali priebeh vykonávania, vykonávanie sa vykonáva pomocou statického obrázka súborového systému a so zakázaným prístupom k externým sieťam. Prístupom k generátoru pseudonáhodných čísel Hermit vytvára preddefinovanú sekvenciu, ktorá sa opakuje pri každom spustení.
Najkomplexnejší zdroj nedeterminizmu je v plánovači vlákien. Spôsob, akým jadro plánuje vlákna, závisí od mnohých vonkajších faktorov vrátane počtu fyzických CPU alebo iných vlákien spustených v systéme, ktoré vyžadujú čas CPU.
Zo zložitejších netrvalých vplyvov na výkon zvýrazní 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ť ďalších spustených vlákien.
Na zabezpečenie opakovateľného správania plánovača, všetky vlákna sú serializované, viazané na jedno jadro CPU a v poradí, v akom sa riadenie odovzdáva vláknam. Každé vlákno má povolené vykonávať pevný počet inštrukcií, po ktorých sa vykonávanie zastaví a prenesie do iného vlákna (na obmedzenie sa používa CPU PMU (Performance Monitoring Unit), ktorá zastaví vykonávanie po zadanom počte podmienených vetiev).
Na diagnostiku problémy s vláknami kvôli rasovému stavu, Hermit má režim na detekciu operácií, ktoré boli mimo prevádzky a spôsobila blokádu. Na identifikáciu takýchto problémov sa vykoná porovnanie medzi stavmi, v ktorých bola zaregistrovaná správna operácia a abnormálne ukončenie vykonávania.
Nakoniec, ak máte záujem dozvedieť sa o tom viac, mali by ste to vedieť kód projektu je napísaný v jazyku Rust a je distribuovaný pod licenciou BSD.
Podrobnosti si môžete skontrolovať v nasledujúci odkaz.