Inilathala ng Facebook ang Hermit, isang toolkit para sa paulit-ulit na pagpapatupad ng programa

Ang Facebook (na pinagbawalan sa Russian Federation) ay naglathala ng code para sa Hermit toolkit, na lumilikha ng isang kapaligiran para sa deterministikong pagpapatupad ng mga programa, na nagpapahintulot sa iba't ibang mga pagtakbo upang makamit ang parehong resulta at ulitin ang pagpapatupad gamit ang parehong data ng input. Ang code ng proyekto ay nakasulat sa Rust at ipinamamahagi sa ilalim ng lisensya ng BSD.

Sa panahon ng normal na pagpapatupad, ang resulta ay naiimpluwensyahan ng iba't ibang mga extraneous na salik, tulad ng kasalukuyang oras, pag-iskedyul ng thread, mga virtual memory address, data mula sa pseudorandom number generator, at iba't ibang natatanging identifier. Binibigyang-daan ka ng Hermit na magpatakbo ng isang programa sa isang lalagyan kung saan nananatiling pare-pareho ang mga salik na ito sa mga susunod na pagtakbo. Ang paulit-ulit na execution, na ganap na nagre-reproduce ng mga di-persistent na parameter ng environment, ay maaaring gamitin para sa error diagnosis, multi-step debugging na may paulit-ulit na pagtakbo, paglikha ng fixed environment para sa regression test, stress testing, pagtukoy ng mga problema sa multithreading at sa repeatable build system .

Inilathala ng Facebook ang Hermit, isang toolkit para sa paulit-ulit na pagpapatupad ng programa

Ang isang reproducible na kapaligiran ay nilikha sa pamamagitan ng pagharang sa mga tawag sa system, ang ilan sa mga ito ay pinapalitan ng sarili nilang mga tagapangasiwa na gumagawa ng isang permanenteng resulta, at ang ilan ay na-redirect sa kernel, at pagkatapos ay ang resulta ay na-clear ng hindi patuloy na data. Upang ma-intercept ang mga tawag sa system, ginagamit ang reverie framework, na ang code ay nai-publish din ng Facebook. Upang maiwasan ang mga pagbabago sa file system at mga kahilingan sa network na makaapekto sa pag-unlad ng pagpapatupad, ang pagpapatupad ay isinasagawa gamit ang isang nakapirming FS na imahe at may access sa mga panlabas na network na hindi pinagana. Kapag ina-access ang pseudo-random number generator, gumagawa si Hermit ng paunang natukoy na pagkakasunod-sunod na inuulit sa tuwing ilulunsad ito.

Ang isa sa mga pinaka-kumplikadong variable na impluwensya sa pag-unlad ng pagpapatupad ay ang thread scheduler, na ang pag-uugali ay nakasalalay sa maraming panlabas na mga kadahilanan, tulad ng bilang ng mga core ng CPU at ang pagkakaroon ng iba pang mga executing thread. Upang matiyak ang paulit-ulit na pag-uugali ng scheduler, ang lahat ng mga thread ay isinasagawa nang sunud-sunod na may kaugnayan sa isang CPU core lamang at pinapanatili ang pagkakasunud-sunod kung saan ang kontrol ay inililipat sa mga thread. Ang bawat thread ay pinahihintulutan na magsagawa ng isang nakapirming bilang ng mga tagubilin, pagkatapos ay huminto ang pagpapatupad at inilipat sa isa pang thread (upang limitahan ang CPU PMU (Performance Monitoring Unit), na huminto sa pagpapatupad pagkatapos ng isang tinukoy na bilang ng mga conditional branch).

Upang masuri ang mga problema sa mga thread dahil sa mga kundisyon ng lahi, ang Hermit ay may mode para sa pagtukoy ng mga operasyon na ang utos ng pagpapatupad ay hindi maayos at humantong sa isang hindi normal na pagsasara. Upang matukoy ang mga naturang problema, isang paghahambing ang ginawa ng mga estado kung saan naitala ang tamang operasyon at hindi normal na pagwawakas ng pagpapatupad.

Pinagmulan: opennet.ru

Magdagdag ng komento