Mozilla Flux

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

高負荷環境に強いFirefox 45 速度重視なら64bit版も選択肢に

当ブログでは、Firefoxの延長サポート版(ESR)のメジャーアップデート時期を開発の区切りとみて、Web上で実行可能なベンチマークの測定結果を公開している。Firefox 45がリリースされた今回は、Firefox 38との比較を行う。また、Windows向け64bit版が「各国語版のFirefoxをダウンロード」のページで公開されるようになり、既にWindows版Firefoxユーザーの約3.5%を占めている状況を踏まえ、64bit版も比較対象に含めた。

検証を行った具体的なバージョンを挙げると、32bit版のFirefox 38.6.1(ビルドID:20160210125511)、32bit版のFirefox 45.0 RC2(ビルドID:20160303134406、ユーザーエージェント:Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0)、それに64bit版のFirefox 45.0 RC2(ビルドID:20160303134406、ユーザーエージェント:Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0)である。

動作環境についてだが、OSはWindows 8.1 Update 1(64bit版)で、使用したハードウエアは、CPUがIntel Core i7 4800MQ 2.70GHz、GPUがIntel HD Graphics 4600(ドライバのバージョン:10.18.10.3338)、メモリ容量が16.0GB、ストレージがSeagate製SATA-IIIのHDDである。GPU描画支援にはDirect3D 11が、Moz2DにはDirect2D 1.1が、それぞれ使用されている。

測定にあたって対象ごとに新規プロファイルを用意し、初期設定からフォントをメイリオに変更したほか、dom.max_script_run_timeの値を0にした(テストが途中で中断されるのを防ぐため)。また、アドオンはすべて無効化し、プラグインはShockwave Flash 20.0 r0を「常に有効化する」に設定して、それ以外は基本的に無効化したが、自動的にインストール/有効化されるOpenH264 Video Codec 1.5.3とPrimetime Content Decryption Module 15(ESRには存在せず、64bit版はバージョン16)を有効のままにしている。

測定の際には、Turbo Boost機能を無効化し(参照:Surface Pro 3 の Turbo Boost を無効化する)、定格の動作周波数でPCを動作させた。画面サイズは1920×1080で、ウィンドウは最大化している。なお、各ベンチマークの実行後はFirefoxを終了させて、メモリ上に前のベンチマークが残らないようにした。

最後に、対象となるベンチマークは、前回の記事で用いたものから一部を入れ替えた。

ページの読み込み速度およびメモリ使用量

10のWebサイトを同時に開いて、読み込み中であることを示すアイコン(throbber)が消えるまでの時間を手動で計測した(秒数の小数点以下は切上げ)。同時に、10サイトを表示させた場合と、単サイトを表示した場合のメモリ使用量もチェックした。

具体的な手順は、次のとおり。以下の10サイトをその記載順にフォルダ内にブックマークしたバックアップファイル(JSON形式)をインポートし、「タブですべて開く」で10サイトをいっせいに読み込む。throbberが消えるまでの時間を計測し、完了したらFirefoxのホームページは閉じ、各タブをクリックしてWebページを実際に画面に表示させる。つまり最後に表示されるのはWikipedia(日本語版)になる。

1分間そのまま放置した後、新しいタブを開いてabout:memoryを呼び出し、"Show memory reports"のMeasureボタンをクリックし、Main Processのresidentの値を見る。

そして、「他のタブをすべて閉じる」でYahoo! JAPAN以外のWebページはすべて閉じる。1分間そのまま放置した後、再び新しいタブを開き、about:memoryを呼びだしてMain Processのresidentの値を見る。Firefoxをいったん終了させ、再起動後に上記10サイトを同じ手順で開いて、throbberが消えるまでの時間を計測する。一連の手順を実行した結果を以下に示す。

Fx 38(32bit) Fx 45(32bit) Fx 45(64bit)
読込時間(1回目) 43 秒 39 秒 36 秒
読込時間(2回目) 37 秒 33 秒 32 秒

