A Facebook bemutatta a közelmúltban egy publikáción keresztül, a megjelenése Remete, amely a környezet a determinisztikus programvégrehajtáshoz, amely lehetővé teszi ugyanazon eredmény elérését és a végrehajtási folyamat megismétlését különböző indításokon ugyanazon bemeneti adatok felhasználásával.
A normál végrehajtás során különféle külső tényezők befolyásolják a kimenetet, mint például az aktuális idő, a szálütemezési funkciók, a virtuális memóriacímek, az álvéletlenszám-generátorból származó adatok és különféle egyedi azonosítók.
A Hermit lehetővé teszi a program tárolóban való futtatását ahol ezek a tényezők állandóak maradnak a következő futtatások során. Megismételhető végrehajtás, amely teljes mértékben reprodukálja az illékony környezet konfigurációját, használható hibadiagnosztikára, hibakeresésre többlépéses iterációkkal, rögzített környezet létrehozásával a regressziós teszteléshez, stressztesztekhez, többszálú hibaelhárításhoz és megismételhető összeállítású rendszerekhez.
A Remete önkényes programok determinisztikus végrehajtására kényszeríti, és reprodukálható burkolóként működik. Vagyis hermetikusan elszigeteli a programot a nem-determinizmus forrásaitól, mint például az időzítés, a szálak átlapolása, a véletlenszám-generálás stb. A garantált determinizmus hatékony eszköz, és számos alkalmazás alapjául szolgál, beleértve a párhuzamossági stressztesztet, a rögzítést/visszajátszást, a reprodukálható buildeket és a párhuzamossági hibák automatikus diagnosztizálását és még sok mást.
A Hermit nem tudja elkülöníteni a vendégprogramot a nem-determinizmus forrásaitól, például a fájlrendszer változásaitól vagy a külső hálózatok válaszaitól. Ehelyett a teljes meghatározottság érdekében a felhasználónak egy rögzített fájlrendszer alapképet kell megadnia (például a Dockerrel), és le kell tiltania a külső hálózatokat.
Remeteről
Remete lehetővé teszi a teljesítményt, reprodukálható környezetet teremt rendszerhívások elfogásával, amelyek egy részét saját kezelőkre cserélik, amelyek állandó kimenetet produkálnak, egy részét pedig átirányítják a kernelre, ami után eltávolítják a nem állandó adatokat a kimenetről.
Hívások lehallgatására A rendszerhez, keretet használjuk álmodozás, melynek kódját a Facebook is közzéteszi. Annak elkerülése érdekében, hogy a fájlrendszer változásai és a hálózati kérések befolyásolják a végrehajtás előrehaladását, a végrehajtás állókép segítségével történik fájlrendszerben, és a külső hálózatokhoz való hozzáférés le van tiltva. Az álvéletlenszám-generátor elérésével a Hermit egy előre meghatározott sorozatot állít elő, amely minden egyes végrehajtáskor megismétlődik.
A nem-determinizmus legösszetettebb forrása a szálütemezőben található. A kernel szálak ütemezésének módja számos külső tényezőtől függ, beleértve a fizikai CPU-k vagy a rendszeren futó egyéb, CPU-időt igénylő szálak számát.
A teljesítményre gyakorolt összetettebb, nem állandó hatások közül kiemeli a szálütemezőt, amelynek viselkedése számos külső tényezőtől függ, mint például a CPU magjainak száma és más futó szálak jelenléte.
Az ütemező megismételhető viselkedésének biztosítása érdekében, minden szál szerializált, egyetlen CPU maghoz van kötve és abban a sorrendben, ahogy az irányítást átadják a szálaknak. Minden szál fix 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 korlátozáshoz a CPU PMU-t (Performance Monitoring Unit) használják, amely meghatározott számú feltételes elágazás után leállítja a végrehajtást).
diagnosztizálni problémák a menetekkel versenyhelyzet miatt, Remete móddal rendelkezik a nem megfelelő műveletek észlelésére és blokádot okozott. Az ilyen problémák azonosítása érdekében összehasonlítják azokat az állapotokat, amelyekben a helyes működést és a végrehajtás rendellenes leállását regisztrálták.
Végül, ha többet szeretne megtudni róla, akkor ezt tudnia kell a projekt kódja Rust nyelven íródott és a BSD licenc alatt terjesztik.
A részleteket meg tudod nézni a következő link.