Mozilla Flux

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

TraceMonkeyのチューニングは難しい

最新のShiretoko(3.1b3pre, ID:20090303040349)では、"Bug 479109 - TM: Improve blacklist"や"Bug 477576 - Excessive memory peak with the Dromaeo string test"などが修正され、V8ベンチマークやDromaeoベンチマークでの成績が大きく向上した。

それだけなら嬉しいニュースなのだが、残念なことに反動が出てしまった。SunSpiderベンチマークでのスコアがガタ落ちしたのだ。"Bug 481103 - TM: Dromaeo v3 Sunspider massive slowdown after 2-28 merge"として既にバグが報告されている。

TraceMonkeyはいまだ開発途上にあり、今後チューニングが進めば、こうしたアンバランスは解消されていくだろう。しかし、問題は、このタイミングでFirefox 3.1 Beta 3がコードフリーズになる点にある。つまり、Beta 3は、SunSpiderベンチマークで結果が出せない状態でリリースされてしまう。筆者の環境では、Beta 2よりもスコアが悪い(『JavaScriptエンジンに対するPGOが復活』参照)。最初に調べたとき我が目を疑い、Shiretokoをクリーンインストールし直したが、変わらなかった。

SunSpiderは、IT関係のメディアでよく使われるベンチマークだ。Beta 3がリリースされた後、当然多くのメディアがこのベンチマークでテストを行うはずである。そこでは、Google ChromeやSafari 4 Public Betaが引き合いに出され、Firefox 3.1に否定的な評価が下される可能性は充分にある。ましてや、Beta 2よりもスコアが落ちたとなれば、よく調べもせずにMozillaの開発力を疑問視する記事も書かれるかもしれない。

以上の懸念の元となったデータをみていこう。まずは、今回の修正によって、V8ベンチマークのスコアは確かに向上した。『Safari 4 Public Betaの実力や如何に』で取り上げたShiretoko(3.1b3pre, ID:20090225031913)と比べてみよう。

20090303 20090225
Score 141 71.0
Richards 142 148
DeltaBlue 66.3 12.2
Crypto 343 36.8
RayTrace 136 105
EarleyBoyer 185 154
RegExp 97.4 119

総合スコアが倍になるという大きな進歩だ。ChromeやSafari 4にはまだ遠く及ばないものの、JITがオフの場合よりもスコアが悪くなる現象は解消された。

Dromaeoでもスコアの伸びは顕著で、2.5倍以上の値に達している。ベンチマークを走らせていても、スムーズに進むのを体感できるほどだ。

20090303 20090225
Total 29.10runs/s ±3.77% 11.17runs/s ±5.46%

次は、問題のSunSpiderである。『jit.chrome復活』で取り上げたShiretoko(3.1b3pre, ID:20090227033431)と比較してみる。

20090303 20090227
Total 2861.0ms +/- 0.8% 2187.4ms +/- 1.5%
3d 482.8ms +/- 4.1% 291.4ms +/- 1.4%
access 554.6ms +/- 0.8% 291.8ms +/- 3.0%
bitops 76.8ms +/- 2.1% 62.8ms +/- 1.7%
controlflow 98.8ms +/- 0.6% 99.4ms +/- 4.7%
crypto 343.0ms +/- 1.8% 133.0ms +/- 9.4%
date 287.2ms +/- 2.7% 285.6ms +/- 3.1%
math 98.2ms +/- 0.6% 101.0ms +/- 9.1%
regexp 148.4ms +/- 6.8% 147.2ms +/- 13.4%
string 771.2ms +/- 0.8% 775.2ms +/- 1.9%

一部の数値が非常に悪化しているのが見て取れる。トータルでも約3割ダウンした。不思議なのは、cryptoの項目のように、V8では劇的に向上する一方、SunSpiderでは大きく低下したものがある点だ。似たような処理をしているなら、ここまでの差は出ないはずで、ベンチマークの信頼性ともかかわってきそうだ。
(同日追記)この点については、dynamisさんのコメント参照。

ベンチマーク自体に手が入った可能性はないのだろうか。そう思って、Google Chrome 2.0.166.1(WebKit/530.1)でチェックしてみたのだが、「1533.4ms +/- 2.4%」という結果で、前回計測したときが「1530.6ms +/- 2.2%」だったことから、その可能性は否定された。

念のためJITをオフにした場合も調べたが、こちらもスコアが落ちている。TraceMonkey以外にも何かエンジン内に足を引っ張る原因があるのだろうか。

20090303 20090227
Total 5779.2ms +/- 0.4% 5655.4ms +/- 0.7%

JavaScriptエンジンをチューニングするのがいかに難しいか、浮き彫りになった。後味は悪いが、現実から目を背けることはできない。Beta 4が出るまでの約6週間、Firefox 3.1 Beta 3は厳しい情報戦を強いられることになりそうだ。