Facebook julkaisee Hermitin, työkalupakin toistettavan ohjelman suorittamiseen

Facebook (Venäjän federaatiossa kielletty) julkaisi Hermit-työkalupaketin koodin, joka luo ympäristön ohjelmien deterministiselle suorittamiselle, mahdollistaen eri ajojen saman tuloksen saavuttamiseksi ja suorituksen toistamisen samoilla syöttötiedoilla. Projektikoodi on kirjoitettu Rust-kielellä ja sitä jaetaan BSD-lisenssillä.

Normaalin suorituksen aikana tulokseen vaikuttavat useat ulkopuoliset tekijät, kuten nykyinen aika, säikeen ajoitus, virtuaalimuistiosoitteet, näennäissatunnaislukugeneraattorin tiedot ja erilaiset yksilölliset tunnisteet. Hermit mahdollistaa ohjelman suorittamisen säiliössä, jossa nämä tekijät pysyvät muuttumattomina seuraavien ajojen aikana. Toistettava suoritus, joka toistaa täysin ympäristön ei-pysyvät parametrit, voidaan käyttää virheiden diagnosointiin, monivaiheiseen virheenkorjaukseen toistuvilla ajoilla, kiinteän ympäristön luomiseen regressiotesteille, stressitestauksille, monisäikeisten ongelmien tunnistamiseen ja toistettavissa rakennusjärjestelmissä. .

Facebook julkaisee Hermitin, työkalupakin toistettavan ohjelman suorittamiseen

Toistettava ympäristö luodaan sieppaamalla järjestelmäkutsuja, joista osa korvataan omilla käsittelijöillä, jotka tuottavat pysyvän tuloksen, ja osa ohjataan ytimeen, minkä jälkeen tuloksesta poistetaan ei-pysyvä data. Järjestelmäpuheluiden sieppaamiseen käytetään haaveilukehystä, jonka koodin myös Facebook julkaisee. Jotta tiedostojärjestelmän muutokset ja verkkopyynnöt eivät vaikuttaisi suorituksen etenemiseen, suoritus suoritetaan käyttämällä kiinteää FS-otosta ja pääsy ulkoisiin verkkoihin on estetty. Päästäessään pseudosatunnaislukugeneraattoriin Hermit tuottaa ennalta määritellyn sekvenssin, joka toistetaan joka kerta, kun se käynnistetään.

Yksi monimutkaisimmista muuttuvista vaikutuksista suorituksen etenemiseen on säikeen ajoitus, jonka käyttäytyminen riippuu monista ulkoisista tekijöistä, kuten suorittimen ytimien määrästä ja muiden suorittavien säikeiden läsnäolosta. Aikataulun toistettavan toiminnan varmistamiseksi kaikki säikeet suoritetaan sarjassa vain yhden CPU-ytimen yhteydessä ja säilytetään järjestys, jossa ohjaus siirtyy säikeille. Kukin säiettä saa suorittaa kiinteän määrän käskyjä, minkä jälkeen suoritus pysähtyy ja siirretään toiseen säikeeseen (CPU PMU:n (Performance Monitoring Unit) rajoittamiseksi, joka pysäyttää suorituksen tietyn määrän ehdollisia haaroja jälkeen).

Kilpailuolosuhteista johtuvien lankojen ongelmien diagnosoimiseksi Hermitillä on tila sellaisten toimintojen tunnistamiseen, joiden suoritusjärjestys oli epäkunnossa ja johti epänormaaliin sammutukseen. Tällaisten ongelmien tunnistamiseksi verrataan niitä tiloja, joissa oikea toiminta ja suorituksen epänormaali lopettaminen on tallennettu.

Lähde: opennet.ru

Lisää kommentti