ニュース

「Google Chrome 91」はパフォーマンスが最大23%向上 ~「V8」エンジンに2つの大きな改善

新しいコンパイラー「Sparkplug」とメモリ配置の最適化「Short builtins」

公式ブログ「Chromium Blog」

 「Google Chrome 91」はスクリプトエンジン「V8」の改良により、パフォーマンスが最大23%向上しているという。米Googleは5月27日(現地時間)、公式ブログ「Chromium Blog」の記事でその詳細を解説している。

 高速なWebブラウザーを実現するのに重要となるのは、Webページで大量に使われているJavaScriptをいかに早く実行するかだ。「Chrome」でそれを担うのは「V8」エンジンだが、「Chrome 91」(M91)では新しい「Sparkplug」コンパイラーと、「Short builtins」と呼ばれるメカニズムの導入でさらなる高速化を果たしたという。

Sparkplug

 「V8」は3年前より、「Ignition」と「Turbofan」という2つのコンパイラーを組み合わせた二段構えのシステムを採用している。「Ignition」はバイトコードインタープリターで、送られてきたスクリプトへ真っ先に飛びつき、それを片っ端から処理していくのが任務だ。一方、「Turbofan」はスクリプトの実行中に収集された情報に基づき、より高速な機械語を生成する最適化コンパイラーだ。起動するのは遅いが、「Ignition」の処理を大きく加速させる。

「Ignition」と「Turbofan」に加え、新しいコンパイラー「Sparkplug」を導入

 このように、2つのコンパイラーには長所と短所がある。その間を埋めるのが、「V8」v9.1で導入される新しいコンパイラー「Sparkplug」の仕事だ。このコンパイラーはスクリプトの実行時に収集した情報に依存しない。そのため「Turbofan」にくらべ最適化という点では劣るが、早く立ち上がり、比較的高速なコードを生成する。

Short builtins

 「V8」のJIT(Just-in-Time)コンパイラーによって生成されたマシンコードは、仮想マシン(VM)が所有するメモリページへ割り当てられる。JITコードはメモリ使用量を抑えるため、「Chrome」のバイナリに埋め込まれたマシンコードのヘルパースニペット「ビルドイン」(builtins)の助けを借りながらさまざまな処理を行うが、実は組込みのビルドインとJITコードとの間の関数呼び出しには、分岐予測ロジックなどのCPUの最適化技術が失敗する可能性があり、パフォーマンスの面でのペナルティがかなりあることが判明したという。ペナルティの影響はCPUアーキテクチャーによって異なるが、とくにApple M1チップでは大きくなるようだ。

 そのため、「V8」v9.1では一時的な対策として、十分なメモリを備えたデスクトップ環境でビルドインをVMのメモリ領域へコピーするようになっている。

「Short builtins」によるベンチマークスコアの改善

 ただし、組込みのビルドインを止めると「V8」インスタンス当たり1.2MBから1.4MBほどメモリ使用量が増加してしまう。そこで長期的にはJITコードを「Chrome」のバイナリの近くに配置し、組込みのビルドインを復活させることで、省メモリとパフォーマンス確保を両立させるという。