Questa è la continuazione logica della nostra metodologia di benchmark , questa volta applicata a una metrica specifica. Per i dettagli sull'architettura delle nostre funzioni Edge, consulta il nostro articolo pilastro sull'architetturaRust di Aurabaseo il nostro confronto Wasmtime vs Wasmer per le differenze architetturali tra i due runtime.
L'essenziale
Un avvio a freddo di WebAssembly aggiunge diverse fasi (caricamento, commit, compilazione o collegamento, creazione di un'istanza, prima chiamata) e due figure che non includono le stesse fasi non sono confrontabili, anche se visualizzano la stessa unità. Wasmer commercializza Instaboot come risposta di marketing diretto all'argomento, ma i suoi personaggi pubblici non sono inclusi qui senza una metodologia disaggregata. Aurabase esegue wasmtime versione 43 come dipendenza di produzione per le sue funzioni Edge (verificato in aura-functions/Cargo.toml), ma fino ad oggi non ha pubblicato alcun benchmark di avvio a freddo riproducibile. In questo articolo non vengono forniti dati Aurabase: l'argomento è il metodo.
Perché l'avvio a freddo di WebAssembly è diventato ancora una volta un argomento di marketing controverso
L'avvio a freddo è diventato ancora una volta un asse di differenziazione commerciale tra i runtime WebAssembly, non solo un argomento di ricerca accademica. Wasmer rende questo un punto di forza esplicito con una funzionalità chiamata Instaboot, presentata come una risposta diretta al problema dell'avvio a freddo.
Questo riflesso ricorda esattamente la dinamica già documentata nel nostro articolo sulla metodologia di benchmark del backend : diversi fornitori concorrenti mostrano i dati sulle prestazioni sulla propria pagina di prodotto, senza sempre specificare il protocollo che li ha prodotti. Un valore di avvio a freddo senza metodo non dimostra altro che un valore di latenza senza metodo.
Una cifra di partenza a freddo pubblicata su una pagina di marketing, senza materiale, senza carico di lavoro e senza una definizione chiara del punto di partenza e del punto finale della misurazione, è indistinguibile da uno slogan. Questo vale per tutti i tempi di esecuzione citati in questo articolo, incluso Aurabase nel giorno in cui viene rilasciata una figura.
Cosa misura effettivamente un avvio a freddo e perché la definizione cambia tutto
Una partenza a freddo non è una singola operazione: è una somma di fasi distinte, e non è detto che due fornitori misurino le stesse fasi con lo stesso nome.
| Caricamento | Ripristino del modulo .wasm: di rete, su disco o già presente in memoria |
|---|---|
| Validazione | Controllo della struttura del bytecode WebAssembly prima dell'esecuzione |
| Compilazione o collegamento | JIT al volo (Cranelift, LLVM) o collegamento di un artefatto già precompilato (AOT) |
| Istanziazione | Allocazione di memoria lineare, tabelle e globali, esecuzione di un'eventuale funzione di avvio |
| Prima chiamata | L'elaborazione della richiesta stessa, a volte inclusa nella cifra annunciata, a volte esclusa |
Una figura che conta solo l'istanziazione di un modulo già caricato e già compilato in memoria avrà un aspetto meccanicamente migliore di una figura che include il caricamento e la compilazione della rete. Nessuno dei due è falso di per sé: il problema si presenta quando li confrontiamo senza specificare quale dei due è stato misurato.
Cosa mostra la letteratura accademica e perché i suoi dati non sono confrontabili tra loro
Il lavoro accademico pubblicato come preprint su arXiv negli ultimi anni ha misurato il tempo di istanziazione dei moduli WebAssembly su diversi runtime. Il punto in comune tra questi lavori non è una cifra convergente: si tratta di una differenza significativa a seconda del runtime testato, della dimensione del modulo e dell'hardware utilizzato.
Non includiamo volontariamente in questo articolo cifre precise tratte da queste pubblicazioni. Senza aver ricontrollato accuratamente la metodologia di ciascun articolo al momento della stesura, ripubblicare un numero isolato riprodurrebbe esattamente il problema documentato in questo articolo: un numero senza contesto che ci permetterebbe di sapere cosa misura realmente.
Ciò che questa varianza apprende, invece, è direttamente utile: un avvio a freddo dipende fortemente dal contesto di misurazione, esattamente come richiamato dalla disciplina della parità ambientale descritta nel nostro articolo sulla metodologia generale (hardware identico, stessa regione, stesso stato della cache per tutti i sistemi confrontati).
Wasmtime, Wasmer, WasmEdge: diverse priorità di compilazione
I tre runtime WebAssembly autonomi più citati in questo dibattito non bilanciano la velocità di compilazione e le prestazioni di esecuzione nello stesso modo, il che spiega in parte perché i dati relativi all'avvio a freddo non si confrontano da termine a termine.
| Era tempo | Backend di compilazione di Cranelift, con storicamente un possibile percorso di precompilazione prima della distribuzione | Utilizzato in produzione da Aurabase per le funzioni Edge |
|---|---|---|
| Wasmer | Ha documentato a lungo diversi backend intercambiabili, incluso un backend progettato per la velocità di compilazione piuttosto che per le prestazioni di runtime | Markets Instaboot, un riavvio tramite snapshot di un'istanza già inizializzata |
| WasmEdge | Posizionamento pubblico focalizzato su un avvio rapido, con un proprio argomento competitivo | Runtime alternativo attivo anche in quest'area di marketing |
Queste architetture sono documentate pubblicamente dai progetti stessi. Non li abbiamo verificati nuovamente versione per versione per questo articolo e non costituiscono una classifica delle prestazioni. Spiegano solo perché tre valori di avvio a freddo visualizzati da tre diversi tempi di esecuzione possono essere tutti accurati e tuttavia non confrontabili tra loro.
Per i dettagli architettonici completi tra i due runtime più spesso opposti nelle discussioni serverless, vedere il nostro confronto dedicato Wasmtime vs Wasmer.
Cosa mostra Instaboot e cosa la sua sola pagina di prodotto non dimostra
Secondo il posizionamento del prodotto che Wasmer comunica pubblicamente, Instaboot ripristina un'istanza già inizializzata tramite un meccanismo di snapshot, anziché riavviare un avvio completo ad ogni richiesta. Si tratta di una vera e propria scelta architetturale coerente con il problema che si pone.
Ciò che questo articolo non fa, tuttavia, è ripetere un dato relativo alle prestazioni visualizzato nella pagina del prodotto Wasmer. Senza sapere quale hardware, quale carico di lavoro e quale protocollo di misurazione ha prodotto questa cifra, ripubblicarla commetterebbe esattamente l’errore documentato sopra: trattare un numero di marketing come un risultato di benchmark indipendente.
Una cifra come "avvio a freddo inferiore a 1 ms" è già circolata pubblicamente, anche nei precedenti contenuti di Aurabase, senza essere supportata da un benchmark riproducibile. Ora viene trattato internamente come non supportato. La stessa regola si applica a qualsiasi cifra visualizzata da un runtime concorrente, incluso Instaboot, purché non sia accompagnata da una metodologia disaggregata.
Cosa può dire oggi Aurabase riguardo alla propria partenza a freddo e cosa non può dire
Aurabase esegue le sue funzioni Edge su Wasmtime in produzione, non in un progetto pilota. Ecco esattamente cosa consente il deposito e dove finisce tale affermazione.
La dipendenza è dichiarata hard, con le funzionalità async e cranelift attivate, nelle dipendenze di produzione del servizio, non in un dev-dependency né in un commento:
Cosa non dice questo file: non esistono dati di avvio a freddo misurati secondo il protocollo descritto nella nostra metodologia di benchmark oggi nel repository per questo runtime. Fino alla pubblicazione di una misurazione datata, con percentili disaggregati, hardware e carico di lavoro, nessuna cifra Aurabase dovrebbe essere citata come caratteristica misurata del prodotto. Per l'architettura generale della piattaforma, consultare il nostro articolo pilastro Architettura Aurabase Rust. Per un confronto concreto tra WASM con avvio a freddo e contenitore con avvio a freddo, indipendentemente dalla questione metodologica qui affrontata, vedere il nostro articolo dedicato WASM vscontenitori.
Come leggere un numero di partenza a freddo prima di crederci
Sette domande da porre a qualsiasi figura di partenza a freddo, inclusa la nostra il giorno in cui ne pubblicheremo una.
- Quali fasi sono incluse? Caricamento della rete, validazione, compilazione, istanziazione, prima chiamata: una figura che ne conta solo una parte non è paragonabile a una figura che le conta tutte.
- Il modulo era davvero “freddo”? Un modulo già in memoria o nella cache del disco non verifica la stessa cosa di un modulo caricato per la prima volta.
- Compilazione JIT o artefatto precompilato (AOT)? Le due strategie hanno costi di avvio strutturalmente diversi.
- Cifra singola o distribuzione? Un miglior giro su dieci non ha lo stesso valore di un p95 su mille giri.
- Attrezzatura e regione specificate? Una figura senza specifiche hardware non può essere riprodotta da terzi.
- Confronto a parità di carico e topologia? Il confronto tra un runtime self-hosted e un servizio gestito senza segnalare distorce la lettura.
- Data e versione del runtime testato? Un dato senza data su un progetto che si evolve velocemente non significa più nulla dopo pochi mesi.
Domande frequenti
Fonti esterne citate: documentazione pubblica del prodotto Wasmer (Instaboot), documentazione pubblica del progetto Wasmtime (Bytecode Alliance), consultata in preparazione di questo articolo, senza un doppio controllo indipendente dei dati sulle prestazioni mostrati.