Facebook publicerar Hermit, en verktygslåda för repeterbar programexekvering

Facebook (förbjudet i Ryska federationen) har publicerat koden för Eremit-verktygslådan, som bildar en miljö för deterministisk programexekvering, som gör det möjligt att erhålla samma resultat och upprepa exekveringsförloppet med samma indata vid olika lanseringar. Projektkoden är skriven i Rust och distribueras under BSD-licensen.

Under normal exekvering påverkar olika främmande faktorer resultatet, såsom aktuell tid, trådschemaläggningsfunktioner, virtuella minnesadresser, data från en pseudoslumptalsgenerator och olika unika identifierare. Hermit låter dig köra programmet i en container där dessa faktorer förblir konstanta vid efterföljande körningar. Repeterbar exekvering, som helt återskapar flyktiga miljöinställningar, kan användas för feldiagnos, flerstegsfelsökning med omkörningar, skapa en fast miljö för regressionstester, stresstestning, felsökning av flertrådsproblem och repeterbara byggsystem.

Facebook publicerar Hermit, en verktygslåda för repeterbar programexekvering

En reproducerbar miljö skapas genom att avlyssna systemanrop, av vilka en del ersätts med sina egna hanterare som ger ett konstant resultat, och en del omdirigeras till kärnan, varefter resultatet rensas från icke-persistent data. För att avlyssna systemsamtal används reverie-ramverket, vars kod också publiceras av Facebook. För att förhindra att ändringar i filsystemet och nätverksbegäranden påverkar exekveringsförloppet, utförs exekveringen med hjälp av en fast FS-avbildning och med åtkomst till externa nätverk inaktiverad. Vid åtkomst till pseudo-slumptalsgeneratorn producerar Hermit en fördefinierad sekvens som upprepas varje gång den körs.

Bland de mest komplexa icke-permanenta influenserna på exekvering är trådschemaläggaren, vars beteende beror på många externa faktorer, såsom antalet CPU-kärnor och närvaron av andra trådar som körs. För att säkerställa repeterbart beteende hos schemaläggaren serialiseras alla trådar, bundna till endast en CPU-kärna och i den ordning som kontrollen skickas till trådarna. Varje tråd tillåts exekvera ett fast antal instruktioner, varefter exekveringen stoppas och överförs till en annan tråd (för att begränsa används CPU PMU (Performance Monitoring Unit), som stoppar exekveringen efter ett specificerat antal villkorliga förgreningar).

För att diagnostisera problem med trådar på grund av ett racetillstånd har Hermit ett läge för att upptäcka operationer som var ur funktion och ledde till en krasch. För att identifiera sådana problem görs en jämförelse av tillstånden i vilka korrekt drift och onormalt slutförande av exekveringen registrerades.

Källa: opennet.ru

Lägg en kommentar