Facebook publica Hermit, un conjunt d'eines per a l'execució de programes repetibles

Facebook (prohibit a la Federació Russa) va publicar el codi per al conjunt d'eines Hermit, que crea un entorn per a l'execució determinista de programes, permetent que diferents execucions assoleixin el mateix resultat i es repeteixin l'execució amb les mateixes dades d'entrada. El codi del projecte està escrit en Rust i es distribueix sota la llicència BSD.

Durant l'execució normal, el resultat es veu influenciat per una varietat de factors aliens, com ara l'hora actual, la programació del fil, les adreces de memòria virtual, les dades del generador de números pseudoaleatoris i diversos identificadors únics. Hermit us permet executar un programa en un contenidor en què aquests factors es mantenen constants durant les execucions posteriors. L'execució repetible, que reprodueix completament els paràmetres no persistents de l'entorn, es pot utilitzar per al diagnòstic d'errors, la depuració de diversos passos amb execucions repetides, la creació d'un entorn fix per a proves de regressió, proves d'esforç, identificació de problemes amb multithreading i en sistemes de construcció repetibles. .

Facebook publica Hermit, un conjunt d'eines per a l'execució de programes repetibles

Es crea un entorn reproduïble interceptant les trucades del sistema, algunes de les quals se substitueixen pels seus propis controladors que produeixen un resultat permanent, i d'altres es redirigien al nucli, després del qual el resultat s'esborra de les dades no persistents. Per interceptar les trucades del sistema, s'utilitza el marc de somni, el codi del qual també és publicat per Facebook. Per evitar que els canvis en el sistema de fitxers i les sol·licituds de xarxa afectin el progrés de l'execució, l'execució es realitza mitjançant una imatge FS fixa i amb l'accés a xarxes externes desactivat. En accedir al generador de números pseudoaleatoris, Hermit produeix una seqüència predefinida que es repeteix cada vegada que es llança.

Una de les variables més complexes que influeixen en el progrés de l'execució és el planificador de fils, el comportament del qual depèn de molts factors externs, com ara el nombre de nuclis de CPU i la presència d'altres fils en execució. Per garantir un comportament repetible del planificador, tots els fils s'executen en sèrie en connexió amb només un nucli de CPU i mantenint l'ordre en què el control es transfereix als fils. Cada fil pot executar un nombre fix d'instruccions, després del qual l'execució s'atura i es transfereix a un altre fil (per limitar la CPU PMU (Performance Monitoring Unit), que atura l'execució després d'un nombre especificat de branques condicionals).

Per diagnosticar problemes amb els fils a causa de les condicions de carrera, Hermit té un mode per identificar les operacions l'ordre d'execució de les quals estava fora d'ordre i va provocar un tancament anormal. Per identificar aquests problemes, es fa una comparació dels estats en què es va registrar el funcionament correcte i la terminació anormal de l'execució.

Font: opennet.ru

Afegeix comentari