A Facebook kiadja a Hermit nevű eszköztárat, amely megismételhető programvégrehajtást tesz lehetővé

A Facebook (az Orosz Föderációban betiltva) közzétette a Hermit eszközkészlet kódját, amely olyan környezetet hoz létre a programok determinisztikus végrehajtásához, amely lehetővé teszi a különböző futtatások számára ugyanazt az eredményt és a végrehajtás megismétlését ugyanazon bemeneti adatok felhasználásával. A projekt kódja Rust nyelven íródott, és a BSD licenc alatt kerül terjesztésre.

A normál végrehajtás során az eredményt számos külső tényező befolyásolja, mint például az aktuális idő, a szál ütemezése, a virtuális memória címei, az álvéletlen számgenerátorból származó adatok és különféle egyedi azonosítók. A Hermit lehetővé teszi egy program futtatását egy tárolóban, amelyben ezek a tényezők állandóak maradnak a következő futtatások során. Az ismételhető végrehajtás, amely teljes mértékben reprodukálja a környezet nem perzisztens paramétereit, használható hibadiagnosztikára, többlépcsős hibakeresésre ismételt futtatással, fix környezet létrehozására regressziós tesztekhez, stressztesztekhez, többszálas és ismételhető problémák azonosításához. rendszereket építeni.

A Facebook kiadja a Hermit nevű eszköztárat, amely megismételhető programvégrehajtást tesz lehetővé

Reprodukálható környezet jön létre a rendszerhívások elfogásával, amelyek egy részét saját kezelőkre cserélik, amelyek állandó eredményt produkálnak, néhányat pedig átirányítanak a kernelbe, majd az eredményt megtisztítják a nem állandó adatoktól. A rendszerhívások lehallgatására a reverie keretrendszert használják, amelynek kódját a Facebook is közzéteszi. Annak elkerülése érdekében, hogy a fájlrendszerben és a hálózati kérésekben bekövetkezett változások befolyásolják a végrehajtás előrehaladását, a végrehajtás rögzített FS-lemezkép használatával és a külső hálózatokhoz való hozzáférés letiltásával történik. Amikor hozzáfér az álvéletlen számgenerátorhoz, a Hermit egy előre meghatározott sorozatot állít elő, amely minden indításkor megismétlődik.

A végrehajtás előrehaladását befolyásoló egyik legösszetettebb változó a szálütemező, amelynek viselkedése számos külső tényezőtől függ, mint például a CPU magok számától és más végrehajtó szálak jelenlététől. Az ütemező megismételhető viselkedésének biztosítása érdekében az összes szálat csak egy CPU maggal kapcsolatban sorosan hajtják végre, és fenntartják azt a sorrendet, amelyben az irányítás átadódik a szálaknak. Minden szál meghatározott számú utasítást hajthat végre, amely után a végrehajtás leáll, és átkerül egy másik szálra (a CPU PMU (Performance Monitoring Unit) korlátozása érdekében, amely meghatározott számú feltételes elágazás után leállítja a végrehajtást).

A versenykörülmények miatti szálakkal kapcsolatos problémák diagnosztizálására a Hermit rendelkezik egy olyan üzemmóddal, amely azonosítja azokat a műveleteket, amelyek végrehajtási sorrendje nem volt rendben, és rendellenes leálláshoz vezetett. Az ilyen problémák azonosításához összehasonlítják azokat az állapotokat, amelyekben a helyes működést és a végrehajtás rendellenes leállását rögzítették.

Forrás: opennet.ru

Hozzászólás