Retour au blog
Performances & Benchmarks · 11 min de lecture

Cold start WASM vs conteneurs : ce que disent Wasmtime, Wasmer et WasmEdge

Affane Daylami · Fondateur· 24 août 2026

Un module WebAssembly s’instancie en microsecondes ou en millisecondes selon les sources publiées. Un conteneur Docker classique démarre en général en plusieurs centaines de millisecondes, parfois plusieurs secondes. Une microVM Firecracker se situe entre les deux : moins de 125 ms au démarrage, selon le papier de recherche d’AWS qui l’a introduite en 2020. Ces trois familles de chiffres ne partagent ni la même méthodologie, ni la même date, ni le même protocole de mesure : elles ne se laissent pas empiler dans un classement unique.

Cet article rassemble ce que des sources tierces identifiables publient sur le cold start de WebAssembly comparé aux conteneurs : un papier présenté à USENIX NSDI, la documentation officielle de Fastly, WasmEdge et Wasmer, et un projet de recherche académique sur l’isolation serverless. Aucun chiffre Aurabase n’y figure. Nos fonctions edge tournent bien sur Wasmtime, vérifié dans le dépôt, mais aucun benchmark de cold start propre à notre infrastructure n’a été publié à ce jour, une distinction détaillée plus loin. Pour la méthode générale de benchmark appliquée ailleurs sur ce blog, voir notre article pilier sur la méthodologie de benchmark.

L’essentiel
  • Le papier Firecracker d’AWS (Agache et al., USENIX NSDI 2020) documente un démarrage de microVM sous 125 ms et une surcharge mémoire sous 5 MiB : la référence la plus précisément chiffrée de cet article.
  • Fastly a documenté dès 2019, pour son runtime AOT Lucet (dont les optimisations ont ensuite été fusionnées dans Wasmtime), des temps d’instanciation WASM sous la milliseconde. C’est un chiffre publié par le fournisseur, jamais reproduit indépendamment dans les sources consultées ici.
  • WasmEdge, projet sous gouvernance CNCF, revendique dans sa documentation officielle un démarrage et une empreinte mémoire nettement inférieurs à un conteneur Docker équivalent, sans contre-mesure indépendante citée dans cet article.
  • Wasmtime, Wasmer et WasmEdge ne compilent pas de la même façon (Cranelift, Singlepass/Cranelift/LLVM au choix, compilateur AOT propre) : ce choix de backend explique une bonne partie de l’écart entre leurs chiffres publiés, pas seulement le runtime en tant que tel.
  • Aurabase utilise Wasmtime en production pour ses fonctions edge, vérifié dans aura-functions/Cargo.toml, mais ne publie à ce jour aucun chiffre de cold start mesuré sur sa propre infrastructure.
Note de méthode sur les sources
Les sources tierces citées ci-dessous sont identifiables par leur titre, leur auteur ou leur éditeur, et leur date de publication. Cette recherche s’appuie sur des publications reconnues et largement documentées dans l’écosystème WebAssembly et serverless, pas sur une requête en direct de leurs pages au moment de la rédaction. Là où un chiffre précis n’a pas pu être confirmé avec une certitude suffisante, cet article utilise un ordre de grandeur plutôt qu’une valeur exacte, et le signale explicitement.
#
Cadrage

Pourquoi le cold start WASM occupe autant de place dans le débat serverless

Le cold start désigne la latence supplémentaire payée par une requête quand l’environnement d’exécution doit s’initialiser avant que le code applicatif ne tourne. Sur une fonction edge ou serverless classique, c’est loin d’être un cas marginal : une plateforme qui descend à zéro instance entre deux pics de trafic, ou qui distribue son exécution sur des dizaines de nœuds edge géographiquement dispersés, paie ce coût en permanence, pas seulement au premier déploiement.

Le sujet a pris une ampleur presque symbolique dans l’écosystème WASM depuis une phrase de Solomon Hykes, cofondateur de Docker, publiée sur Twitter en mars 2019 : « If WASM+WASI existed in 2008, we wouldn’t have needed to create Docker. That’s how important it is. WebAssembly on the server is the future of computing. » C’est une opinion de praticien reconnu, pas une mesure. Elle explique pourquoi le sujet fascine, elle ne remplace pas un chiffre sourcé.

Aurabase propose deux chemins pour ses fonctions edge : l’éditeur Studio, qui exécute du code en runtime Deno comme documenté dans notre guide de migration Supabase, et la CLI aura functions deploy, qui vise un chemin distinct pour des fonctions écrites en Rust et compilées en WASM sur Wasmtime. C’est ce second chemin que cet article éclaire, sans lui attribuer un chiffre de cold start qui n’existe pas encore.

