Это логическое продолжение нашей методики тестирования , на этот раз примененной к конкретной метрике. Подробную информацию об архитектуре наших функций Edge см. в нашей основной статье об архитектуреRust Aurabaseили в нашем сравнении Wasmtime и Wasmer, чтобы узнать об архитектурных различиях между двумя средами выполнения.
Самое необходимое
Холодный запуск WebAssembly добавляет несколько этапов (загрузка, фиксация, компиляция или связывание, создание экземпляра, первый вызов), и два рисунка, которые не включают одинаковые этапы, несопоставимы, даже если они отображают один и тот же модуль. Васмер позиционирует Instaboot как прямой маркетинговый ответ на эту тему, но его общественные деятели не включены сюда без дезагрегированной методологии. Aurabase использует wasmtime версии 43 в качестве производственной зависимости для своих функций Edge (проверено в aura-functions/Cargo.toml), но на сегодняшний день не опубликовало никаких воспроизводимых тестов холодного запуска. В этой статье не приводятся цифры по Aurabase: речь идет о методе.
Почему холодный старт WebAssembly снова стал спорным маркетинговым аргументом
Холодный старт снова стал основой коммерческого различия между средами выполнения WebAssembly, а не просто предметом академических исследований. Васмер делает это явным аргументом в пользу функции Instaboot, представленной как прямой ответ на проблему холодной загрузки.
Этот рефлекс в точности напоминает динамику, уже описанную в нашей статье о методологии тестирования серверной части : некоторые конкурирующие поставщики отображают показатели производительности на собственной странице продукта, не всегда указывая протокол, который их произвел. Показатель холодного запуска без метода доказывает не что иное, как показатель задержки без метода.
Цифра холодного старта, опубликованная на маркетинговой странице, без материала, без рабочей нагрузки и без четкого определения начальной и конечной точки измерения, неотличима от слогана. Это относится ко всем средам выполнения, упомянутым в этой статье, включая Aurabase на день выпуска рисунка.
Что на самом деле измеряет холодный старт и почему это определение все меняет
Холодный пуск — это не одна операция: это сумма различных фаз, и два поставщика не обязательно измеряют одни и те же фазы под одним и тем же названием.
| Загрузка | Восстановление модуля .wasm: сетевого, дискового или уже присутствующего в памяти |
|---|---|
| Валидация | Проверка структуры байт-кода WebAssembly перед выполнением |
| Компиляция или связывание | JIT на лету (Cranelift, LLVM) или связывание уже предварительно скомпилированного артефакта (AOT) |
| Создание экземпляра | Выделение линейной памяти, таблиц и глобалов, выполнение возможной функции запуска |
| Первый звонок | Обработка самого запроса, иногда включенная в заявленную цифру, иногда исключенная |
Цифра, учитывающая только реализацию уже загруженного и скомпилированного в память модуля, будет механически выглядеть лучше, чем цифра, включающая сетевую загрузку и компиляцию. Ни то, ни другое само по себе не является ложным: проблема возникает, когда мы сравниваем их, не уточняя, какой из двух был измерен.
Что показывает научная литература, и почему ее цифры не сравниваются друг с другом
Академическая работа, опубликованная в виде препринта на arXiv в последние годы, измеряла время создания экземпляров модулей WebAssembly в различных средах выполнения. Общей точкой между этими работами является не сходящаяся цифра: это значительная разница в зависимости от тестируемого времени выполнения, размера модуля и используемого оборудования.
Мы добровольно не приводим в эту статью точные цифры, взятые из этих публикаций. Без тщательной двойной проверки методологии каждой статьи на момент написания, повторная публикация отдельного числа точно воспроизведет проблему, документированную в этой статье: число без контекста, которое позволило бы нам узнать, что оно на самом деле измеряет.
С другой стороны, то, что изучает это отклонение, непосредственно полезно: холодный запуск сильно зависит от контекста измерения, точно так же, как это напоминает дисциплина четности среды, описанная в нашей общей методологической статье (идентичное оборудование, один и тот же регион, одинаковое состояние кэша для всех сравниваемых систем).
Wasmtime, Wasmer, WasmEdge: разные приоритеты компиляции
Три автономные среды выполнения WebAssembly, наиболее часто упоминаемые в этой дискуссии, не обеспечивают одинаковый баланс между скоростью компиляции и производительностью выполнения, что отчасти объясняет, почему их показатели холодного запуска не сравниваются между собой.
| Васмтайм | Серверная часть компиляции Cranelift с исторически возможным маршрутом предварительной компиляции перед развертыванием | Используется в производстве Aurabase для функций Edge. |
|---|---|---|
| Васмер | Давно задокументировал несколько взаимозаменяемых бэкэндов, в том числе бэкэнд, рассчитанный на скорость компиляции, а не на производительность во время выполнения. | Markets Instaboot, перезагрузка с помощью снимка уже инициализированного экземпляра. |
| ВасмЭдж | Публичное позиционирование ориентировано на быстрый старт и имеет собственный конкурентный аргумент. | Альтернативная среда выполнения также активна в этой маркетинговой области. |
Эти архитектуры публично документируются самими проектами. Мы не проверяли их версию за версией для этой статьи, и они не представляют собой рейтинг производительности. Они лишь объясняют, почему три показателя холодного запуска, отображаемые в трех разных средах выполнения, могут быть точными, но при этом несопоставимыми друг с другом.
Полную информацию об архитектуре двух сред выполнения, наиболее часто противопоставляемых в бессерверных обсуждениях, см. в нашем специальном сравнении Wasmtime и Wasmer.
Что показывает Instaboot и чего не доказывает сама его страница продукта
Согласно позиционированию продукта, о котором публично сообщает Васмер, Instaboot восстанавливает экземпляр, уже инициализированный с помощью механизма моментальных снимков, вместо того, чтобы перезапускать полный запуск при каждом запросе. Это настоящий архитектурный выбор, соответствующий решаемой задаче.
Однако в этой статье не повторяются показатели производительности, отображаемые на странице продукта Wasmer. Не зная, какое оборудование, какая рабочая нагрузка и какой протокол измерения дали эту цифру, повторная публикация ее привела бы к ошибке, описанной выше: рассматривать маркетинговый показатель как независимый результат тестирования.
Такая цифра, как «холодный старт менее 1 мс», уже распространялась публично, в том числе в предыдущем контенте Aurabase, без подтверждения воспроизводимыми тестами. Теперь он рассматривается внутри компании как неподдерживаемый. То же правило применяется к любым цифрам, отображаемым конкурирующей средой выполнения, включая Instaboot, при условии, что они не сопровождаются дезагрегированной методологией.
Что сегодня Aurabase может сказать о собственном холодном старте, а чего не может
Aurabase запускает свои функции Edge на Wasmtime в производстве, а не в пилотном проекте. Вот именно то, что позволяет заявка, и где эта претензия заканчивается.
Зависимость объявляется жесткой с активированными функциями async и cranelift в производственных зависимостях службы, а не в dev-dependency или комментарии:
Чего не сказано в этом файле: на сегодняшний день в репозитории для этой среды выполнения не существует показателей холодного запуска, измеренных в соответствии с протоколом, описанным в нашей методологии тестирования . До тех пор, пока не будут опубликованы датированные измерения с детализированными процентилями, аппаратным обеспечением и рабочей нагрузкой, никакие показатели Aurabase не могут быть указаны в качестве измеряемой характеристики продукта. Общую архитектуру платформы см. в нашей основной статье Архитектура Aurabase Rust. Конкретное сравнение WASM с холодным запуском и контейнера с холодным запуском, независимо от рассматриваемого здесь методологического вопроса, см. в нашей специальной статье WASM против контейнеров.
Как прочитать номер холодного старта, прежде чем вы в это поверите
Семь вопросов, которые следует задать любому человеку с холодным стартом, включая наш в день его выпуска.
- Какие этапы включены? Загрузка сети, проверка, компиляция, создание экземпляра, первый вызов: цифра, которая считает только часть, не сравнима с цифрой, которая считает их все.
- Действительно ли модуль был «холодным»? Модуль, уже находящийся в памяти или в дисковом кеше, не тестирует то же самое, что модуль, загружаемый впервые.
- JIT-компиляция или предварительно скомпилированный артефакт (AOT)? Эти две стратегии имеют структурно разные стартовые затраты.
- Одна цифра или распределение? Лучший результат из десяти не имеет такого же значения, как p95 из тысячи.
- Указано оборудование и регион? Рисунок без спецификации оборудования не может быть воспроизведен третьей стороной.
- Сравнение при равной нагрузке и топологии? Сравнение локальной среды выполнения с управляемой службой без отчета об этом искажает показания.
- Дата и версия проверенной среды выполнения? Недатированная цифра для проекта, который быстро развивается, через несколько месяцев ничего не значит.
Часто задаваемые вопросы
Цитируемые внешние источники: общедоступная документация продукта Wasmer (Instaboot), общедоступная документация проекта Wasmtime (Bytecode Alliance), с которой проводились консультации при подготовке этой статьи, без независимой двойной проверки показанных в них показателей производительности.