Facebook publicē Hermit — rīku komplektu atkārtojamai programmas izpildei

Facebook (Krievijas Federācijā aizliegts) publicēja Hermit rīku komplekta kodu, kas rada vidi programmu deterministiskai izpildei, ļaujot dažādām palaišanām sasniegt vienu un to pašu rezultātu un atkārtot izpildi, izmantojot vienus un tos pašus ievades datus. Projekta kods ir rakstīts Rust un tiek izplatīts saskaņā ar BSD licenci.

Parastās izpildes laikā rezultātu ietekmē dažādi ārēji faktori, piemēram, pašreizējais laiks, pavedienu plānošana, virtuālās atmiņas adreses, dati no pseidogadījuma skaitļu ģeneratora un dažādi unikāli identifikatori. Hermit ļauj palaist programmu konteinerā, kurā šie faktori paliek nemainīgi turpmākajās palaistībās. Atkārtojama izpilde, kas pilnībā reproducē vides nepastāvīgos parametrus, var tikt izmantota kļūdu diagnostikai, daudzpakāpju atkļūdošanai ar atkārtotām palaišanām, fiksētas vides izveidošanai regresijas testiem, stresa testiem, problēmu identificēšanai ar daudzpavedienu un atkārtojamās būvēšanas sistēmās. .

Facebook publicē Hermit — rīku komplektu atkārtojamai programmas izpildei

Reproducējama vide tiek izveidota, pārtverot sistēmas izsaukumus, no kuriem daži tiek aizstāti ar saviem apstrādātājiem, kas rada pastāvīgu rezultātu, un daži tiek novirzīti uz kodolu, pēc tam rezultāts tiek notīrīts no nepastāvīgiem datiem. Sistēmas zvanu pārtveršanai tiek izmantots sapņu ietvars, kura kodu arī publicē Facebook. Lai failu sistēmas izmaiņas un tīkla pieprasījumi neietekmētu izpildes gaitu, izpilde tiek veikta, izmantojot fiksētu FS attēlu un atspējojot piekļuvi ārējiem tīkliem. Piekļūstot pseidogadījuma skaitļu ģeneratoram, Hermit izveido iepriekš noteiktu secību, kas tiek atkārtota katru reizi, kad tā tiek palaista.

Viena no vissarežģītākajām mainīgajām ietekmēm izpildes gaitu ir pavedienu plānotājs, kura darbība ir atkarīga no daudziem ārējiem faktoriem, piemēram, CPU kodolu skaita un citu izpildes pavedienu klātbūtnes. Lai nodrošinātu atkārtotu plānotāja darbību, visi pavedieni tiek izpildīti sērijveidā tikai ar vienu CPU kodolu un saglabājot secību, kādā vadība tiek nodota pavedieniem. Katram pavedienam ir atļauts izpildīt noteiktu skaitu instrukciju, pēc kurām izpilde apstājas un tiek pārsūtīta uz citu pavedienu (lai ierobežotu CPU PMU (Performance Monitoring Unit), kas aptur izpildi pēc noteikta skaita nosacīto zaru).

Lai diagnosticētu problēmas ar pavedieniem sacensību apstākļu dēļ, Hermit ir režīms, kas ļauj identificēt darbības, kuru izpildes secība nebija kārtībā un izraisīja neparastu izslēgšanu. Lai identificētu šādas problēmas, tiek salīdzināti stāvokļi, kuros fiksēta pareiza darbība un nenormāla izpildes pārtraukšana.

Avots: opennet.ru

Pievieno komentāru