PR

 「Intel 64(EM64T)」や「AMD64」といった64ビット・アーキテクチャを採用したCPUの普及に伴い,WindowsやLinuxでも64ビット版が用いられることが多くなった。これまで主流であった32ビット・アーキテクチャと比べ,一度に演算できるビット数が増えるなど性能向上が見込める要素があるためか,とりあえず64ビットOSを使うといった風潮はないだろうか。実際,動作させるアプリケーションが32ビットであるにもかかわらず,64ビットOSを採用しようとするケースを見かけることがある。CPUが64ビット・アーキテクチャだから64ビットOSを選択するのがベストだと単純に考えてはいけない。

32ビット・バイナリを64ビットOS上で動かすメリットはない

 OSは,構築対象サーバーのハードウエア・スペックと動作させるソフトウエアの特性から選択すべきであり,64ビットOSに固執する必要はない。

 Intel 64やAMD64は64ビット・モードとともに,32ビットの命令セットでも処理性能を落とさず実行するモードがハードウエア・レベルで設けられている。そのため,32ビットOSも64ビットOSも動作可能だ。また,64ビットOS上で32ビット・アプリケーションを動作させることもできるが,32ビット・アプリケーションは,OSが64ビットであっても64ビット・モードの恩恵は受けられない。

 64ビット・モードでは使用可能なレジスタが追加されており,これを利用することでアプリケーションの高速化が図れるが,そのためには64ビット・アプリケーションとしてコンパイルされている必要がある。既存の32ビット・バイナリを用いる限り,64ビットOS上で動かすメリットはないのである。そもそもアプリケーションによっては,64ビットOS上での動作が保障されていないケースもある。

プログラム・サイズが大きくなる

 次にメモリー利用の観点から32ビットOSと64ビットOSを比較してみよう(図1)。

図1●OSとアプリケーションの選択
図1●OSとアプリケーションの選択

 64ビットOSを利用するメリットのうち最も大きなものは,メモリー利用の制約を超えることができる点であろう。32ビットOSでは通常4Gバイトまでの物理メモリーしか扱うことができない(32ビットで指定可能なメモリー・アドレスが,2の32乗=4Gバイトであるため)。一方,64ビットOSの場合は,論理的には約1678万Tバイトのメモリー空間を扱うことができる。実際には,ハードウエアの制約でこれより遥かに小さなサイズとなるが,それでもTバイトサイズのメモリーが利用可能となる。

 さらに重要なのは,一つのプロセスが扱うことのできるメモリー空間のサイズだ。OSは,実際に搭載されている物理メモリー以上のメモリー空間を論理的に利用可能とする仮想記憶の仕組みを持つ。この場合メモリー・アドレスは,仮想アドレスで管理される。32ビットOSでは,仮想メモリーのアドレスも32ビットに制限される(32ビット版Windowsの場合にはその半分をOSに割り当てるため,アプリケーションは2Gバイトしか利用できない)。64ビットOSでは,この制約も解消される。

 以上の説明からは,64ビットOSを用いた方がよいと思えるかもしれない。ただし問題は,メモリー上に展開されるデータの量だ。64ビット・アプリケーションを稼働させる場合,アドレスを保持するためのポインタが倍のサイズになってしまう上,CPUの命令コードのサイズも大きくなる。そのため,プログラムのバイナリ・サイズが大きくなるのである。

 当然,プログラム実行時にバイナリをメモリーに展開する場合も,32ビットのものよりもたくさんの容量が必要となり,その結果キャッシュのヒット率も下がる。

RDBMSの検索処理性能が劣化する

 また,RDBMSのように扱うデータ・サイズが大きくなるアプリケーションの場合は,32ビット・アプリケーションよりも64ビット・アプリケーションのほうが保存用データのファイル・サイズが大きくなることも注意点だ。操作するファイルが大きくなるため,ファイルからデータを検索するような処理では,サイズ増加に伴う性能劣化が発生する。

 アプリケーションが利用するメモリーの最大容量が32ビットOSの制約である仮想メモリーの最大利用可能サイズを超えないのであれば,32ビットOS上で32ビット・アプリケーションを利用した方が,処理性能が高くなる可能性がある。64ビットOSにこだわる必要はない。

大上 貴充(おおがみ たかみつ)
NTTデータ 基盤システム事業本部 システム方式技術ビジネスユニット OSS技術統括 アソシエイトITスペシャリスト(プラットフォーム)
日頃はオリジナルOSSを中心に,技術開発やそのビジネス化に従事。OSをはじめ、Javaやクラスタミドルといった,アプリケーションの基礎となる技術分野を極めるべく,日夜奮闘中。