#
Architecture

Pourquoi un module WASM démarre structurellement plus vite qu’un conteneur

L’écart ne vient pas d’un runtime plus rapide dans l’absolu : il vient d’une pile d’étapes plus courte entre la requête et le code applicatif.

Démarrer un conteneur mobilise le noyau de l’hôte : création d’un nouveau processus, mise en place des cgroups et des namespaces qui l’isolent, montage des couches de l’image, puis démarrage du runtime applicatif à l’intérieur (Node.js et son moteur V8, par exemple, ont eux-mêmes un coût d’initialisation). Chaque étape ajoute des appels système et, pour une image jamais vue localement, un téléchargement réseau avant même de commencer.

Un module WebAssembly, lui, est isolé au niveau du langage machine virtuel, pas au niveau du système d’exploitation. Instancier un module signifie allouer sa mémoire linéaire, lier ses imports, puis sauter à son point d’entrée, le tout dans le processus déjà démarré du runtime hôte. Aucun nouveau processus, aucune couche d’image, aucun montage de système de fichiers par défaut.

Le choix du mode de compilation ajoute une variable supplémentaire. Wasmtime compile en JIT via son backend Cranelift au chargement du module, ou peut le précompiler à l’avance avec wasmtime compile, ce qui produit un fichier .cwasm déjà transformé en code machine natif. La compilation anticipée (AOT) retire l’étape de compilation du chemin critique de la requête : c’est exactement le levier qu’une architecture edge sensible au cold start doit activer.

services/aura-functions/Cargo.toml
TOML
# Extrait réel du dépôt Aurabase
# WASM Runtime
wasmtime = { version = "43", features = ["async", "cranelift"] }

C’est une dépendance de production, pas de développement : elle confirme que Wasmtime tourne réellement sur le chemin CLI des fonctions edge Aurabase. Elle ne confirme, en revanche, aucun chiffre de latence, ce qui reste vrai tant qu’aucun benchmark daté n’est publié.

#
Chiffres publiés

Conteneurs et microVM : la référence la plus précisément chiffrée

Sur ce terrain, la source la plus solide est un papier de recherche industriel, pas un billet de blog marketing. Firecracker, la technologie de microVM légère développée par AWS et utilisée notamment pour Lambda et Fargate, a été présentée à la conférence USENIX NSDI 2020 par Agache et al. dans l’article « Firecracker: Lightweight Virtualization for Serverless Applications ».

Ce papier documente un temps de démarrage inférieur à 125 ms et une surcharge mémoire inférieure à 5 MiB par microVM, avec la possibilité de faire tourner des milliers de microVM sur une même machine physique. C’est un chiffre daté (2020), sourcé à une publication académique évaluée par des pairs, et abondamment cité depuis dans la littérature sur l’isolation serverless.

Un conteneur Docker standard se situe généralement plus haut : de quelques centaines de millisecondes à plusieurs secondes selon la taille de l’image, la nécessité de la télécharger, et le temps d’amorçage du runtime applicatif embarqué. Il n’existe pas ici de chiffre unique universellement cité, contrairement à Firecracker : le résultat dépend trop de l’image testée pour qu’une seule valeur fasse consensus.

#
Chiffres publiés

WebAssembly : ce que Fastly, WasmEdge et la recherche académique documentent

Trois sources, trois statuts différents : un fournisseur historique, un projet sous gouvernance de fondation, et un papier de recherche.

Fastly a lancé Compute@Edge en 2019 sur Lucet, son propre compilateur et runtime WASM en compilation anticipée. À ce lancement, l’entreprise a documenté des temps d’instanciation WASM sous la milliseconde, un ordre de grandeur qui a marqué durablement le discours sur le cold start WASM dans l’industrie. En 2021, Fastly a cessé le développement autonome de Lucet et a réorienté ses efforts vers Wasmtime, dont le backend de compilation Cranelift a hérité d’une partie de ces optimisations : c’est une des raisons pour lesquelles Wasmtime reste aujourd’hui une référence pour ce type de charge.

WasmEdge, un runtime WASM passé sous gouvernance de la CNCF (à l’origine SSVM, porté par Second State), revendique dans sa documentation officielle un démarrage et une empreinte mémoire nettement inférieurs à un conteneur Docker équivalent, avec un positionnement explicite sur les charges edge et IoT. C’est un chiffre publié par l’éditeur du projet lui-même, à lire comme tel : une revendication produit, pas un audit indépendant.