Fx 38(32bit) Fx 45(32bit) Fx 45(64bit)
使用メモリ(10タブ) 537.29 MB 546.36 MB 697.04 MB
使用メモリ(単タブ) 332.39 MB 359.13 MB 455.75 MB

今回は、開く対象となるWebサイトを一部入れ替えており、既存のサイトもHTTPS接続に対応しているものはそちらのURLを指定しているので、従来よりも読み込みの際に負荷がかかっている。そのような中、Firefox 45はFirefox 38よりも読み込み時間が短縮されており、しかも64bit版のほうが結果がよかった。

他方、メモリ使用量は引き続き増加傾向にある。特に64bit版は使用メモリが多い。もっとも、多いといってもプラス3割程度であり、64bit版がサポートしているWindows 7以降の環境で問題になることは少ないだろう。

ストレージ

HTML5 Offline Storage Benchmarkは、オフラインストレージの性能を計測するベンチマークだ。localStorage、WebSQLおよびIndexedDBを対象にできるが、ここではIndexedDBの結果(主に1ミリ秒あたりに処理されたオペレーション数)を掲載する。

Fx 38(32bit) Fx 45(32bit) Fx 45(64bit)
Clear 343.90 ms 28.02 ms 101.74 ms
Inject-L 0.01 op/ms 0.58 op/ms 0.52 op/ms
Inject-S 0.01 op/ms 1.10 op/ms 0.89 op/ms
InjectBulk-L 0.58 op/ms 2.67 op/ms 2.60 op/ms
InjectBulk-S 0.65 op/ms 5.59 op/ms 6.52 op/ms
Lookup 0.95 op/ms 9.02 op/ms 9.43 op/ms
Lookup2 0.94 op/ms 12.39 op/ms N/A

Firefox 45が大幅に高速化しているのが見てとれる。Write-Ahead Logging(WAL)のサポート(Bug 866846)や、OSにデータの書き込みを指示した時点でcompleteイベントが発火する仕様への変更(Bug 1112702)といった改良が実を結んだのだろう。

64bit版は32bit版と比較してパフォーマンスで劣る項目が多く、しかも最後のテストで引っかかって完走できなかった。

レイアウトおよび描画処理

HTML5 Canvas

CanvasMark 2013 version 1.1は、HTML5ゲームでよく使用される処理(ビットマップ、Canvas描画、αブレンディングなど)に対するレンダリング・パフォーマンスをテストする。

Fx 38(32bit) Fx 45(32bit) Fx 45(64bit)
CanvasMark Score 9646 10274 11360

64bit版Firefox 45の良好なスコアに目がいくが、32bit版Firefox 45も約6.5%アップと健闘している。

次に、Canvas Cycleは、HTML5 Canvas上に8bitのカラーパレットを用いたアニメーションを表示し、サウンドも鳴らすデモだ(解説)。オプションを表示させると秒間フレーム数(FPS)が出るので、"Jungle Waterfall - Morning"を初期設定のまま走らせてみた。

Fx 38(32bit) Fx 45(32bit) Fx 45(64bit)
秒間フレーム数 89 - 94 fps 84 - 90 fps 95 - 100 fps

32bit版同士の比較だとFirefox 45がパフォーマンスダウンした結果になった。64bit版が強いのはCanvasMarkと同様だ。

WebGL

Test Drive : Microsoft Edge DevからFishGLをピックアップし、水槽内の魚の数を150匹に設定してテストを実行した。 このテストは、主にWebGLに関する処理性能を測定する。

Fx 38(32bit) Fx 45(32bit) Fx 45(64bit)
秒間フレーム数 46 - 49 fps 50 - 52 fps 51 - 53 fps

Firefox 45のほうが若干FPSが高めに出ている。32bit版と64bit版の差もあまりないが、64bit版のほうがわずかながらスムーズに動作する。

