Cold start WebAssembly : ce que les benchmarks disent vraiment (et ce qu’on ne peut pas encore affirmer)
Aucun runtime WebAssembly ne publie aujourd’hui un chiffre de cold start mesuré selon un protocole partagé, disclosé et reproductible par un tiers. Wasmtime, Wasmer et WasmEdge affichent chacun des arguments de démarrage rapide, mais rarement la même définition du mot « démarrage ». Cet article ne rajoute pas un chiffre de plus à la pile : il explique ce qu’un cold start mesure vraiment, pourquoi les chiffres publiés ne se comparent pas, et où en est réellement Aurabase, qui fait tourner wasmtime en production sans avoir encore publié de benchmark propre.
C’est la suite logique de notre méthodologie de benchmark, appliquée cette fois à une métrique spécifique. Pour le détail de l’architecture de nos fonctions Edge, voir notre article pilier sur l’architecture Rust d’Aurabase, ou notre comparatif Wasmtime vs Wasmer pour les différences d’architecture entre les deux runtimes.
Un cold start WebAssembly additionne plusieurs phases (chargement, validation, compilation ou liaison, instanciation, premier appel) et deux chiffres qui n’incluent pas les mêmes phases ne sont pas comparables, même s’ils affichent la même unité. Wasmer commercialise Instaboot comme réponse marketing directe au sujet, mais ses chiffres publics ne sont pas repris ici sans méthodologie disclosée. Aurabase fait tourner wasmtime version 43 en dépendance de production pour ses fonctions Edge (vérifié dans aura-functions/Cargo.toml), mais n’a publié aucun benchmark de cold start reproductible à ce jour. Aucun chiffre Aurabase n’est avancé dans cet article : c’est la méthode qui est le sujet.
Pourquoi le cold start WebAssembly est redevenu un argument marketing disputé
Le cold start est redevenu un axe de différenciation commerciale entre runtimes WebAssembly, pas seulement un sujet de recherche académique. Wasmer en fait un argument de vente explicite avec une fonctionnalité nommée Instaboot, présentée comme une réponse directe au problème du démarrage à froid.
Ce réflexe rappelle exactement la dynamique déjà documentée dans notre article sur la méthodologie de benchmark backend : plusieurs fournisseurs concurrents affichent des chiffres de performance sur leur propre page produit, sans toujours préciser le protocole qui les a produits. Un chiffre de cold start sans méthode ne prouve rien de plus qu’un chiffre de latence sans méthode.
Ce qu’un cold start mesure réellement, et pourquoi la définition change tout
Un cold start n’est pas une seule opération : c’est une somme de phases distinctes, et deux fournisseurs ne mesurent pas forcément les mêmes phases sous le même nom.
Un chiffre qui ne compte que l’instanciation d’un module déjà chargé et déjà compilé en mémoire aura mécaniquement l’air meilleur qu’un chiffre qui inclut le chargement réseau et la compilation. Aucun des deux n’est faux en soi : le problème apparaît quand on les compare sans préciser lequel des deux a été mesuré.
Ce que montre la littérature académique, et pourquoi ses chiffres ne se comparent pas entre eux
Des travaux académiques publiés en preprint sur arXiv ces dernières années ont mesuré le temps d’instanciation de modules WebAssembly sur différents runtimes. Le point commun entre ces travaux n’est pas un chiffre convergent : c’est un écart important selon le runtime testé, la taille du module et le matériel utilisé.
Nous ne reprenons volontairement aucun chiffre précis tiré de ces publications dans cet article. Sans avoir revérifié en détail la méthodologie de chaque papier au moment de l’écriture, republier un nombre isolé reproduirait exactement le problème que cet article documente : un chiffre sans le contexte qui permettrait de savoir ce qu’il mesure vraiment.
Ce que cette variance apprend, en revanche, est directement utile : un cold start dépend fortement du contexte de mesure, exactement comme le rappelle la discipline de parité d’environnement décrite dans notre article de méthodologie générale (matériel identique, même région, même état de cache pour tous les systèmes comparés).
Wasmtime, Wasmer, WasmEdge : des priorités de compilation différentes
Les trois runtimes WebAssembly autonomes les plus cités dans ce débat n’arbitrent pas de la même façon entre vitesse de compilation et performance d’exécution, ce qui explique en partie pourquoi leurs chiffres de cold start ne se comparent pas terme à terme.
Pour le détail architectural complet entre les deux runtimes les plus souvent opposés dans les discussions serverless, voir notre comparatif dédié Wasmtime vs Wasmer.
Ce qu’Instaboot montre, et ce que sa page produit ne prouve pas à elle seule
D’après le positionnement produit que Wasmer communique publiquement, Instaboot restaure une instance déjà initialisée par un mécanisme de snapshot, plutôt que de relancer un démarrage complet à chaque requête. C’est un choix d’architecture réel et cohérent avec le problème qu’il cible.
Ce que cet article ne fait pas, en revanche, c’est reprendre un chiffre de performance affiché sur la page produit Wasmer. Sans savoir quel matériel, quelle charge de travail et quel protocole de mesure ont produit ce chiffre, le republier commettrait exactement l’erreur documentée plus haut : traiter un chiffre marketing comme un résultat de benchmark indépendant.
Ce qu’Aurabase peut affirmer aujourd’hui sur son propre cold start, et ce qu’il ne peut pas
Aurabase fait tourner ses fonctions Edge sur Wasmtime en production, pas en projet pilote. Voici exactement ce que le dépôt permet d’affirmer, et où s’arrête cette affirmation.
La dépendance est déclarée en dur, avec les features async et cranelift activées, dans les dépendances de production du service, pas dans une dev-dependency ni un commentaire :
Ce que ce fichier ne dit pas : aucun chiffre de cold start mesuré selon le protocole décrit dans notre méthodologie de benchmark n’existe aujourd’hui dans le dépôt pour ce runtime. Tant qu’une mesure datée, avec percentiles, matériel et charge de travail disclosés, n’a pas été publiée, aucun chiffre Aurabase ne doit être cité comme une caractéristique mesurée du produit. Pour l’architecture générale de la plateforme, voir notre article pilier architecture Rust d’Aurabase. Pour une comparaison concrète entre cold start WASM et cold start conteneur, indépendante de la question méthodologique traitée ici, voir notre article dédié WASM vs conteneurs.
Sept questions à poser à n’importe quel chiffre de cold start, y compris le nôtre le jour où nous en publierons un.
- Quelles phases sont incluses ? Chargement réseau, validation, compilation, instanciation, premier appel : un chiffre qui n’en compte qu’une partie n’est pas comparable à un chiffre qui les compte toutes.
- Le module était-il vraiment « froid » ? Un module déjà en cache mémoire ou disque ne teste pas la même chose qu’un module chargé pour la première fois.
- Compilation JIT ou artefact précompilé (AOT) ? Les deux stratégies ont des coûts de démarrage structurellement différents.
- Chiffre unique ou distribution ? Un meilleur run sur dix n’a pas la même valeur qu’un p95 sur mille exécutions.
- Matériel et région précisés ? Un chiffre sans spécification matérielle ne peut pas être reproduit par un tiers.
- Comparaison à charge et topologie égales ? Comparer un runtime auto-hébergé à un service managé sans le signaler fausse la lecture.
- Date et version du runtime testé ? Un chiffre non daté sur un projet qui évolue vite ne veut plus rien dire au bout de quelques mois.
Comment lire un chiffre de cold start avant de le croire