Côté recherche académique, Faasm (Shillaker & Pietzuch, USENIX ATC 2020, également disponible en prépublication) construit une plateforme serverless à état en s’appuyant sur l’isolation WebAssembly (via WAVM, pas Wasmtime) précisément parce qu’elle permet d’instancier une fonction à un coût largement inférieur à l’isolation par conteneur ou par VM. Le papier ne porte pas spécifiquement sur Wasmtime, mais il apporte une validation académique indépendante à l’argument structurel de la section précédente.

#
Runtimes

Wasmtime vs Wasmer vs WasmEdge : pourquoi les chiffres publiés ne s’alignent pas

Comparer ces trois runtimes uniquement par leur nom masque la vraie variable : le backend de compilation choisi, qui change radicalement l’équilibre entre vitesse de démarrage et performance d’exécution.

WasmtimeCranelift (JIT par défaut) + AOT via wasmtime compileBytecode Alliance · gouvernance ouverte, utilisé par Fastly, Shopify, Aurabase
WasmerSinglepass, Cranelift ou LLVM au choixSinglepass minimise le temps de compilation ; LLVM maximise la performance d’exécution
WasmEdgeCompilateur AOT propre au projetCNCF · positionné edge/IoT et cloud-native

Singlepass, le backend de compilation le plus rapide de Wasmer, existe précisément parce que son équipe a identifié le cold start comme un axe distinct de la performance d’exécution en régime établi : un module compilé en Singlepass démarre plus vite, mais tourne moins vite en pic de charge qu’un même module compilé en LLVM. C’est un compromis assumé, pas un défaut caché.

Un chiffre publié par un éditeur de runtime n’est pas un audit indépendant
Wasmer a publié ses propres comparatifs de performance face à Wasmtime, une pratique qui a suscité des débats dans la communauté WASM sur la méthodologie retenue et la comparabilité des scénarios testés. Ce n’est pas une accusation de mauvaise foi : c’est un rappel structurel. Un éditeur de runtime a un intérêt direct à publier le scénario où il gagne, ce qui rend la vérification indépendante d’autant plus utile avant de trancher un choix d’architecture sur un seul chiffre.
#
Synthèse

Tableau comparatif : ce que chaque source documente, et ce qu’elle ne documente pas

<125 ms
BOOT FIRECRACKER
Agache et al., NSDI 2020
3
RUNTIMES WASM COMPARÉS
Wasmtime, Wasmer, WasmEdge
0
BENCHMARK COLD START AURABASE
Wasmtime vérifié en production, aucune mesure publiée
Firecracker (AWS)< 125 ms démarrage, < 5 MiB overheadPapier de recherche évalué par des pairsAgache et al., USENIX NSDI 2020
Lucet → Wasmtime (Fastly)Instanciation sous la milliseconde (2019)Chiffre du fournisseur, non reproduit iciAnnonce Compute@Edge, Fastly
WasmEdgeDémarrage et empreinte mémoire réduits vs DockerRevendication produit de l’éditeurDocumentation officielle WasmEdge (CNCF)
Faasm (recherche)Isolation WASM nettement moins coûteuse à instancier qu’un conteneurUtilise WAVM, pas WasmtimeShillaker & Pietzuch, USENIX ATC 2020
Conteneur Docker standardCentaines de ms à plusieurs secondesPas de chiffre unique faisant consensusComportement largement documenté

Ces cinq lignes ne se lisent pas comme un classement unique : elles viennent de méthodologies, de dates et de générations de runtime différentes. Pour une critique méthodologique plus poussée de la fiabilité de ce type de benchmark WASM, notre article sur les limites des benchmarks WebAssembly va plus loin que le présent comparatif, qui reste centré sur ce que chaque source affirme concrètement.

#
Implications pratiques

Ce que cet écart change réellement pour un choix d’architecture edge

L’avantage de cold start du WASM compte le plus sur les charges les plus sensibles à la latence de la première requête, pas sur toutes les charges de la même façon.

Il pèse particulièrement sur un trafic edge très irrégulier (rafales suivies de silences), sur une isolation par requête plutôt que par conteneur partagé entre plusieurs requêtes, et sur une infrastructure qui redescend réellement à zéro instance entre deux pics plutôt que de garder un pool chaud en permanence. Sur une charge stable et prévisible, où les instances restent chaudes de toute façon, l’écart de cold start compte structurellement moins.

