Facebook predstavljen nedavno kroz publikaciju, lansiranje Pustinjak, koji formira a okruženje za determinističko izvršavanje programa, što omogućava postizanje istog rezultata i ponavljanje procesa izvršenja na različitim pokretanjima koristeći iste ulazne podatke.
Tokom normalnog izvršavanja, različiti vanjski faktori utiču na izlaz, kao što je trenutno vrijeme, funkcije raspoređivanja niti, adrese virtualne memorije, podaci iz generatora pseudoslučajnih brojeva i različiti jedinstveni identifikatori.
Hermit dozvoljava pokretanje programa u kontejneru pri čemu ovi faktori ostaju konstantni u narednim serijama. Ponovljivo izvršenje, koje u potpunosti reproducira konfiguraciju nestabilnog okruženja, može se koristiti za dijagnozu grešaka, otklanjanje grešaka više koraka sa iteracijama, kreiranjem fiksnog okruženja za regresijsko testiranje, testiranje stresa, rešavanje problema sa više niti i ponovljive sisteme izgradnje.
Pustinjak forsira determinističko izvršavanje proizvoljnih programa i djeluje kao ponovljivi omotač. Odnosno, on hermetički izoluje program od izvora nedeterminizma kao što su vremenski raspored, preplitanje niti, generisanje slučajnih brojeva, itd. Garantovani determinizam je moćan alat i služi kao osnova za brojne aplikacije, uključujući testiranje na stres istovremenosti, snimanje/reprodukciju, reproducibilne gradnje i automatsku dijagnozu grešaka istovremenosti i još mnogo toga.
Hermit ne može izolovati gostujući program od izvora nedeterminizma, kao što su promjene sistema datoteka ili odgovori iz vanjskih mreža. Umjesto toga, da bi pružio potpuni determinizam, korisnik mora obezbijediti fiksnu osnovnu sliku sistema datoteka (na primjer, sa Dockerom) i onemogućiti vanjske mreže.
O pustinjaku
Pustinjak omogućava snagu stvara ponovljivo okruženje presretanje sistemskih poziva, od kojih su neki zamijenjeni vlastitim rukovateljima koji proizvode konstantan izlaz, a neki od njih se preusmjeravaju na kernel, nakon čega se nepostojani podaci uklanjaju iz izlaza.
Za presretanje poziva sistemu, koristi se okvir sanjarenje, čiji kod objavljuje i Facebook. Kako biste spriječili da promjene sistema datoteka i mrežni zahtjevi utiču na napredak izvršavanja, izvršenje se izvodi pomoću nepokretne slike sistema datoteka i sa onemogućenim pristupom vanjskim mrežama. Pristupanjem generatoru pseudoslučajnih brojeva, Hermit proizvodi unapred definisani niz koji se ponavlja svaki put kada se izvrši.
Najsloženiji izvor nedeterminizma je u planeru niti. Način na koji kernel raspoređuje niti ovisi o mnogim vanjskim faktorima, uključujući broj fizičkih CPU-a ili drugih niti koje se pokreću na sistemu koje zahtijevaju CPU vrijeme.
Od složenijih netrajnih uticaja na performanse, highlights planer niti, čije ponašanje ovisi o mnogim vanjskim faktorima, kao što su broj jezgara CPU-a i prisustvo drugih pokrenutih niti.
Da bi se osiguralo ponovljivo ponašanje planera, sve niti su serijalizovane, vezane za jedno CPU jezgro i redosledom 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 se koristi CPU PMU (Performance Monitoring Unit) koji zaustavlja izvršenje nakon određenog broja uslovnih grananja).
dijagnosticirati problemi sa nitima zbog stanja trke, pustinjak ima mod za otkrivanje operacija koje nisu bile u redu i izazvao blokadu. Da bi se identifikovali takvi problemi, vrši se poređenje stanja u kojima je registrovan ispravan rad i nenormalan prekid izvršenja.
Konačno, ako ste zainteresirani da saznate više o tome, trebali biste to znati kod projekta napisan je na Rustu i distribuira se pod BSD licencom.
Detalje možete provjeriti u sljedeći link.