Firefoxをビルドする際、完成したバイナリのパフォーマンスに影響する要素としては、Firefox自体のビルドオプションとコンパイラやコンパイラに与えるコンパイルオプションの2つがある。これらの組み合わせを変えて、最速のFirefoxを作ってみよう。
前述のとおり、Firefoxには多くのビルドオプションが存在している。その中でも、特にパフォーマンスに影響すると思われるのが次のオプションだ。
このオプションを指定すると、ソース内に記述されているデバッグコードが有効になるためバイナリサイズが大きくなるほか、実行する処理が増えるため処理速度が低下する。
これらのオプションではコンパイラによる最適化の有無や、細かいオプション設定が行える。最適化を行うことで不要な処理を減らせるほか、特定のCPU向けに最適化されたバイナリを出力できる。
これらのオプションを指定することで、Firefoxの各機能を動的ライブラリに分割せず、静的にFirefox本体にリンクできる。Firefox本体のバイナリサイズは大きくなるものの、動的ライブラリの呼び出しによるオーバーヘッドがなくなるため全体的なパフォーマンスは向上する。
以上をまとめると、最速のFirefoxを作るためには「--enable-optimize」「--disable-shared」「--enable-static」を指定し、「--enable-debug」を指定しないのが最適な組み合わせだと言えよう。なお、Firefoxのアドレスバーに「about:buildconfig」と入力することで、そのバイナリがどのようなビルドオプションでビルドされたかを確認できる。
Firefoxをビルドするに当たって、コンパイラによるパフォーマンスの変化も見逃せない。なぜなら、最近のほとんどのコンパイラには最適化機能が搭載されており、ソースコード内で冗長な部分の簡略化や、CPUが搭載している演算ユニットを効率的に使用するような命令の出力を行えるからだ。例えば、GCC 4.0では表2、表3のようなコンパイラオプションによって最適化レベルや使用する命令セット*を指定できる。また、コンパイラオプションの指定で使用できるCPU種別および演算ユニットは表4、表5のとおりだ。
例えば、ハイパースレッディング対応Pentium 4向けに最適化を行うには、以下のようなコンパイラオプションを使用すれば良い。
-O3 -fforce-addr -march=nocona -mfpmath=sse -msse3
この例では「-O3」オプションを指定することでほぼすべての最適化を有効とし、さらにそれだけでは有効とならない「-fforce-addr」(演算を行う前に演算対象のメモリアドレスをレジスタ*にコピーする)オプションも有効にしている。
また、Athlon 64向けに最適化を行うには次のようなコンパイラオプションを使用する。
-O3 -fforce-addr -march=athlon64 -mfpmath=sse -msse2
CPUが備える機能群。最近のCPUではMMXやSSEなどと呼ばれる、マルチメディア関係の処理で多用される多バイトの浮動小数点演算などを高速に行う命令セットを備えている。
CPUが演算に使用する専用メモリ。容量は小さいが高速にアクセスできる。
Copyright © ITmedia, Inc. All Rights Reserved.