Trendaavat aiheet
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
Tämän viikon päivitys MegaETH-testiverkkoon korjasi vaikeasti tavoitettavan suorituskykyvirheen, joka oli aiheuttanut miniblock-ajan jatkuvan pidentymisen sekvensserin uudelleenkäynnistysten välillä. Tässä on tarina. Se on tarina filosofiastamme – mittaa ja rakenna.
Jos vieraili äskettäin MegaETH:n suorituskyvyn hallintapaneelissa, saatat huomata, että miniblock-aika oli kasvanut kesäkuun 3. päivää edeltävällä viikolla. Itse asiassa tällainen trendi alkaisi heti jokaisen sekvensserin uudelleenkäynnistyksen jälkeen julkisen testiverkon julkaisun jälkeen. Aiemmin sekvensserin toistuvat päivitykset tarkoittivat sitä, että miniblock-aika ei kasvanut millään havaittavissa olevalla määrällä ennen kuin nousutrendi nollattiin. Viimeaikaiset päivitykset eivät kuitenkaan olleet vaatineet sekvensserin uudelleenkäynnistystä, ja trendi jatkui viikkoja. Kesäkuun 3. päivänä minilohkon aika saavutti lähes 100 ms. Koska sekvensserin uudelleenkäynnistykset ovat tulevaisuudessa entistä epätodennäköisempiä kuumien varmuuskopioiden ansiosta, on aika poistaa virhe lopullisesti.
Koska keräämme rutiininomaisesti paljon telemetriatietoja testiverkkoon, tiimi alkoi nopeasti kaivaa. Ensimmäinen löytö oli, että miniblock-ajan pidentyminen kiihtyi ajan myötä – miniblock-aika ei vain kasvanut, vaan se kasvoi yhä nopeammin. Yleensä tällainen oire tarkoittaisi, että kunkin minilohkon rakentamiseen liittyvä työ lisääntyi superlineaarisesti, kun rakennettiin lisää minilohkoja. Ampuimme kuitenkin hypoteesin alas pienen mittauksen ja laskennan jälkeen. Rakensimme miniblock-putken lähes täysin asynkroniseksi EVM:ään nähden, jotta saavutimme mielivaltaisen alhaisen miniblock-ajan. Tämä tarkoittaa, että riippumatta siitä, kuinka paljon aikaa minilohkon rakentaminen kestää, EVM suorittaa transaktioita koko ajan. Näin ollen pidempi minilohkon rakennusaika johtaisi suurempaan transaktioiden määrään minilohkoa kohden, mutta emme havainneet sitä. Ongelma ei siis voi olla minilohkojen rakentamisessa. Koodin huolellinen tarkastelu vahvistaa tämän johtopäätöksen – mikään osa minilohkon rakennusprosessissa ei ole superlineaarista monimutkaisuutta.
Tiimi laajensi etsintöjä, ja todellinen syyllinen nousi nopeasti esiin. EVM-lohkojen tekemiseen kulunut aika oli pidentynyt; lisäksi sitoutumisaika oli täysin lineaarinen edellisen uudelleenkäynnistyksen jälkeen tuotettujen EVM-lohkojen määrään nähden. EVM-lohkoja toimitettaessa EVM-ympäristö, kuten lohkon korkeus, päivitetään, joten EVM:n on keskeytyttävä eikä se voi suorittaa tapahtumia, mikä tarkoittaa, että myöskään minilohkoja ei ole. EVM-lohkojen välillä on kiinteä 1 sekunnin aikaväli. 1 sekunnin budjetissa lineaarisesti kasvava sitoutumisaika johti lineaarisesti lyhenevään transaktioiden kestoon, mikä puolestaan johti lineaarisesti tuotettujen minilohkojen määrän vähenemiseen. Jos otamme sen käänteisarvon, saamme keskimääräisen miniblock-ajan, joka on kääntäen verrannollinen aikaan. Se on juuri se toimintomuoto, jonka näimme suorituskyvyn kojelaudassa. Matematiikka tarkistui.
Siinä vaiheessa tiesimme tarkalleen, mitä etsiä: jotakin proseduuria, jonka työmäärä kasvaa lineaarisesti ajan myötä siinä koodin osassa, joka käsittelee EVM-lohkojen sitomista. Muu työ oli suoraviivaista. Tiimi ajoi päivitystä tällä viikolla, eikä miniblock-aika ole hiipinyt.
Joten mikä oli opetus? Mielestäni se osoitti jälleen voiman, kun suunnittelua ohjaavat huolelliset mittaukset ja ensimmäiset periaatteet. Tiimi työskentelee muiden päivitysten parissa samalla filosofialla. Pysy kuulolla!


14,78K
Johtavat
Rankkaus
Suosikit