Esta é a continuação lógica da nossa metodologia de benchmark , desta vez aplicada a uma métrica específica. Para obter detalhes da arquitetura de nossas funções Edge, consulte nosso artigo principal sobre a arquiteturaRust do Aurabaseou nossa comparação Wasmtime vs Wasmer para as diferenças arquiteturais entre os dois tempos de execução.
O essencial
Uma inicialização a frio do WebAssembly adiciona várias fases (carregar, confirmar, compilar ou vincular, instanciar, primeira chamada) e duas figuras que não incluem as mesmas fases não são comparáveis, mesmo que exibam a mesma unidade. Wasmer comercializa o Instaboot como uma resposta direta de marketing ao assunto, mas suas figuras públicas não são incluídas aqui sem uma metodologia desagregada. Aurabase executa wasmtime versão 43 como uma dependência de produção para suas funções Edge (verificadas em aura-functions/Cargo.toml), mas não publicou nenhum benchmark de inicialização a frio reproduzível até o momento. Nenhum número do Aurabase é fornecido neste artigo: o assunto é o método.
Por que a inicialização a frio do WebAssembly se tornou mais uma vez um argumento de marketing controverso
A inicialização a frio tornou-se mais uma vez um eixo de diferenciação comercial entre os tempos de execução do WebAssembly, e não apenas um assunto de pesquisa acadêmica. Wasmer torna isso um argumento de venda explícito com um recurso chamado Instaboot, apresentado como uma resposta direta ao problema de inicialização a frio.
Esse reflexo lembra exatamente a dinâmica já documentada em nosso artigo sobre a metodologia de backend benchmark : vários fornecedores concorrentes exibem números de desempenho em suas próprias páginas de produto, sem sempre especificar o protocolo que os produziu. Um valor de partida a frio sem método prova nada mais do que um valor de latência sem método.
Um valor de cold start publicado numa página de marketing, sem material, sem carga de trabalho e sem uma definição clara do ponto de partida e do ponto final da medição, é indistinguível de um slogan. Isso se aplica a todos os tempos de execução citados neste artigo, incluindo o Aurabase no dia em que o valor é divulgado.
O que uma partida a frio realmente mede e por que a definição muda tudo
Uma partida a frio não é uma operação única: é uma soma de fases distintas, e dois fornecedores não medem necessariamente as mesmas fases sob o mesmo nome.
| Carregando | Recuperação do módulo .wasm: rede, disco ou já presente na memória |
|---|---|
| Validação | Verificando a estrutura de bytecode do WebAssembly antes da execução |
| Compilando ou vinculando | JIT on the fly (Cranelift, LLVM) ou vinculando um artefato já pré-compilado (AOT) |
| Instanciação | Alocação de memória linear, tabelas e globais, execução de uma possível função de início |
| Primeira chamada | Processamento do próprio pedido, ora incluído no valor anunciado, ora excluído |
Uma figura que conta apenas a instanciação de um módulo já carregado e já compilado na memória parecerá mecanicamente melhor do que uma figura que inclui carregamento e compilação de rede. Nenhum dos dois é falso em si: o problema surge quando os comparamos sem especificar qual dos dois foi medido.
O que a literatura acadêmica mostra e por que seus números não se comparam
Trabalhos acadêmicos publicados como pré-impressão no arXiv nos últimos anos mediram o tempo de instanciação de módulos WebAssembly em diferentes tempos de execução. O ponto comum entre esses trabalhos não é um número convergente: é uma diferença significativa dependendo do tempo de execução testado, do tamanho do módulo e do hardware utilizado.
Não incluímos voluntariamente neste artigo quaisquer números precisos retirados dessas publicações. Sem ter verificado minuciosamente a metodologia de cada artigo no momento da redação, republicar um número isolado reproduziria exatamente o problema que este artigo documenta: um número sem o contexto que nos permitiria saber o que ele realmente mede.
O que essa variação aprende, por outro lado, é diretamente útil: uma inicialização a frio depende fortemente do contexto de medição, exatamente como lembrado pela disciplina de paridade de ambiente descrita em nosso artigo de metodologia geral (hardware idêntico, mesma região, mesmo estado de cache para todos os sistemas comparados).
Wasmtime, Wasmer, WasmEdge: diferentes prioridades de compilação
Os três tempos de execução independentes do WebAssembly mais citados neste debate não equilibram a velocidade de compilação e o desempenho de execução da mesma maneira, o que explica em parte por que seus números de inicialização a frio não são comparados termo a termo.
| Estava na hora | Back-end de compilação do Cranelift, com historicamente uma possível rota de pré-compilação antes da implantação | Usado em produção pela Aurabase para funções Edge |
|---|---|---|
| Wasmer | Documentou há muito tempo vários back-ends intercambiáveis, incluindo um back-end projetado para velocidade de compilação em vez de desempenho em tempo de execução | Markets Instaboot, uma reinicialização por snapshot de uma instância já inicializada |
| WasmEdge | Posicionamento público focado no início rápido, com argumento competitivo próprio | Tempo de execução alternativo também ativo nesta área de marketing |
Essas arquiteturas são documentadas publicamente pelos próprios projetos. Não os verificamos novamente versão por versão para este artigo e eles não constituem uma classificação de desempenho. Eles apenas explicam por que três valores de partida a frio exibidos por três tempos de execução diferentes podem ser precisos e ainda assim não serem comparáveis entre si.
Para obter detalhes completos da arquitetura entre os dois tempos de execução mais frequentemente opostos em discussões sem servidor, consulte nossa comparação dedicada Wasmtime vs Wasmer.
O que o Instaboot mostra e o que a página do produto por si só não prova
De acordo com o posicionamento do produto que Wasmer comunica publicamente, o Instaboot restaura uma instância já inicializada por um mecanismo de snapshot, em vez de reiniciar uma inicialização completa a cada solicitação. É uma escolha arquitetônica real que é consistente com o problema que visa.
O que este artigo não faz, entretanto, é repetir um número de desempenho exibido na página do produto Wasmer. Sem saber qual hardware, qual carga de trabalho e qual protocolo de medição produziu esse número, republicá-lo cometeria exatamente o erro documentado acima: tratar um número de marketing como um resultado de benchmark independente.
Um número como “inicialização a frio inferior a 1 ms” já circulou publicamente, inclusive em conteúdos anteriores do Aurabase, sem ser apoiado por um benchmark reproduzível. Agora é tratado internamente como sem suporte. A mesma regra se aplica a qualquer figura exibida por um tempo de execução concorrente, incluindo o Instaboot, desde que nenhuma metodologia desagregada o acompanhe.
O que a Aurabase pode dizer hoje sobre sua própria partida a frio e o que não pode
Aurabase executa suas funções Edge no Wasmtime em produção, não em um projeto piloto. Aqui está exatamente o que o pedido permite e onde termina a reivindicação.
A dependência é declarada hard, com os recursos async e cranelift ativados, nas dependências de produção do serviço, não em dev-dependency nem em comentário:
O que este arquivo não diz: nenhum valor de partida a frio medido de acordo com o protocolo descrito em nossa metodologia de benchmark existe hoje no repositório para este tempo de execução. Até que uma medição datada, com percentis desagregados, hardware e carga de trabalho, seja publicada, nenhum valor do Aurabase deve ser citado como uma característica medida do produto. Para a arquitetura geral da plataforma, consulte nosso artigo principal Aurabase Rust arquitetura. Para uma comparação concreta entre o WASM de inicialização a frio e o contêiner de inicialização a frio, independente da questão metodológica abordada aqui, consulte nosso artigo dedicado WASM vscontêineres.
Como ler um número de inicialização a frio antes de acreditar
Sete perguntas a serem feitas a qualquer figura de partida a frio, incluindo a nossa no dia em que lançarmos uma.
- Quais fases estão incluídas? Carregamento de rede, validação, compilação, instanciação, primeira chamada: um número que conta apenas parte dela não é comparável a um número que conta todos eles.
- O módulo estava realmente “frio”? Um módulo já na memória ou cache de disco não testa a mesma coisa que um módulo carregado pela primeira vez.
- Compilação JIT ou artefato pré-compilado (AOT)? As duas estratégias têm custos iniciais estruturalmente diferentes.
- Único dígito ou distribuição? Uma melhor execução em dez não tem o mesmo valor que um p95 em mil execuções.
- Equipamento e região especificados? Uma figura sem especificação de hardware não pode ser reproduzida por terceiros.
- Comparação com carga e topologia iguais? Comparar um tempo de execução auto-hospedado com um serviço gerenciado sem relatá-lo distorce a leitura.
- Data e versão do tempo de execução testado? Um número sem data em um projeto que está evoluindo rapidamente não significa nada depois de alguns meses.
Perguntas frequentes
Fontes externas citadas: documentação pública do produto Wasmer (Instaboot), documentação pública do projeto Wasmtime (Bytecode Alliance), consultada na preparação para este artigo, sem verificação dupla independente dos números de desempenho que mostram.