Facebook publica Hermit, un toolkit per l'esecuzione di prugrammi ripetibili

Facebook (proibitu in a Federazione Russa) hà publicatu u codice per l'Hermit toolkit, chì crea un ambiente per l'esekzione deterministica di i prugrammi, chì permette diverse corse per ottene u stessu risultatu è ripetiri l'esekzione cù a stessa data input. U codice di u prughjettu hè scrittu in Rust è hè distribuitu sottu a licenza BSD.

Durante l'esekzione normale, u risultatu hè influinzatu da una varietà di fatturi estranei, cum'è l'ora attuale, a pianificazione di u filu, l'indirizzi di memoria virtuale, i dati da u generatore di numeri pseudoaleatoriu è parechji identificatori unichi. Hermit permette di eseguisce un prugramma in un cuntainer in quale questi fattori restanu custanti in e corse successive. Esecuzione ripetibile, chì riproduce cumplettamente i paràmetri non persistenti di l'ambiente, pò esse aduprata per u diagnosticu d'errore, debugging multi-step cù runs ripetuti, creendu un ambiente fissu per teste di regressione, test di stress, identificà i prublemi cù multithreading è in sistemi di costruzione ripetibili. .

Facebook publica Hermit, un toolkit per l'esecuzione di prugrammi ripetibili

Un ambiente riproducibile hè creatu da l'interceptazione di i chjami di u sistema, alcuni di i quali sò rimpiazzati cù i so propri manipulatori chì pruduceranu un risultatu permanente, è alcuni sò rediretti à u kernel, dopu chì u risultatu hè sguassatu di dati micca persistenti. Per intercepte e chjama di u sistema, hè utilizatu u framework di reverie, u codice di quale hè ancu publicatu da Facebook. Per prevene i cambiamenti in u sistema di fugliale è e dumande di a rete da affettà u prugressu di l'esekzione, l'esekzione hè realizata cù una maghjina FS fissa è cù l'accessu à e rete esterne disattivatu. Quandu accede à u generatore di numeri pseudo-aleatoriu, Hermit produce una sequenza predefinita chì hè ripetuta ogni volta chì hè lanciata.

Una di l'influenzi variabili più cumplessi nantu à u prugressu di l'esekzione hè u pianificatore di filu, chì u so cumpurtamentu dipende da parechji fatturi esterni, cum'è u nùmeru di core di CPU è a presenza di altri filamenti esecutivi. Per assicurà un cumpurtamentu ripetitivu di u pianificatore, tutti i fili sò eseguiti in serie in cunnessione cù un solu core CPU è mantene l'ordine in quale u cuntrollu hè trasferitu à i filamenti. Ogni filu hè permessu di eseguisce un numeru fissu di struzzioni, dopu à quale l'esekzione si ferma è hè trasferitu à un altru filu (per limità a CPU PMU (Performance Monitoring Unit), chì ferma l'esekzione dopu à un numeru specificu di rami cundiziunali).

Per diagnosticà i prublemi cù i filamenti per via di e cundizioni di razza, Hermit hà un modu per identificà l'operazioni chì l'ordine d'esekzione era fora di l'ordine è hà purtatu à un arrestu anormale. Per identificà tali prublemi, una paraguna hè fatta di i stati in quale l'operazione curretta è a terminazione anormale di l'esekzione sò stati registrati.

Source: opennet.ru

Add a comment