Dit is de logische voortzetting van onze benchmarkmethodologie, deze keer toegepast op een specifieke statistiek. Voor details over de architectuur van onze Edge-functies, zie ons pijlerartikel over deRust-architectuur van Aurabase, of onze vergelijking Wasmtime versus Wasmer voor de architecturale verschillen tussen de twee runtimes.
De essentie
Een koude start van WebAssembly voegt verschillende fasen toe (laden, vastleggen, compileren of koppelen, instantiëren, eerste aanroep) en twee cijfers die niet dezelfde fasen bevatten, zijn niet vergelijkbaar, zelfs als ze dezelfde eenheid weergeven. Wasmer brengt Instaboot op de markt als een direct marketingreactie op het onderwerp, maar de publieke figuren zijn hier niet opgenomen zonder opgesplitste methodologie. Aurabase draait wasmtime versie 43 als productieafhankelijkheid voor zijn Edge-functies (geverifieerd in aura-functions/Cargo.toml), maar heeft tot nu toe geen reproduceerbare koudestartbenchmarks gepubliceerd. In dit artikel worden geen cijfers van Aurabase gegeven: het gaat om de methode.
Waarom de koude start van WebAssembly opnieuw een omstreden marketingargument is geworden
De koude start is opnieuw een as van commerciële differentiatie tussen WebAssembly-runtimes geworden, en niet alleen een onderwerp van academisch onderzoek. Wasmer maakt hier een expliciet verkoopargument van met een functie genaamd Instaboot, gepresenteerd als een direct antwoord op het koude startprobleem.
Deze reflex doet precies denken aan de dynamiek die al is gedocumenteerd in ons artikel over de backend benchmark-methodologie: verschillende concurrerende leveranciers geven prestatiecijfers weer op hun eigen productpagina, zonder altijd het protocol te specificeren dat deze heeft geproduceerd. Een koudestartcijfer zonder methode bewijst niets meer dan een latentiecijfer zonder methode.
Een koude startcijfer gepubliceerd op een marketingpagina, zonder materiaal, zonder werkdruk en zonder duidelijke definitie van het start- en eindpunt van de meting, is niet te onderscheiden van een slogan. Dit geldt voor alle looptijden die in dit artikel worden genoemd, inclusief Aurabase op de dag dat een cijfer wordt vrijgegeven.
Wat een koude start eigenlijk meet, en waarom de definitie alles verandert
Een koude start is geen enkele handeling: het is een optelsom van verschillende fasen, en niet noodzakelijkerwijs meten twee leveranciers dezelfde fasen onder dezelfde naam.
| Laden | Herstel van de .wasm-module: netwerk, schijf of al aanwezig in het geheugen |
|---|---|
| Validatie | Controle van de WebAssembly-bytecodestructuur vóór uitvoering |
| Compileren of koppelen | JIT on the fly (Cranelift, LLVM) of het koppelen van een reeds vooraf gecompileerd artefact (AOT) |
| Instantiatie | Toewijzing van lineair geheugen, tabellen en globalen, uitvoering van een mogelijke startfunctie |
| Eerste oproep | Verwerking van de aanvraag zelf, soms inbegrepen in het aangekondigde cijfer, soms uitgesloten |
Een cijfer dat alleen de instantiatie meet van een module die al is geladen en al in het geheugen is gecompileerd, zal er mechanisch beter uitzien dan een cijfer dat het laden en compileren van het netwerk omvat. Geen van beide is op zichzelf onwaar: het probleem doet zich voor als we ze vergelijken zonder te specificeren welke van de twee is gemeten.
Wat de wetenschappelijke literatuur laat zien, en waarom de cijfers niet met elkaar vergelijkbaar zijn
Academisch werk dat de afgelopen jaren als preprint op arXiv is gepubliceerd, heeft de instantiatietijd van WebAssembly-modules op verschillende runtimes gemeten. Het gemeenschappelijke punt tussen deze werken is geen convergent cijfer: het is een significant verschil, afhankelijk van de geteste runtime, de grootte van de module en de gebruikte hardware.
In dit artikel nemen wij vrijwillig geen exacte cijfers uit deze publicaties op. Zonder de methodologie van elk artikel op het moment van schrijven grondig te hebben gecontroleerd, zou het opnieuw publiceren van een geïsoleerd getal precies het probleem reproduceren dat dit artikel beschrijft: een getal zonder de context die ons in staat zou stellen te weten wat het werkelijk meet.
Wat deze variantie aan de andere kant leert, is direct nuttig: een koude start hangt sterk af van de meetcontext, precies zoals herinnerd door de discipline van omgevingspariteit, beschreven in ons artikel over algemene methodologie (identieke hardware, dezelfde regio, dezelfde cachestatus voor alle vergeleken systemen).
Wasmtime, Wasmer, WasmEdge: verschillende compilatieprioriteiten
De drie op zichzelf staande WebAssembly-runtimes die het meest in dit debat worden genoemd, houden de compilatiesnelheid en uitvoeringsprestaties niet op dezelfde manier in evenwicht, wat gedeeltelijk verklaart waarom hun koudestartcijfers niet van term tot term vergelijkbaar zijn.
| Wastijd | Cranelift-compilatiebackend, met historisch gezien een mogelijke precompilatieroute vóór implementatie | Gebruikt in productie door Aurabase voor Edge-functies |
|---|---|---|
| Wasmer | Heeft al lang verschillende verwisselbare backends gedocumenteerd, waaronder een backend die is ontworpen voor compilatiesnelheid in plaats van runtime-prestaties | Markets Instaboot, een herstart door momentopname van een reeds geïnitialiseerd exemplaar |
| WasmEdge | De publieke positionering was gericht op een snelle start, met een eigen concurrentieargument | Alternatieve runtime ook actief op dit marketinggebied |
Deze architecturen worden publiekelijk gedocumenteerd door de projecten zelf. We hebben ze voor dit artikel niet versie voor versie opnieuw geverifieerd en ze vormen geen prestatieranglijst. Ze verklaren alleen waarom drie koudestartcijfers, weergegeven door drie verschillende looptijden, allemaal nauwkeurig kunnen zijn en toch niet met elkaar vergelijkbaar zijn.
Voor de volledige architectonische details tussen de twee runtimes die het vaakst tegengesteld zijn in serverloze discussies, zie onze speciale vergelijking Wasmtime vs Wasmer.
Wat Instaboot laat zien, en wat de productpagina alleen bewijst, bewijst niet
Volgens de productpositionering die Wasmer publiekelijk communiceert, herstelt Instaboot een exemplaar dat al is geïnitialiseerd door een snapshot-mechanisme, in plaats van bij elk verzoek een volledig opstarten opnieuw te starten. Het is een echte architecturale keuze die consistent is met het probleem dat ermee wordt beoogd.
Wat dit artikel echter niet doet, is een prestatiecijfer herhalen dat op de Wasmer-productpagina wordt weergegeven. Zonder te weten welke hardware, welke werklast en welk meetprotocol dit cijfer hebben opgeleverd, zou het opnieuw publiceren ervan precies de hierboven gedocumenteerde fout maken: een marketingnummer behandelen als een onafhankelijk benchmarkresultaat.
Een cijfer als “koude start minder dan 1 ms” heeft al publiekelijk de ronde gedaan, ook in eerdere Aurabase-inhoud, zonder te worden ondersteund door een reproduceerbare benchmark. Het wordt nu intern behandeld als niet-ondersteund. Dezelfde regel is van toepassing op elk cijfer dat wordt weergegeven door een concurrerende runtime, inclusief Instaboot, zolang er geen gedesaggregeerde methodologie bij hoort.
Wat Aurabase vandaag kan zeggen over zijn eigen koude start, en wat het niet kan zeggen
Aurabase voert zijn Edge-functies uit op Wasmtime in productie, niet in een pilotproject. Dit is precies wat de indiening mogelijk maakt en waar die claim eindigt.
De afhankelijkheid wordt hard verklaard, met de functies async en cranelift geactiveerd, in de productieafhankelijkheden van de service, niet in een dev-dependency, noch een commentaar:
Wat dit bestand niet zegt: er bestaan momenteel geen koudestartcijfers gemeten volgens het protocol beschreven in onze benchmarkmethodologie in de repository voor deze runtime. Totdat een gedateerde meting, met uitgesplitste percentielen, hardware en werklast, is gepubliceerd, mag geen Aurabase-cijfer worden aangehaald als gemeten kenmerk van het product. Voor de algemene architectuur van het platform, zie ons pijlerartikel Aurabase Rust-architectuur. Voor een concrete vergelijking tussen koude start WASM en koude start container, onafhankelijk van de methodologische vraag die hier wordt behandeld, zie ons speciale artikel WASM versuscontainers.
Hoe u een koudstartnummer kunt lezen voordat u het gelooft
Zeven vragen die je aan elk koudstartfiguur kunt stellen, inclusief de onze op de dag dat we er een uitbrengen.
- Welke fasen zijn inbegrepen? Netwerkbelasting, validatie, compilatie, instantiatie, eerste oproep: een cijfer dat slechts een deel ervan telt, is niet vergelijkbaar met een cijfer dat ze allemaal telt.
- Was de module echt “koud”? Een module die zich al in het geheugen of de schijfcache bevindt, test niet hetzelfde als een module die voor de eerste keer wordt geladen.
- JIT-compilatie of voorgecompileerd artefact (AOT)? De twee strategieën hebben structureel verschillende opstartkosten.
- Eén cijfer of verdeling? Een beste serie op tien heeft niet dezelfde waarde als een p95 op duizend runs.
- Uitrusting en regio gespecificeerd? Een figuur zonder hardwarespecificatie kan niet door derden worden gereproduceerd.
- Vergelijking bij gelijke belasting en topologie? Het vergelijken van een zelf-hostende runtime met een beheerde service zonder dit te melden, vertekent de lezing.
- Datum en versie van de geteste runtime? Een ongedateerd cijfer over een project dat snel evolueert, betekent na een paar maanden niets meer.
Veelgestelde vragen
Geciteerde externe bronnen: openbare productdocumentatie Wasmer (Instaboot), openbare projectdocumentatie Wasmtime (Bytecode Alliance), geraadpleegd ter voorbereiding van dit artikel, zonder onafhankelijke dubbele controle van de prestatiecijfers die ze tonen.