Facebook objavljuje Hermit, komplet alata za ponovljivo izvršavanje programa

Facebook (zabranjen u Ruskoj Federaciji) je objavio kod Hermit toolkita, koji formira okruženje za determinističko izvršavanje programa, koje omogućava dobijanje istog rezultata i ponavljanje napretka izvršenja koristeći iste ulazne podatke pri različitim pokretanjima. Kod projekta je napisan u Rustu i distribuiran pod BSD licencom.

Tokom normalnog izvršavanja, različiti vanjski faktori utiču na rezultat, kao što je trenutno vrijeme, funkcije raspoređivanja niti, adrese virtuelne memorije, podaci iz generatora pseudo-slučajnih brojeva i različiti jedinstveni identifikatori. Hermit vam omogućava da pokrenete program u kontejneru u kojem ovi faktori ostaju konstantni u narednim izvođenjima. Ponovljivo izvršavanje, koje u potpunosti reprodukuje promjenjive postavke okruženja, može se koristiti za dijagnozu grešaka, otklanjanje grešaka u više faza s ponovnim izvođenjem, kreiranje fiksnog okruženja za regresijske testove, testiranje stresa, rješavanje problema s više niti i ponovljive sisteme izgradnje.

Facebook objavljuje Hermit, komplet alata za ponovljivo izvršavanje programa

Reproducibilno okruženje se stvara presretanjem sistemskih poziva, od kojih se neki zamjenjuju vlastitim rukovateljima koji proizvode konstantan rezultat, a neki se preusmjeravaju na kernel, nakon čega se rezultat briše od nepostojanih podataka. Za presretanje sistemskih poziva koristi se reverie framework, čiji kod objavljuje i Facebook. Kako bi se spriječilo da promjene u sistemu datoteka i mrežnim zahtjevima utiču na napredak izvršavanja, izvršenje se izvodi pomoću fiksne FS slike i sa onemogućenim pristupom vanjskim mrežama. Kada pristupa generatoru pseudo-slučajnih brojeva, Hermit proizvodi unapred definisani niz koji se ponavlja svaki put kada se pokrene.

Među najkompleksnijim netrajnim uticajima na izvršenje je planer niti, čije ponašanje zavisi od mnogih spoljnih faktora, kao što je broj jezgara CPU-a i prisustvo drugih pokrenutih niti. Kako bi se osiguralo ponovljivo ponašanje planera, sve niti su serijalizirane, vezane samo za jednu jezgru CPU-a i redoslijedom kojim se kontrola prenosi na niti. Svakoj niti je dozvoljeno da izvrši fiksni broj instrukcija, nakon čega se izvršenje zaustavlja i prenosi na drugu nit (za ograničenje koristi se CPU PMU (Performance Monitoring Unit), koja zaustavlja izvršenje nakon određenog broja uslovnih grananja).

Za dijagnosticiranje problema s nitima zbog stanja trke, Hermit ima način za otkrivanje operacija koje nisu bile u redu i dovele do pada. Da bi se identifikovali takvi problemi, vrši se poređenje stanja u kojima je zabeležen ispravan rad i nenormalan završetak izvršenja.

izvor: opennet.ru

Dodajte komentar