Chrome 96でWebAssembly Dynamic Tieringを試す準備が整いました
V8には、WebAssemblyコードを機械コードにコンパイルして実行できる2つのコンパイラが存在します。それは__Liftoff__(ベースラインコンパイラ)と__TurboFan__(最適化コンパイラ)です。LiftoffはTurboFanよりも高速にコードを生成できるため、迅速な起動時間を実現します。一方、TurboFanはより高速なコードを生成できるため、高いピークパフォーマンスが可能になります。
現在のChromeの設定では、WebAssemblyモジュールが最初に完全にLiftoffによってコンパイルされます。Liftoffコンパイルが終了すると、モジュール全体がバックグラウンドでTurboFanによってすぐに再コンパイルされます。ストリーミングコンパイルの場合、LiftoffがWebAssemblyコードをダウンロードよりも速くコンパイルすると、TurboFanコンパイルが早く開始されることがあります。初期のLiftoffコンパイルは迅速な起動時間を提供し、一方でバックグラウンドでのTurboFanコンパイルは可能な限り早く高いピークパフォーマンスを提供します。LiftoffやTurboFan、コンパイルプロセス全体についての詳細は、別のドキュメントで確認できます。
WebAssemblyモジュール全体をTurboFanでコンパイルすることで、コンパイルが完了した後には最適なパフォーマンスが得られますが、それには以下のようなコストが伴います:
- バックグラウンドでTurboFanコンパイルを実行するCPUコアが、ウェブアプリケーションのワーカーなどCPUを必要とする他のタスクをブロックする可能性があります。
- 重要でない関数のTurboFanコンパイルが重要な関数のTurboFanコンパイルを遅らせる可能性があり、それによりウェブアプリケーションが完全なパフォーマンスに到達するのが遅れることがあります。
- 一部のWebAssembly関数は決して実行されない可能性があるため、それらの関数のTurboFanコンパイルにリソースを費やすことは価値がないかもしれません。
動的ティアリング
動的ティアリングは、実際に複数回実行される関数のみをTurboFanでコンパイルすることで、これらの問題を改善します。この方法により、動的ティアリングはウェブアプリケーションのパフォーマンスにいくつかの方法で影響を与える可能性があります。例えば、動的ティアリングによりCPUの負荷を軽減し、WebAssemblyコンパイル以外の起動タスクがCPUをより多く使用できるようになることで、起動時間を短縮できます。一方で、重要な関数のTurboFanコンパイルを遅らせることで、パフォーマンスを低下させる可能性もあります。V8はWebAssemblyコードでオンスタックリプレースメントを使用しないため、例えばLiftoffコードのループで実行が停止することがあります。また、ChromeはTurboFanコードのみキャッシュするため、コンパイル済みWebAssemblyモジュールがすでにキャッシュに存在する場合でも、TurboFanコンパイルの資格を得られないすべての関数は起動時にLiftoffでコンパイルされます。
試してみる方法
動的ティアリングがウェブアプリケーションのパフォーマンスに与える影響を実験することを、興味のある開発者にお勧めします。これにより、早期に潜在的なパフォーマンスの低下を回避することができます。動的ティアリングは、Chromeをコマンドラインフラグ--enable-blink-features=WebAssemblyDynamicTiering
で実行することでローカルで有効化できます。
動的ティアリングを有効にしたいV8埋め込み者は、V8フラグ--wasm-dynamic-tiering
を設定することでこれを行うことができます。
オリジントライアルでの現場テスト
Chromeをコマンドラインフラグで実行するのは開発者が行うことのできることですが、エンドユーザーには期待すべきではありません。フィールドでアプリケーションを実験するには、オリジントライアルと呼ばれるものに参加することができます。オリジントライアルを利用すると特定のドメインに紐づいた特別なトークンを用いることで、エンドユーザーが特定のページでWebAssembly動的ティアリングを試すことができます。オリジントライアルを実行するための独自のトークンを取得するには、申請フォームを使用してください。
フィードバックをお願いします
この機能を試している開発者からのフィードバックを求めています。これにより、TurboFanコンパイルが役立つ場合と役立たない場合についてのヒューリスティクスを正しくすることが可能になります。フィードバックを送る最もよい方法は、問題を報告することです。