Оновлення тестової мережі MegaETH цього тижня виправило невловиму помилку продуктивності, яка призводила до постійного збільшення часу мініблоку між перезавантаженнями секвенсера. Ось така історія. Це історія про нашу філософію – міряй, а потім будуй. Якщо ви нещодавно зайшли на панель продуктивності MegaETH, то можете помітити, що час мініблоку збільшувався протягом тижня до 3 червня. Власне, така тенденція починалася б одразу після кожного перезавантаження секвенсера з моменту запуску публічного тестнету. Раніше часті оновлення секвенсора означали, що час мініблоку не збільшиться на будь-яку відчутну величину, перш ніж тенденція до зростання буде скинута. Однак нещодавні оновлення не вимагали перезавантаження секвенсора, і тенденція тривала тижнями. 3 червня час мініблоку майже досяг 100 мс. Оскільки перезавантаження секвенсера стане ще менш ймовірним у майбутньому завдяки гарячим резервним копіям, настав час усунути помилку раз і назавжди. Оскільки ми регулярно збираємо багато телеметричних даних для тестової мережі, команда швидко почала копати. Перше відкриття полягало в тому, що збільшення часу мініблоку з часом прискорювалося – мало того, що час мініблоку збільшувався, він збільшувався все швидше і швидше. Зазвичай такий симптом означає, що робота, пов'язана з побудовою кожного мініблоку, зростала надзвичайно лінійно в міру того, як будувалося більше мініблоків. Однак ми збили гіпотезу після деяких вимірювань і розрахунків. Ми побудували конвеєр мініблоків таким чином, щоб він був майже повністю асинхронним до EVM, щоб досягти як завгодно малого часу мініблоку. Це означає, що скільки б часу не знадобилося для створення мініблоку, EVM буде виконувати транзакції протягом усього часу. Таким чином, довший час побудови мініблоку призвів би до більшої кількості транзакцій на мініблок, але ми цього не спостерігали. Отже, питання не може бути в будівництві мініблоків. Уважне вивчення коду підтверджує цей висновок – жодна деталь у процесі побудови мініблоків не має надлінійної складності. Команда розширила пошуки, і справжній винуватець швидко сплив на поверхню. Час, необхідний для фіксації блоків EVM, збільшувався; Крім того, час фіксації був ідеально лінійним до кількості блоків EVM, вироблених з моменту останнього перезавантаження. При фіксації блоків EVM оновлюється таке середовище EVM, як висота блоку, тому EVM повинен призупинятися і не може виконувати транзакції, що означає відсутність мініблоків також. Між блоками EVM є фіксований інтервал в 1 секунду. В рамках 1-секундного бюджету лінійно зростаючий час фіксації призводить до лінійно зменшуваної тривалості виконання транзакцій, що, в свою чергу, призводить до лінійного зменшення кількості вироблених мініблоків. Якщо взяти його зворотне, то отримаємо середнє час роботи мініблоку, яке обернено пропорційне за часом. Саме таку форму функції ми побачили на приладовій панелі продуктивності. Математика перевірила. На той момент ми точно знали, на що звертати увагу: на якусь процедуру, робоче навантаження якої лінійно зростає з часом у конкретній частині коду, яка обробляє фіксацію блоків EVM. Решта роботи була простою. Цього тижня команда наполягала на оновленні, і час мініблоку не підкрався. Отже, який був урок? Я думаю, що вона ще раз показала силу, коли інженери керуються ретельними вимірами та першими принципами. Команда працює над іншими оновленнями з тією ж філософією. Слідкуйте за оновленнями!
14,47K