読者です 読者をやめる 読者になる 読者になる

FutureInsight.info

AI、ビッグデータ、ライフサイエンス、テクノロジービッグプレイヤーの動向、これからの働き方などの「未来」に注目して考察するブログです。

Firefox3のメモリ使用の効率化について

この翻訳がとても面白かったので、簡単にまとめてみました。

メモリ断片化の対策としてjemallocを採用

mallocの実装としては、リアルタイム要求のある条件でもある程度確保時間が保証されているdlmallocなどが有名ですが、Firefox 3ではjemallocを採用しました。jemallocの特徴としては、以下のようなレポートがあります。

FreeBSDの従来のmalloc(3)実装は、マルチプロセッサシステムにおいてはコンテンション、キャッシュスライシング、キャッシュラインシェアリングといった点において性能がよくないことがある。これを改善するべくJason Evans氏によって開発された新しいmalloc(3)がjamallocである。

このマルチプロセッサを意識して、メモリの断片化に備えた実装がfirefoxの度重なるメモリの開放、確保に対するニーズにマッチしたということでしょう。jemallocのさらに詳細な説明は以下のpdfに詳しいです。

dlmallocやmalloc(2)の実装であるphkmallocと比較して、10以上の複数スレッドからのメモリ要求に対しても性能が保証されており、かつその性能がdlmalloc、phkmallocとほとんど変わらないことが分かります。

たしかにこれは複数スレッドでレンダリングを行うブラウザにマッチしたmallocですね。これをいち早く標準として採用したFreeBSD 7.0もアグレッシブです。FreeBSD 7.0は8コアまで性能をスケーラブルに出すことが出来るらしいのですが、スケジューラの改善のほかに、jemallocの採用も大きく寄与していそうです。このjemallocのおかげで、FreeBSD 7.0上で動作するMySQLはかなり性能が出るようになったらしくFreeBSD 7.0試してみたくなりました。FreeBSD7.0に関してはこの雑誌が詳しかったです。

Software Design (ソフトウエア デザイン) 2008年 04月号 [雑誌]

Software Design (ソフトウエア デザイン) 2008年 04月号 [雑誌]

ガーベージコレクタの調整とリーク狩り

Firefox3(というかGecko 1.9)では、循環コレクタを実装し、相互参照するオブジェクトの破棄を自動化したとのこと。Firefox2まではこの部分を手動で行っていたが、循環コレクタを採用したことで、Firefox拡張が引き起こすメモリリークの対応になりました。独自拡張して、勝手にメモリリークしている拡張が多そうなので、これはかなりインパクトが大きいかもしれません。あと、地道なメモリリーク狩りを行い計400個のメモリリークをつぶしたらしいです。こういうメモリリーク狩りにはマニアがいるので、そういう人たちに全て任せるのが良策ですね。

Windows Vistaではメモリ使用量を正確に測定することが可能になったらしい

ユーザのブラウザの利用法に基づいたテストを行い、メモリ使用量を正確に測ることがWindows Vistaから可能になったらしいです。どうもWindows XPではこのメモリ使用量の正確な見積もりが難しかったらしいのですが、文章を読んでも詳細がよく分かりません。ここはWindowsマスターの方々にさらなる詳細な解説を期待したいところ。

まとめ

このような不断の努力でFirefox3のメモリ効率は劇的に高まりました。特にブラウザではメモリの断片化が性能の深刻なボトルネックになっていたので、このメモリの効率化が大きな性能の向上につながった模様です。Firefox使いとしてはうれしい限りですね。