Facebook publiseer Hermit, 'n gereedskapstel vir herhaalbare programuitvoering

Facebook (verbied in die Russiese Federasie) het die kode van die Hermit-gereedskapstel gepubliseer, wat 'n omgewing vir deterministiese programuitvoering vorm, wat dit moontlik maak om dieselfde resultaat te verkry en die vordering van uitvoering te herhaal deur dieselfde insetdata by verskillende bekendstellings te gebruik. Die projekkode is in Rust geskryf en onder die BSD-lisensie versprei.

Tydens normale uitvoering beïnvloed verskeie vreemde faktore die resultaat, soos die huidige tyd, draadskeduleringskenmerke, virtuele geheue-adresse, data van 'n pseudo-ewekansige getalgenerator en verskeie unieke identifiseerders. Hermit laat jou toe om die program in 'n houer te laat loop waarin hierdie faktore konstant bly op daaropvolgende lopies. Herhaalbare uitvoering, wat vlugtige omgewingsinstellings volledig weergee, kan gebruik word vir foutdiagnose, multi-stadium ontfouting met herhalings, die skep van 'n vaste omgewing vir regressietoetse, strestoetsing, probleemoplossing van multithreading-kwessies en herhaalbare boustelsels.

Facebook publiseer Hermit, 'n gereedskapstel vir herhaalbare programuitvoering

'n Reproduceerbare omgewing word geskep deur stelseloproepe te onderskep, waarvan sommige vervang word met hul eie hanteerders wat 'n konstante resultaat lewer, en sommige word na die kern herlei, waarna die resultaat van nie-aanhoudende data skoongemaak word. Om stelseloproepe te onderskep, word die droomraamwerk gebruik, waarvan die kode ook deur Facebook gepubliseer word. Om te verhoed dat veranderinge in die lêerstelsel en netwerkversoeke die uitvoeringsvordering beïnvloed, word uitvoering uitgevoer met behulp van 'n vaste FS-beeld en met toegang tot eksterne netwerke gedeaktiveer. Wanneer toegang tot die pseudo-ewekansige getalgenerator verkry word, produseer Hermit 'n voorafbepaalde volgorde wat elke keer herhaal word wanneer dit uitgevoer word.

Van die mees komplekse nie-permanente invloede op uitvoering is die draadskeduleerder, wie se gedrag afhang van baie eksterne faktore, soos die aantal SVE-kerne en die teenwoordigheid van ander drade wat loop. Om herhaalbare gedrag van die skeduleerder te verseker, word alle drade geserialiseer, gebind aan slegs een SVE-kern, en in die volgorde waarin beheer na die drade oorgedra word. Elke draad word toegelaat om 'n vaste aantal instruksies uit te voer, waarna die uitvoering stop en na 'n ander draad oorgedra word (om te beperk, word die CPU PMU (Performance Monitoring Unit) gebruik, wat die uitvoering stop na 'n gespesifiseerde aantal voorwaardelike vertakkings).

Om probleme met drade as gevolg van 'n rastoestand te diagnoseer, het Hermit 'n modus om bedrywighede op te spoor wat buite werking was en tot 'n ongeluk gelei het. Om sulke probleme te identifiseer, word 'n vergelyking gemaak van die toestande waarin korrekte werking en abnormale voltooiing van uitvoering aangeteken is.

Bron: opennet.ru

Voeg 'n opmerking