次に、Unity WebGL Benchmarksでの結果を見てみよう。このベンチマークは、Unityの開発したグラフィックスエンジンが一定時間内にどの程度のタスクを処理できるかをテストするものだが、Unity Blogの記事によれば、最新の2015年版は、Unity 5.3がベースになっているらしい。

Fx 38(32bit) Fx 45(32bit) Fx 45(64bit)
Overall Score 51778 53912 66441

上記Unity Blogの記事にも出ているのだが、64bit版Firefoxのスコアが非常によい。同じバージョンの32bit版と比較して23%も高いのだから驚きだ。Webゲームの開発者からすれば、早く64bit版が普及してほしいところだろう。

JavaScript/DOM処理

JavaScript

Octane JavaScript Benchmark は、Google製のJavaScriptベンチマークで、バージョン2.0はスループットに加えてレイテンシも重視している。言い換えれば、Webアプリのピーク性能だけでなく、動作のスムーズさも評価の対象となる。

Fx 38(32bit) Fx 45(32bit) Fx 45(64bit)
Octane Score 23938 21804 22446
Richards 28295 7968 25107
Deltablue 32755 21138 24080
Crypto 23707 24506 23080
Raytrace 45731 83249 62910
EarleyBoyer 32404 31790 26815
Regexp 1969 2628 2533
Splay 14318 16021 15027
SplayLatency 20027 18935 17658
NavierStokes 27454 28464 28938
pdf.js 14788 11038 11516
Mandreel 22680 21881 22923
MandreelLatency 26517 22255 25565
GB Emulator 47972 53807 46990
CodeLoad 16128 14208 14958
Box2DWeb 43918 40665 41002
zlib 45279 51609 57127
Typescript 27280 26614 18312

Firefox 45はFirefox 38よりもスコアが低下してしまった。その落ち込み具合は、64bit化でもカバーできていない。個別の項目を見ると、32bit版Firefox 45はスコアの上下が激しく、開発を進めるうちにチューニングが偏ってしまったか。ただ、64bit版は32bit版ともまた違う傾向を示しており、こちらはコンパイル時の最適化が影響している可能性が考えられる。

次に、JetStream 1.1を採り上げる。JetStreamはWebKitチームが提供するベンチマーク・スイートで、SunSpider 1.0.2やOctane 2.0からも一部のベンチマークを取り入れ、スループットとレイテンシの双方を計測する。

Fx 38(32bit) Fx 45(32bit) Fx 45(64bit)
Score 143.14 ± 10.196 137.21 ± 5.4291 140.88 ± 4.3790

Octane 2.0と同じ傾向の結果となった。Firefox 39から45までの間に加えられた改良は、これらのベンチマークとは今ひとつ噛み合わなかったようだ。

JavaScript+DOM

Speedometer 1.0は、WebKitチームが提供するベンチマークで、DOMオブジェクトの操作に焦点を当て、Webアプリの応答性を測定する。jQueryなど6つのポピュラーなJavaScriptフレームワークを採用し、ユーザーの行動をシミュレートするという。

Fx 38(32bit) Fx 45(32bit) Fx 45(64bit)
Runs / Minute 52.8 ± 1.2 43.1 ± 0.82 40.4 ± 0.80

Firefox 45の成績が振るわない。64bit版のほうが成績が悪くなってしまっているのは、処理が繰り返される中で不安定さが出たためか。

次に、Esprima: Speed Comparisonsは、EsprimaをはじめとするJavaScriptパーザを用いて、jQuery.Mobile 1.4.2、Angular 1.2.5およびReact 0.13.3という3つのフレームワークを処理させた結果を示すものだ。Esprimaの作者が、自分のパーザの優秀さを示す目的で作成したベンチマークのようだが、ここではパーザ同士を比較しても意味がないので、Esprima 2.7.2による処理結果のみを掲載する。

Fx 38(32bit) Fx 45(32bit) Fx 45(64bit)
処理時間(ミリ秒) 271.7 ms 254.4 ms 332.0 ms

