Актуальные темы
#
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.
На этой неделе обновление тестовой сети MegaETH исправило неуловимую ошибку производительности, которая вызывала постоянное увеличение времени миниблоков между перезагрузками секвенсора. Вот история. Это история о нашей философии – измеряй, а затем строй.
Если кто-то недавно посетил панель производительности MegaETH, он мог заметить, что время миниблоков увеличивалось в течение недели, предшествующей 3 июня. На самом деле, такая тенденция начиналась сразу после каждой перезагрузки секвенсора с момента запуска публичной тестовой сети. Ранее частые обновления секвенсора означали, что время миниблоков не увеличивалось на заметное количество до сброса восходящей тенденции. Однако недавние обновления не требовали перезагрузок секвенсора, и тенденция продолжалась в течение нескольких недель. 3 июня время миниблоков почти достигло 100 мс. Поскольку в будущем перезагрузки секвенсора становятся еще менее вероятными благодаря горячим резервным копиям, пришло время устранить ошибку раз и навсегда.
Поскольку мы регулярно собираем много телеметрических данных для тестовой сети, команда быстро начала исследовать. Первое открытие заключалось в том, что увеличение времени миниблоков ускорялось со временем – не только время миниблоков увеличивалось, но и увеличивалось все быстрее и быстрее. Обычно такой симптом подразумевает, что работа, связанная со строительством каждого миниблока, увеличивалась суперлинейно по мере создания большего количества миниблоков. Однако мы отвергли гипотезу после некоторых измерений и расчетов. Мы построили конвейер миниблоков почти полностью асинхронным по отношению к EVM, чтобы достичь произвольно низкого времени миниблоков. Это означает, что сколько бы времени ни потребовалось для создания миниблока, EVM будет выполнять транзакции все это время. Таким образом, более длительное время строительства миниблока приведет к большему количеству транзакций на миниблок, но мы этого не наблюдали. Следовательно, проблема не может быть связана со строительством миниблоков. Тщательное изучение кода подтверждает этот вывод – ни одна часть процесса создания миниблоков не имеет суперлинейной сложности.
Команда расширила поиск, и настоящий виновник быстро всплыл. Время, необходимое для подтверждения блоков EVM, увеличивалось; более того, время подтверждения было идеально линейным по отношению к количеству блоков EVM, произведенных с момента последней перезагрузки. При подтверждении блоков EVM среда EVM, такая как высота блока, обновляется, поэтому EVM должен приостановиться и не может выполнять транзакции, что означает отсутствие миниблоков. Между блоками EVM существует фиксированный интервал в 1 секунду. В пределах 1-секундного бюджета линейно увеличивающееся время подтверждения приводит к линейно уменьшающейся продолжительности выполнения транзакций, что, в свою очередь, приводит к линейно уменьшающемуся количеству произведенных миниблоков. Если мы возьмем его обратное значение, мы получим среднее время миниблока, которое обратно пропорционально времени. Это именно та форма функции, которую мы видели на панели производительности. Математика подтвердилась.
В этот момент мы точно знали, что искать: какую-то процедуру, чья нагрузка увеличивается линейно со временем в конкретной части кода, которая обрабатывает подтверждение блоков EVM. Остальная часть работы была простой. Команда выпустила обновление на этой неделе, и время миниблоков больше не увеличивалось.
Итак, каков был урок? Я думаю, это снова показало силу, когда инженерия руководствуется тщательными измерениями и первыми принципами. Команда работает над другими обновлениями с той же философией. Оставайтесь с нами!


14,43K
Топ
Рейтинг
Избранное