Facebook objavljuje Hermit, alat za ponovljivo izvršavanje programa

Facebook (zabranjen u Ruskoj Federaciji) objavio je kod za Hermit toolkit, koji stvara okruženje za determinističko izvođenje programa, dopuštajući različitim izvođenjima da se postigne isti rezultat i ponovi izvođenje koristeći iste ulazne podatke. Projektni kod je napisan u Rustu i distribuira se pod BSD licencom.

Tijekom normalnog izvođenja, na rezultat utječu različiti vanjski faktori, kao što su trenutno vrijeme, raspoređivanje niti, adrese virtualne memorije, podaci iz generatora pseudoslučajnih brojeva i razni jedinstveni identifikatori. Hermit vam omogućuje pokretanje programa u spremniku u kojem ovi faktori ostaju konstantni tijekom sljedećih pokretanja. Ponovljivo izvođenje, koje u potpunosti reproducira nepostojane parametre okruženja, može se koristiti za dijagnozu pogrešaka, otklanjanje pogrešaka u više koraka s ponovljenim izvođenjima, stvaranje fiksnog okruženja za regresijske testove, testiranje otpornosti na stres, identificiranje problema s višenitnošću i u ponovljivim sustavima izgradnje .

Facebook objavljuje Hermit, alat za ponovljivo izvršavanje programa

Reproducibilno okruženje stvara se presretanjem sistemskih poziva, od kojih se neki zamjenjuju vlastitim rukovateljima koji proizvode trajni rezultat, a neki se preusmjeravaju na kernel, nakon čega se rezultat briše od nepostojanih podataka. Za presretanje sistemskih poziva koristi se okvir reverie čiji kod također objavljuje Facebook. Kako bi se spriječilo da promjene u datotečnom sustavu i mrežnim zahtjevima utječu na napredak izvršavanja, izvršavanje se izvodi pomoću fiksne slike FS-a i s onemogućenim pristupom vanjskim mrežama. Prilikom pristupa generatoru pseudoslučajnih brojeva, Hermit proizvodi unaprijed definirani niz koji se ponavlja svaki put kada se pokrene.

Jedan od najsloženijih varijabli utjecaja na napredak izvršenja je planer niti, čije ponašanje ovisi o mnogim vanjskim čimbenicima, kao što je broj CPU jezgri i prisutnost drugih izvršnih niti. Kako bi se osiguralo ponovljivo ponašanje planera, sve se niti izvršavaju serijski u vezi sa samo jednom CPU jezgrom i održavajući redoslijed kojim se kontrola prenosi na niti. Svakoj dretvi dopušteno je izvršiti fiksni broj instrukcija, nakon čega se izvođenje zaustavlja i prenosi na drugu drevu (kako bi se ograničio CPU PMU (Performance Monitoring Unit), koji zaustavlja izvođenje nakon određenog broja uvjetnih grananja).

Za dijagnosticiranje problema s nitima zbog uvjeta utrke, Hermit ima način rada za identificiranje operacija čiji redoslijed izvršenja nije bio u redu i doveo je do abnormalnog gašenja. Da bi se identificirali takvi problemi, napravljena je usporedba stanja u kojima su zabilježeni ispravan rad i abnormalni prekid izvršenja.

Izvor: opennet.ru

Dodajte komentar