Speedometerとは異なり、32bit版Firefox 45が最も高速だった。一方、64bit版が低速という結果では共通しており、興味深い。

asm.js

Emscriptenプロジェクトの一環として公開されているベンチマーク・スイートMASSIVE v1.2を走らせて、asm.jsの処理性能を見る。このベンチマークは大規模なasm.jsコードに特化しており、Poppler、SQLite、LuaとBox2Dのコードをベースに、スループットだけでなく、読み込み時間や読み込み中の応答性、パフォーマンスの一貫性なども計測対象とする。

Fx 38(32bit) Fx 45(32bit) Fx 45(64bit)
Score 4963 5242 5630

Firefox 45が順当な伸びを示し、それよりもさらに64bit版の成績がよい。asm.jsの処理を担当するOdinMonkeyは、処理の非同期化(Bug 1157624)や並列化(Bug 1181612)が進んでおり、Mozillaが開発に力を入れている部分では、きっちり結果を出してきている感じがある。

総合的なベンチマーク・スイート

Peacekeeper

Peacekeeperは、Futuremarkが提供する老舗のWebベンチマークだ。現在ではサポートが終了しており、記事で取り上げるのも今回が最後となる。

Fx 38(32bit) Fx 45(32bit) Fx 45(64bit)
Points 4576 4227 4602
Rendering 65.58 62.63 68.15
HTML5 Canvas 44.48 44.56 46.14
Data 54069.53 41189.55 51127.61
DOM operations 26477.69 27680.64 29537.70
Text parsing 480496.22 423914.43 434568.08

総合ポイントでは32bit版Firefox 45のスコアが低下している。Firefox 31と38とを比較したときは、Firefox 38で大幅な進歩が見られたので、今回の結果は残念である。特に、前回は伸びが目立ったDataやText parsingの項目で落ち込みが認められ、バランスよくパフォーマンスを引き上げることの難しさをうかがわせる。

Browsermark

Browsermark 2.1.3は、フィンランドのBasemark社が提供する総合ベンチマークで、実環境のパフォーマンスを計測することに焦点を当てているという。計測の対象は、CSS、DOM、グラフィックス、JavaScriptなど。

Fx 38(32bit) Fx 45(32bit) Fx 45(64bit)
Score 4213 4152 4295

32bit版Firefox 45は、若干ではあるがスコアが下がった。64bit化でカバーできる水準である点を含め、Peacekeeperと似たような結果となった。

RoboHornet

RoboHornet RH-A1は、Benchmark.jsベースの総合ベンチマークで、α版だが完成度は高い(FAQ)。ここでは、標準的なCore Suiteを選んで計測した。

Fx 38(32bit) Fx 45(32bit) Fx 45(64bit)
RoboHornet index 87.50 94.05 109.02
Add Rows to Table 1.37 3.42 1.32
Add Columns to Table 1.72 1.49 1.61
Descendant Selector 30.51 28.54 29.96
2D Canvas toDataURL 4.60 4.56 4.81
2D Canvas clearRect 3.89 5.62 14.54
innerHTML Table 4.01 3.64 3.97
Table scrolling 5.06 5.48 6.61
Resize columns 6.19 5.26 6.01
Object Scope Access 2.70 2.72 2.68
ES5 Property Accessors 6.64 12.31 15.10
Argument instantiation 2.51 2.37 2.96
Animated GIFS 1.06 0.70 1.16
offsetHeight triggers reflow 0.99 1.45 1.60
DOM Range API 3.42 3.41 3.57
Write to localStorage 7.61 7.82 7.89
Read from localStorage 5.22 5.26 5.25

負荷の大きいこのテストでは、総合スコアでFirefox 45がFirefox 38を上回った。引き続きES5 Property Accessorsが高い数値を示しており、重点的な改良箇所なのかもしれない。64bit版は全般的に32bit版を上回るスコアを出し、一部の項目では大きく上回ったことで、最終的に大きな差がついた。

