最新のShiretoko Nightly(3.5b4pre,ID:20090401043706)では、一日で82個ものバグが修正されたのだが、うち58個がJavaScriptエンジン関連で、実に7割を占める。
当然パフォーマンスに影響すると考えられたので、テストしてみた。その結果判明したのは、TraceMonkeyは崩れていたバランスが元に戻り、以前の力強さが蘇ったということだ。
『TraceMonkeyのチューニングは難しい』で記述したデータと順番に比較してみる。まずは、定番のSunSpiderベンチマークから。設定は、jit.contentがtrueで、jit.chromeがfalseである。
20090401 | 20090303 | 20090227 | |
---|---|---|---|
Total | 2176.2ms +/- 0.7% | 2861.0ms +/- 0.8% | 2187.4ms +/- 1.5% |
3d | 311.8ms +/- 0.7% | 482.8ms +/- 4.1% | 291.4ms +/- 1.4% |
access | 313.0ms +/- 2.4% | 554.6ms +/- 0.8% | 291.8ms +/- 3.0% |
bitops | 71.2ms +/- 2.3% | 76.8ms +/- 2.1% | 62.8ms +/- 1.7% |
controlflow | 99.2ms +/- 1.0% | 98.8ms +/- 0.6% | 99.4ms +/- 4.7% |
crypto | 115.8ms +/- 2.6% | 343.0ms +/- 1.8% | 133.0ms +/- 9.4% |
date | 315.8ms +/- 3.5% | 287.2ms +/- 2.7% | 285.6ms +/- 3.1% |
math | 98.4ms +/- 2.9% | 98.2ms +/- 0.6% | 101.0ms +/- 9.1% |
regexp | 128.6ms +/- 5.9% | 148.4ms +/- 6.8% | 147.2ms +/- 13.4% |
string | 722.4ms +/- 1.4% | 771.2ms +/- 0.8% | 775.2ms +/- 1.9% |
「2176.2ms +/- 0.7%」というスコアは、筆者の環境では過去最高だ。『強化されたPGOの効果は?』で取り上げたShiretoko Nightly(3.1b4pre, ID:20090310050816)は、「2877.8ms +/- 13.3%」だったので、ここから見ても大きな改善だが、信頼区間からみた不安定さがなくなったことのほうがむしろ重要だ。PGOによるチューニングとの相性も良くなったわけで、心強い。
ただ、JITを完全にオフにした場合を調べてみると、スコアは回復していない。こちらも改善されることが望ましいが、TraceMonkeyがメインになるのは間違いないので、優先順位が低いのはやむを得ない。
20090401 | 20090303 | 20090227 | |
---|---|---|---|
Total | 5790.4ms +/- 0.8% | 5779.2ms +/- 0.4% | 5655.4ms +/- 0.7% |
SunSpiderのスコアが向上したからといって、他のベンチマークの成績が元の木阿弥になるのでは、TraceMonkeyが改良されたとはいえない。そこで、例によってV8やDromaeoでも調べてみた。
まずは、V8から。総合スコアはわずかに落ちたが、誤差の範囲にも見える。少なくとも、以前のように100を切るような事態にはなっていない。
20090401 | 20090303 | 20090225 | |
---|---|---|---|
Score | 138 | 141 | 71.0 |
Richards | 131 | 142 | 148 |
DeltaBlue | 55.1 | 66.3 | 12.2 |
Crypto | 326 | 343 | 36.8 |
RayTrace | 150 | 136 | 105 |
EarleyBoyer | 159 | 185 | 154 |
RegExp | 121 | 97.4 | 119 |
Dromaeoではどうだろう。こちらは総合力が問われるので、成績が下がるのは好ましくないところだったが、ちゃんとスコアを維持している。
20090401 | 20090303 | 20090225 | |
---|---|---|---|
Total | 29.85runs/s ±4.38% | 29.10runs/s ±3.77% | 11.17runs/s ±5.46% |
まとめると、V8やDromaeoのスコアを保ったまま、SunSpiderのスコアだけがアップし、過去最高を記録した。JavaScriptチームの努力が実ったといえるだろう。Firefox 3.1 Beta 3のコードフリーズ直前に入った修正で、V8とDromaeoのスコアは大幅に上がっていた。今回の修正によって、そこにSunSpiderの向上分がストレートに乗る形となった。
さらにいえば、Trunkでは修正されたJavaScriptのバグについて、まだまだShiretokoに反映されていないものは多い。また、未解決のP1 Blockerも残っている。Firefox 3.5 Beta 4のコードフリーズまでに、SunSpiderのスコアは今回よりも数%程度良くなることだろう。