Ermit, un instrument pentru testarea controlată și detectarea erorilor

pustnic

Ermit, ca un container reproductibil, dă o idee despre cum ar fi dacă stiva de sistem ar oferi repetabilitate ca o abstractizare

Facebook a fost dezvăluit recent printr-o publicație, lansarea lui Pustnic, care formează a mediu pentru execuția programului determinist, ceea ce face posibilă obținerea aceluiași rezultat și repetarea procesului de execuție pe diferite lansări folosind aceleași date de intrare.

În timpul execuției normale, diverși factori străini afectează rezultatul, cum ar fi ora curentă, funcțiile de planificare a firelor, adresele de memorie virtuală, datele de la un generator de numere pseudoaleatoare și diverși identificatori unici.

Ermit permite rularea programului într-un container unde acești factori rămân constanți în execuțiile ulterioare. Execuție repetabilă, care reproduce pe deplin configurația mediului volatil, poate fi folosit pentru diagnosticarea erorilor, depanare în mai mulți pași cu iterații, creând un mediu fix pentru testarea regresiei, testarea stresului, depanarea cu mai multe fire și sistemele de compilare repetabile.

Ermit forțează execuția deterministă a programelor arbitrare și acționează ca un înveliș reproductibil. Adică, izolează ermetic programul de surse de non-determinism, cum ar fi sincronizarea, intercalarea firelor, generarea de numere aleatorii etc. Determinismul garantat este un instrument puternic și servește drept bază pentru o serie de aplicații, inclusiv testarea de stres simultan, înregistrarea/reluarea, versiunile reproductibile și diagnosticarea automată a erorilor de concurență și multe altele.

Hermit nu poate izola programul invitat de surse de non-determinism, cum ar fi modificări ale sistemului de fișiere sau răspunsuri de la rețele externe. În schimb, pentru a oferi un determinism complet, utilizatorul trebuie să furnizeze o imagine de bază fixă ​​a sistemului de fișiere (de exemplu, cu Docker) și să dezactiveze rețelele externe.

Despre pustnic

Pustnic permite puterea creează un mediu reproductibil prin interceptarea apelurilor de sistem, dintre care unele sunt înlocuite cu propriile lor handlere care produc rezultate constante, iar unele sunt redirecționate către kernel, după care datele nepersistente sunt eliminate din ieșire.

Pentru a intercepta apeluri Pentru sistem, se folosește cadrul revizuire, al cărui cod este publicat și de Facebook. Pentru a preveni modificările sistemului de fișiere și solicitările de rețea să afecteze progresul execuției, execuția se realizează folosind o imagine statică a sistemului de fișiere și cu accesul la rețele externe dezactivat. Prin accesarea generatorului de numere pseudoaleatoare, Hermit produce o secvență predefinită care se repetă de fiecare dată când este executată.

Cea mai complexă sursă de non-determinism este în planificatorul de fire. Modul în care nucleul programează firele de execuție depinde de mulți factori externi, inclusiv numărul de procesoare fizice sau alte fire de execuție care rulează pe sistem care necesită timp CPU.

Dintre influențele nepermanente mai complexe asupra performanței, evidențiază programatorul de fire, al cărui comportament depinde de mulți factori externi, cum ar fi numărul de nuclee CPU și prezența altor fire de execuție.

Pentru a asigura un comportament repetabil al planificatorului, toate firele sunt serializate, legate la un singur nucleu CPU iar în ordinea în care se trece controlul către fire. Fiecărui thread i se permite să execute un număr fix de instrucțiuni, după care execuția este oprită și transferată la un alt thread (pentru limitare se folosește CPU PMU (Performance Monitoring Unit), care oprește execuția după un anumit număr de ramuri condiționate).

a diagnostica probleme cu firele din cauza unei condiții de cursă, Ermit are un mod pentru a detecta operațiunile care nu erau în funcțiune și a provocat un blocaj. Pentru identificarea unor astfel de probleme se face o comparație între stările în care s-a înregistrat funcționarea corectă și încetarea anormală a execuției.

În cele din urmă, dacă ești interesat să poți afla mai multe despre asta, ar trebui să știi asta codul proiectului este scris în Rust și este distribuit sub licență BSD.

Puteți verifica detaliile în următorul link.


Fii primul care comenteaza

Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: AB Internet Networks 2008 SL
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.