これは、 ベンチマーク手法の論理的な継続であり、今回は特定のメトリクスに適用されます。 Edge 関数のアーキテクチャの詳細については、Aurabase のRust アーキテクチャに関する柱記事、または 2 つのランタイムのアーキテクチャの違いについては、 Wasmtime と Wasmer の比較を参照してください。
必需品
WebAssembly のコールド スタートでは、いくつかのフェーズ (ロード、コミット、コンパイルまたはリンク、インスタンス化、最初の呼び出し) が追加され、同じフェーズが含まれていない 2 つの図は、同じ単位が表示されている場合でも比較できません。 Wasmer は、この主題に対する直接的なマーケティング対応として Instaboot を宣伝していますが、その著名人は、細分化された方法論なしにここには含まれていません。 Aurabase は、Edge 機能の本番依存関係として wasmtime バージョン 43 を実行します ( aura-functions/Cargo.tomlで検証) が、現在まで再現可能なコールド スタート ベンチマークを公開していません。この記事では Aurabase の数値は示されていません。主題はメソッドです。
WebAssembly のコールド スタートが再びマーケティング上の議論の的になった理由
コールド スタートは再び、単なる学術研究の対象ではなく、WebAssembly ランタイム間の商業的な差別化の軸となっています。 Wasmer は、コールド ブートの問題に対する直接の答えとして提示された Instaboot と呼ばれる機能によって、これを明確なセールス ポイントにしています。
この反射は、バックエンド ベンチマーク方法論に関する記事ですでに文書化されている動的な動きをまさに思い出させます。: いくつかの競合ベンダーは、パフォーマンス数値を生成したプロトコルを常に指定せずに、自社の製品ページにパフォーマンス数値を表示しています。メソッドのないコールド スタートの数値は、メソッドのないレイテンシの数値にすぎません。
マーケティング ページで公開されるコールド スタートの数値は、資料も作業負荷もなく、測定の開始点と終了点の明確な定義もなく、スローガンと区別がつきません。これは、図が発表された日の Aurabase を含む、この記事で引用されているすべてのランタイムに適用されます。
コールド スタートが実際に何を測定するのか、そしてその定義がすべてを変える理由
コールド スタートは単一の操作ではありません。これは異なるフェーズの合計であり、2 つのサプライヤーが同じ名前で同じフェーズを測定するとは限りません。
| 読み込み中 | .wasm モジュールのリカバリ: ネットワーク、ディスク、またはメモリ内にすでに存在する |
|---|---|
| 検証 | 実行前に WebAssembly のバイトコード構造を確認する |
| コンパイルまたはリンク | オンザフライの JIT (Cranelift、LLVM) またはすでにプリコンパイルされたアーティファクトのリンク (AOT) |
| インスタンス化 | リニア メモリ、テーブル、グローバルの割り当て、可能な開始関数の実行 |
| 最初の電話 | リクエスト自体の処理(発表された数値に含まれる場合もあれば、除外される場合もある) |
すでにメモリにロードされ、すでにコンパイルされているモジュールのインスタンス化のみをカウントする図は、ネットワークのロードとコンパイルを含む図よりも機械的に見栄えが良くなります。どちらもそれ自体は誤りではありません。問題は、2 つのどちらが測定されたかを特定せずに比較すると発生します。
学術文献が示していることと、その数値が互いに比較できない理由
近年、arXiv でプレプリントとして公開された学術研究では、さまざまなランタイムでの WebAssembly モジュールのインスタンス化時間を測定しました。これらの作業の共通点は収束する数字ではなく、テストされたランタイム、モジュールのサイズ、使用されるハードウェアに応じて大きな違いがあります。
私たちは自主的に、これらの出版物から取得した正確な数値をこの記事に含めることはありません。執筆時に各論文の方法論を徹底的に再確認せずに、孤立した数値を再公表すると、この記事で説明している問題が再現されることになります。つまり、実際に何を測定するのかを知ることを可能にするコンテキストのない数値です。
一方、この差異が学習することは直接役に立ちます。コールド スタートは、一般的な方法論の記事で説明した 環境パリティ の規律 (比較したすべてのシステムで同一のハードウェア、同じリージョン、同じキャッシュ状態) で思い出したとおり、測定コンテキストに強く依存します。
Wasmtime、Wasmer、WasmEdge: コンパイルの異なる優先順位
この議論で最も引用されている 3 つのスタンドアロン WebAssembly ランタイムは、コンパイル速度と実行パフォーマンスのバランスが同じではありません。これが、コールド スタートの数値が用語ごとに比較されない理由の一部を説明しています。
| ワサムタイム | Cranelift コンパイル バックエンド (歴史的には、デプロイメント前にプリコンパイル ルートが可能) | Aurabase によるエッジ機能の本番環境で使用されます |
|---|---|---|
| ワスマー | 実行時のパフォーマンスではなくコンパイル速度を重視して設計されたバックエンドを含む、いくつかの交換可能なバックエンドを長い間文書化してきました。 | Markets Instaboot、すでに初期化されたインスタンスのスナップショットによる再起動 |
| ワズムエッジ | 独自の競争力のある議論を伴う、迅速なスタートに焦点を当てたパブリック ポジショニング | 代替ランタイムもこのマーケティング領域で活躍 |
これらのアーキテクチャは、プロジェクト自体によって公的に文書化されています。この記事ではバージョンごとに再検証は行っておらず、パフォーマンス ランキングを構成するものではありません。これらは、3 つの異なるランタイムによって表示される 3 つのコールド スタートの数値がすべて正確であるにもかかわらず、互いに比較できない理由を説明しているだけです。
サーバーレスの議論で最も頻繁に対立する 2 つのランタイム間の完全なアーキテクチャの詳細については、専用の比較 Wasmtime と Wasmerを参照してください。
Instaboot が示していることと、その製品ページだけでは証明されていないこと
Wasmer が公に伝えている製品の位置付けによれば、Instaboot はリクエストごとに完全な起動を再開するのではなく、スナップショット メカニズムによってすでに初期化されているインスタンスを復元します。これは、対象とする問題と一致する、実際のアーキテクチャ上の選択です。
ただし、この記事では、Wasmer 製品ページに表示されているパフォーマンスの数値を繰り返すことはしません。この数値がどのようなハードウェア、どのようなワークロード、どのような測定プロトコルで生成されたのかが分からないまま、この数値を再公開すると、マーケティング数値を独立したベンチマーク結果として扱うという、まさに上記の間違いを犯すことになります。
「コールドスタートは 1 ミリ秒未満」などの数値は、再現可能なベンチマークの裏付けなしに、以前の Aurabase コンテンツを含めてすでに公に出回っています。現在、内部的にはサポートされていないものとして扱われます。細分化された方法論が伴わない限り、同じルールが、Instaboot を含む競合するランタイムによって表示されるあらゆる図に適用されます。
Aurabase が自社のコールド スタートについて今日言えること、言えないこと
Aurabase は、パイロット プロジェクトではなく、本番環境の Wasmtime でエッジ機能を実行します。まさにこの出願で認められる内容と、その主張がどこで終わるのかがここにあります。
依存関係は、dev-dependency やコメントではなく、サービスの実稼働依存関係で、有効化された機能 async および cranelift とともにハード宣言されます。
このファイルに記載されていないこと: ベンチマーク方法論 で説明されているプロトコルに従って測定されたコールド スタートの数値は、現在このランタイムのリポジトリには存在しません。パーセンタイル、ハードウェア、ワークロードを細分化した日付の測定結果が公開されるまでは、製品の測定された特性として Aurabase の数値を引用すべきではありません。プラットフォームの一般的なアーキテクチャについては、柱となる記事 Aurabase Rust アーキテクチャを参照してください。コールド スタート WASM とコールド スタート コンテナーの具体的な比較については、ここで取り上げる方法論的な質問とは別に、専用記事 WASM vsコンテナーを参照してください。
コールド スタート番号を信じる前に読み取る方法
リリース日のものも含め、コールド スタートのフィギュアに尋ねるべき 7 つの質問。
- どのようなフェーズが含まれていますか? ネットワークの読み込み、検証、コンパイル、インスタンス化、最初の呼び出し: 一部のみをカウントした図は、それらすべてをカウントした図と比較できません。
- モジュールは本当に「コールド」でしたか? すでにメモリまたはディスク キャッシュにあるモジュールは、初めてロードされたモジュールと同じことをテストしません。
- JIT コンパイルまたはプリコンパイル済みアーティファクト (AOT)? 2 つの戦略には構造的に異なる初期コストがあります。
- 1 桁ですか、それとも分布ですか? 10 回の実行で最高の実行は、1,000 回の実行での p95 と同じ値にはなりません。
- 機器と地域は指定されていますか? ハードウェア仕様のない図は第三者による複製ができません。
- 等しい負荷とトポロジでの比較? セルフホステッド ランタイムをレポートせずにマネージド サービスと比較すると、解釈が歪められます。
- テストされたランタイムの日付とバージョン? 急速に進化しているプロジェクトの日付のない数字は、数か月後には何の意味も持ちません。
よくある質問
引用された外部ソース: 公開製品ドキュメント Wasmer (Instaboot)、公開プロジェクト ドキュメント Wasmtime (Bytecode Alliance)、この記事の準備のために参照しましたが、示されているパフォーマンス数値を個別に再確認することはありません。