Facebook odhalen nedávno prostřednictvím publikace, spuštění Pustovník, který tvoří a prostředí pro provádění deterministického programu, což umožňuje dosáhnout stejného výsledku a opakovat proces provádění při různých spuštěních pomocí stejných vstupních dat.
Během normálního provádění ovlivňují výstup různé vnější faktory, jako je aktuální čas, funkce plánování vláken, adresy virtuální paměti, data z generátoru pseudonáhodných čísel a různé jedinečné identifikátory.
Hermit umožňuje spustit program v kontejneru kde tyto faktory zůstávají v následujících cyklech konstantní. Opakovatelné provádění, které plně reprodukuje konfiguraci nestálého prostředí, lze použít pro diagnostiku chyb, ladění vícekrokové s iteracemi, vytvoření pevného prostředí pro regresní testování, zátěžové testování, vícevláknové řešení problémů a opakovatelné sestavovací systémy.
Hermit vynucuje deterministické provádění libovolných programů a funguje jako reprodukovatelný obal. To znamená, že hermeticky izoluje program od zdrojů nedeterminismu, jako je časování, prokládání vláken, generování náhodných čísel atd. Zaručený determinismus je mocný nástroj a slouží jako základ pro řadu aplikací, včetně zátěžového testování souběžnosti, záznamu/přehrávání, reprodukovatelných sestav a automatické diagnostiky chyb souběžnosti a dalších.
Hermit nemůže izolovat hostující program od zdrojů nedeterminismu, jako jsou změny systému souborů nebo reakce z externích sítí. Místo toho, aby byl zajištěn úplný determinismus, musí uživatel poskytnout pevný základní obraz systému souborů (například pomocí Dockeru) a zakázat externí sítě.
O Hermitovi
Pustovník umožňuje napájení vytváří reprodukovatelné prostředí zachycením systémových volání, z nichž některá jsou nahrazena vlastními obslužnými rutinami, které produkují konstantní výstup, a některá z nich jsou přesměrována do jádra, načež jsou neperzistentní data z výstupu odstraněna.
K odposlechu hovorů do systému, používá se framework snění, jejíž kód zveřejňuje i Facebook. Chcete-li zabránit tomu, aby změny systému souborů a síťové požadavky ovlivnily průběh provádění, provedení se provádí pomocí statického obrazu souborového systému a se zakázaným přístupem k externím sítím. Přístupem ke generátoru pseudonáhodných čísel Hermit vytváří předdefinovanou sekvenci, která se opakuje pokaždé, když je spuštěna.
Nejsložitější zdroj nedeterminismu je v plánovači vláken. Způsob, jakým jádro plánuje vlákna, závisí na mnoha vnějších faktorech, včetně počtu fyzických CPU nebo jiných vláken běžících v systému, která vyžadují čas CPU.
Ze složitějších netrvalých vlivů na výkon zvýrazní plánovač vláken, jehož chování závisí na mnoha vnějších faktorech, jako je počet jader CPU a přítomnost dalších běžících vláken.
Aby bylo zajištěno opakovatelné chování plánovače, všechna vlákna jsou serializovaná, vázána na jedno jádro CPU a v pořadí, v jakém je řízení předáno vláknům. Každému vláknu je povoleno provádět pevně stanovený počet instrukcí, načež se provádění zastaví a přenese do jiného vlákna (pro omezení se používá CPU PMU (Performance Monitoring Unit), která zastaví provádění po zadaném počtu podmíněných větví).
diagnostikovat problémy s vlákny kvůli rasovému stavu, Hermite má režim pro detekci operací, které byly mimo provoz a způsobil blokádu. Aby bylo možné takové problémy identifikovat, je provedeno srovnání mezi stavy, ve kterých byla zaregistrována správná operace a abnormální ukončení provádění.
A konečně, pokud máte zájem se o tom dozvědět více, měli byste to vědět kód projektu je napsán v Rustu a je distribuován pod licencí BSD.
Podrobnosti můžete zkontrolovat v následující odkaz.