Firefox Hacks 翻訳日記

アクセスカウンタ

zoom RSS Bug 501605

<<   作成日時 : 2009/07/16 19:30   >>

トラックバック 0 / コメント 0

Bug 501605 – very slow startup for Firefox 3.5 due to accessing IE Internet Temporary Files and Windows Temp folder は RESOLVED FIXED になったのだが、これで Windows における Firefox 3.5 の初回起動が遅い、という問題が解決したわけではないだろう、というのが本稿の趣旨。
近日中にリリースされる予定の 3.5.1 は、少なくとも 3.5 よりは初回起動が早くなっている筈だが、それでも 3.0.x の方が早いのではないだろうか。

忙しい人、あるいは「『上流から大きな桃が』まで読んだ」な人のために結論から書いていく。
当方の環境(Windows XP SP3、Pen4 2.8G、メモリ 1.5G)での、Windows 起動後の Firefox 初回起動時間。

1. 新規プロファイル(アドオンなし)
 Firefox 3.5 : 27.7 秒
 Firefox 3.5.1 : 13.7 秒

2. 常用プロファイル(アドオン14個)
 Firefox 3.5 : 34.3 秒
 Firefox 3.5.1 : 28.0 秒

Firefox 3.5.1 はまだ正式リリースされていないので、ナイトリー zip 版の数値である。
1. の方は悪くない数字だと思うが、3.5→3.5.1 なら普通上書きインストールだろうから、多くのユーザーが体感するのは 2. の方であり、「ちょっとは早くなったかな」程度で終わる可能性が高い。
Mozilla Links 日本語版: Windows で Firefox 3.5の起動が遅くなる問題の回避策 とかに従って一時ファイルを削除済みの人にとっては、さらに体感しづらいだろう。

3.5.1 は Critical JavaScript vulnerability in Firefox 3.5 at Mozilla Security Blog に対するセキュリティ・リリースであって、起動時間問題を解決したものではない、というくらいのノリでいた方が吉。

以下、背景説明なので、細かいことは気にしない人は読まなくていいです。

読まなくてもいいんですよ、わかりましたか?


1. なぜ Firefox 3.5 は IE のキャッシュファイルを読むようになったか?

Fennec の開発で、NSS のコードが修正されたから、である。
Bug 466745 – random number generator fails on windows ce
Fennec チームから、Windows CE で https なサイトにアクセスできない、というバグ。
これを修正するために、NSS が IE のキャッシュファイルなどを読み込むようにコードが変更された。
NSS は全ての Windows で共通なので、Windows CE に対する変更も XP に影響する。

チェックインの前に、テスト環境(Talos)で 確認はした ようだが、IE のキャッシュや temp フォルダに数千から数万のファイルが存在する、という環境ではなかったのだろう(^^;


2. なぜ NSS はファイルを読むのか?

どうやら level さん も訳出時には完全には理解していなくて、それを参考にした ライフハッカー[日本版] も適当な翻訳になっている、というオチのようだが。

Firefox 3.5 が乱数を得る手順(これは Windows のセキュリティのために必要となります)

「Windows のセキュリティのために必要」なのではなく、NSS が暗号化を行なうための entropy 収集に必要なのである。
(熱力学のエントロピーと同じスペルで、これが語源だと思われるが、別物なので注意)

OS の起動ごとに違った乱数を得るためには、できるだけ変更の激しいフォルダ、かつどんなユーザーであっても存在するフォルダからファイルを読み込むのが望ましい。
というわけで、IE のキャッシュフォルダに白羽の矢が立ったのだと思われる。

ここで、上記の Wikipedia にも記述されているように、OS が乱数 API を提供している場合(例えば Linux の /dev/random や /dev/urandom)であれば、わざわざ読み込みの遅いディスクアクセスを行なう必要はない。
そして、Windows XP には CryptGenRandom という機構が存在している。
しかし、NSS チームの Nelson Bolyard の コメント によれば、「XP より前の Windows には、信頼できるメカニズムがないか、オプションとしてしか存在しない。NSS がサポートするのは Win2k までさかのぼる」。
というわけで、3.5 でもファイルを読んでいるのである。

以上を踏まえて、上記 Mozilla Links 日本語版の訳文を改善してみると、
「Firefox 3.5 が Windows で乱数を得る手順(これはセキュリティのために必要となります)」
あたりだろうか。


3. Bug 501605 で何が改善されたのか?

ここから先は C++ の読めない私には荷が重いのだが。

NSS のバグが改善されたのは確かだ。
RNG_SystemInfoForRNG が二回コールされていたというバグ Bug 489811 – RNG_SystemInfoForRNG called twice by nsc_CommonInitialize のパッチ(3.5 以前に存在していたが trunk には投入されていなかったらしい)の導入が一つ。
一時ファイルを読むに当たって、ファイル数やサブフォルダ数が多い場合にリミットをかける、というのが一つ。
そして(推測だが)一時ファイルを読む前に、システムに乱数生成機構が存在するかを見て、もしあるようならそっちを使う、という事になっている筈だ。
(RtlGenRandom ではなく CryptGenRandom を使うべき、というバグ Bug 504270 も立ったが、えむけい さんの迅速なレスポンスもあって、立ってから 10時間しないうちに提唱者自身が取り下げた)

というわけで、3.5.1 以降は、Firefox の初回起動を遅くしないために定期的に IE のキャッシュを削除しなければならない、とかの事態にはならない筈である。

しかし、NSS のバグという要素を取り除いても、上記した起動時間のテスト結果でわかるように、初回起動にはやはり結構な時間がかかる。
NSS 以外の部分も改善しないと、Mozilla 製品の宿痾とも言うべき初回起動のもっさり感は解消されないだろう。
個人的には Bug 491283 – large number of installed fonts causes slowdown にある、Thebes がシステムのフォントファイルを読みまくる件が怪しいと思っているのだが、ここいら辺は 3.5.2 への課題となった。


おまけ: Process Monitor

物好きにも、というか見るに見かねて、というか、Bug 501605 でテストビルドのテスター役をやっている Joji Ikeda さんが時々口走っている Process Monitor
使いこなしているとは決して言えないが、鬼のようなユーティリティですな、これは。
Vista だと標準で搭載されてるのかな?

使い方とかは、ちょっと古い記事だが ファイルやレジストリにアクセスしているプロセスを調べる@Process Monitor - http://pnpk.net が参考になるかと。

当方の非力な環境だと、長めのログでちょっと検索しようとしただけでハングしたし(^^;

テーマ

関連テーマ 一覧


月別リンク

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Bug 501605 Firefox Hacks 翻訳日記/BIGLOBEウェブリブログ
文字サイズ:       閉じる