WebAssembly garde par ailleurs des contraintes distinctes du cold start : l’accès au système de fichiers ou au réseau passe par WASI, une interface encore en évolution selon les runtimes et leurs versions, et un module compilé pour démarrer vite (Singlepass côté Wasmer, par exemple) n’est pas nécessairement le plus rapide une fois en régime établi sous forte charge. Cold start et performance d’exécution en pic restent deux axes distincts, rarement optimaux simultanément sur le même profil de compilation.

Pour évaluer un choix d’architecture edge sur ce critère, trois questions concrètes à poser à n’importe quel fournisseur, Aurabase inclus : quel runtime exact est utilisé, quel backend de compilation (JIT ou AOT), et le chiffre de cold start avancé a-t-il été mesuré par un tiers indépendant ou uniquement par l’éditeur du runtime lui-même.

#
Questions Fréquentes

FAQ

Le cold start WebAssembly est-il toujours plus rapide qu’un conteneur Docker ?+
En ordre de grandeur, les sources citées dans cet article vont dans ce sens : microsecondes à millisecondes pour l’instanciation d’un module WASM, contre centaines de millisecondes à plusieurs secondes pour un conteneur classique. Mais aucun de ces chiffres ne vient d’un protocole de mesure commun aux deux familles de technologies, à des dates et sur des versions différentes. À traiter comme une tendance largement documentée, pas comme une garantie chiffrée valable pour n’importe quelle charge.
Pourquoi Wasmtime, Wasmer et WasmEdge annoncent-ils des chiffres de démarrage différents ?+
Parce qu’ils ne compilent pas de la même façon. Wasmtime utilise Cranelift comme backend par défaut et propose une compilation anticipée (AOT) via wasmtime compile. Wasmer laisse choisir entre Singlepass (compilation la plus rapide), Cranelift ou LLVM (performance d’exécution la plus élevée, compilation plus lente). WasmEdge embarque son propre compilateur AOT, pensé pour l’edge et l’IoT. Le choix du backend explique une bonne partie de l’écart entre les chiffres publiés par chaque projet.
Qu’est-ce que la compilation AOT (ahead-of-time) change concrètement pour le cold start ?+
Une compilation AOT retire l’étape de compilation du chemin critique de la requête : le module WASM est déjà transformé en code machine avant l’invocation, il ne reste qu’à le charger et l’instancier. C’est le principe derrière wasmtime compile côté Wasmtime et le compilateur propre de WasmEdge. Une compilation JIT paie une partie de ce coût à chaque nouvelle instance froide, sauf si le runtime met en cache le résultat.
Aurabase a-t-il publié un benchmark de cold start pour ses fonctions edge WASM ?+
Non. Aurabase utilise Wasmtime en production pour le chemin CLI de ses fonctions edge, dépendance vérifiée dans aura-functions/Cargo.toml (version 43, fonctionnalités async et cranelift), mais aucun chiffre de cold start mesuré sur cette infrastructure n’a été publié à ce jour. Notre engagement de méthodologie pour tout futur chiffre de performance est détaillé dans notre article sur la méthodologie de benchmark.
Quelle différence entre le cold start d’un runtime WASM et celui d’une base Postgres serverless ?+
Ce sont deux couches différentes de la pile. Le cold start décrit ici concerne l’environnement d’exécution du code, le runtime WASM lui-même. Une base Postgres serverless ajoute sa propre latence de démarrage, liée au pool de connexions, à la reprise d’une instance suspendue ou à l’établissement d’une nouvelle connexion chiffrée. Notre article sur le cold start Postgres serverless traite spécifiquement cette seconde couche.
Peut-on faire confiance aux benchmarks de cold start publiés par les éditeurs de runtime WASM eux-mêmes ?+
Avec prudence. Un chiffre publié par l’éditeur d’un runtime décrit ses propres conditions de test, rarement reproduites de façon indépendante, et la communauté WASM a déjà connu des désaccords publics sur la méthodologie de comparatifs de performance entre runtimes. Notre article dédié aux limites des benchmarks WebAssembly détaille plus en profondeur ces questions méthodologiques.

Pour la couche base de données de ce même problème, voir notre article sur le cold start Postgres serverless.

EDGE FUNCTIONS WASM

Testez le runtime derrière vos fonctions edge.

Aurabase exécute ses fonctions edge en Rust compilé en WASM sur Wasmtime. Créez un projet gratuit et mesurez votre propre cold start sur votre propre charge.

Aucune carte bancaire requise · 500 MB gratuits · 50 000 MAU