Mozilla Flux

Mozilla関係の情報に特化したブログです。

強化されたPGOの効果は?

(09/04/25追記)
Bug 472706のコメントと1.9.1 Branchへのチェックイン状況を見直してみたところ、どうやらBeta 4での修正は一部の設定を変更しただけにとどまっており、新プロファイルはまだ適用されていない。パフォーマンスが向上していなくても当然だったわけだ。3月上旬から動きはなく、Firefox 3.5に新プロファイルは適用されないかもしれない。

Firefox 3からは、PGO(プロファイルに基づく最適化)という手法によって、処理速度の向上が図られた。Firefox 3.5では、使用されるプロファイルが改善されたことで、さらなるスピードアップが期待されている。

具体的には、"Bug 472706 - add better profiling input for spidermonkey in PGO builds"がそれだ。『JavaScriptエンジンに対するPGOが復活』で紹介したときは、Trunkだけにしかパッチが適用されていなかったが、最新のShiretoko Nightly(3.1b4pre, ID:20090310050816)でBranchにも取り入れられた。つまり、Firefox 3.5 Beta 4からは新プロファイルによる最適化が行われる予定だ。

従来、プロファイルを作成する段階で実行されていた処理はごく単純なものだった。Firefoxを起動し、ほぼ空のHTMLページを読み込んで、数秒後にシャットダウンする。たしかに効果はあったが、実稼働環境のシミュレーションとしては不十分だったといえる。

そこで、新プロファイルでは、起動後に"Blueprint test pages"の表示とSunSpiderベンチマークの実行を加えた。前者はCSSの表示性能をチェックするもので、後者はJavaScriptのスピードを計測するものだ。実際のWebページにはスタイルシートやJavaScriptが含まれているケースがほとんどなので、実稼働環境に近いプロファイルになったわけだ。

Bugzillaのコメントでは、コンテンツの表示が10〜20%高速化したとの報告もあったので、例によってベンチマークも使いながらテストしてみた。それによってわかったのは、表示の高速化は多少感じられるものの、ベンチマークには反映されないということだ。

多くのWebページで、読み込まれたデータが表示されるまでの時間が少し短縮されている。表示も滑らかに行われる印象だ。とはいえ、コンテンツの表示速度はFirefox 3もかなり速いので、CPUパワーが有り余っているような環境だと、違いが出ないかもしれない。

一番いいのはベンチマークの数字が改善されることなのだが、残念ながらケースによっては多少悪くなるものもみられた。JavaScriptの処理について、『TraceMonkeyのチューニングは難しい』で取り上げたShiretoko(3.1b3pre, ID:20090303040349)と結果を比較してみよう。

20090310 20090303
SunSpider 2877.8ms +/- 13.3% 2861.0ms +/- 0.8%
Dromaeo 27.27runs/s ±4.11% 29.10runs/s ±3.77%
V8 147 141

SunSpiderに特化したチューニングがなされたといってもおかしくない状況で、数値が変わらないのは不思議だ。しかも、「+/- 13.3%」と安定しない。実は何度か計測し直したのだが、常に±10%以上の信頼区間という結果になる。新プロファイルの影響かまでは不明なものの、Dromaeoの成績が下がっていることからしても、あまりいい傾向とはいえないような気がする。

筆者としては、新プロファイルをこのまま維持することにはあまり賛成できない。TraceMonkeyのチューニングと同じで、一部の処理に特化したためバランスを崩したおそれがあるからだ。さらに手を入れるか、それができないのなら思い切ってパッチを撤回することも検討されていいと思う。