WebXPRT 2015

WebXPRT 2015 v1.998.2は、米Principled Technologies社が提供するWebベンチマークである。オフィスワーカー向けWebアプリを念頭に置いたらしきタスク設定となっており、各ベンチマークを繰り返し7回実行することで、判定の精度を高めている。以下の表で、総合スコアは数値が大きいほうがよいのに対し、個別の項目は処理に要する時間(ミリ秒)を示しており、数値が小さい方がよい。

Fx 38(32bit) Fx 45(32bit) Fx 45(64bit)
Overall Score 351 +/- 10 365 +/- 5 412 +/- 7
Photo Enhancement 361 ms +/- 3.29% 451 ms +/- 2.14% 434 ms +/- 2.37%
Organize Album 2616 ms +/- 17.38% 1805 ms +/- 1.65% 1892 ms +/- 6.99%
Stock Option Pricing 298 ms +/- 2.82% 318 ms +/- 2.68% 277 ms +/- 2.21%
Local Notes 111 ms +/- 3.66% 135 ms +/- 1.18% 98 ms +/- 2.36%
Sales Graphs 677 ms +/- 1.87% 656 ms +/- 1.56% 577 ms +/- 1.94%
Explore DNA Sequencing 3157 ms +/- 5.71% 2270 ms +/- 4.16% 1953 ms +/- 1.5%

総合スコアでFirefox 45がFirefox 38を上回った。いちおう誤差の可能性も残るが、Organize Albumの項目で明らかに差がついており、改良されていると見てよいのではないか。64bit版でさらに高いスコアとなるのは、一部の項目(Sales GraphsやExplore DNA Sequencing)で大きくポイントを稼いだためである。

総合評価

Firefox 38がほぼ全面的にFirefox 31よりも好成績となっていたのと比べると、32bit版Firefox 45は、スコアが伸びたベンチマークもあれば逆のベンチマークもあって、すっきりしない。Mozillaの開発リソースがマルチプロセス機能(Electrolysis:e10s)*1やAsync Pan/Zoom(APZ)*2、WebAssembly*3などにつぎ込まれる中、パフォーマンス的にインパクトを与える新機能が入らなかった事情を反映しているとみられる。

とはいえ、32bit版Firefox 45がRoboHornetやWebXPRT 2015といった重量級のベンチマークで底力を見せたのは、明るい材料だ。ページの読み込み速度をテストした結果も合わせて考えると、Firefox 45は高い負荷がかかってもパフォーマンスを維持できる強みを持っているのではないだろうか。

他方、今回驚かされたのは、64bit版Firefox 45のポテンシャルの高さだ。筆者の知る限り、64bit版でのみ高パフォーマンスを発揮するようなチューニングは施していないはずで、コンパイラがはき出すコードが64bit版Windowsにうまく適合しているとしか考えられない。メモリ消費量が増加するほか、動作に不安定さもみられ、品質的にはβ版のレベルだが、プラグインによる制約が薄れつつある今、速度を優先するなら64bit版も選択肢になりそうだ。

次のESRは、Firefox 52がベースとなる。Mozillaは、最近、"Great or Dead"を合い言葉に、Firefoxの古い機能やマイナーな機能をカットする一方、Go Fasterプロジェクトを展開し、新機能を迅速に提供しようとしている。おそらく、Firefox 52は、Firefox 45とはかなり違ったブラウザになっているはずだ。パフォーマンスの向上は当然として、メモリ消費量の抑制にも期待したい。

*1:Firefox 46以降、数バージョンかけて順次適用ユーザーの範囲が拡大される予定である。

*2:e10sとセットで有効化される。

*3:その処理を担当するエンジンは、BaldrMonkeyと呼ばれる(Bug 1234985)。北欧神話の主神オーディン(Odin)の息子バルドル(Baldr)にちなむ。