64bit環境の整理

最近、自分のプロジェクトではないが 64bit 環境でって話が出てたので、整理しておかないと新しいサーバを買うときとか質問されたときに答えられないなぁということで、調べなおした。
※すべてを体系的に整理はしていません

32bit

IA-32、x86、i386 などとよばれる
Intel(Pentium 4, Celeronなど) ※P4の一部は 64bit 対応
AMD(Athlon, Duronなど)
Linux では
– kernel-smp (1プロセスのユーザスペース 約3GB)
– kernel-hugemem (1プロセスのユーザスペース 約3.8GB)
物理メモリ16GBを境に smp か hugemem 版かを使い分ける感じになる
※メーカーによっては 12GB くらいまでとしているところもあるようだ
従ってアプリケーションサーバーなどの JavaVM は複数のVMを起動しないと
物理メモリを多く搭載していて意味がないので、設計時に注意する。
1プロセスが多量にメモリを必要とする場合には後述の x64, ia64 環境への移行を考えるべし。
Windows ではOSから見える制限とプロセスごとの制限などはクライアント系とサーバ系とエディションで事情が異なり割愛coldsweats01

64bit (その1)

IA-32(x86)アーキテクチャの64ビット化。32bit環境としても利用できる。
最近PCを買うとこのハードに32bit Windwosがインストールされて出荷されていることがほとんど。
Intel64(EM64T)、AMD64、x86-64、x64 などとよばれる。
Intel(Core i7, Core 2 など)
AMD(Opteron, Athlon 64 など)
Linux では x86_64, x86-64 版と表記される
Windows では (x64) とか “x68 Edition” と表記される
– Windows XP Professional x64 Edition
– Windows Vista x64 Edition
– Windows Server 2008 Enterprise (x64)
Oracle でも同様に x86-64 や (x64) と表記している
メモリ関連はテラバイトオーダーになるのであまり気にしないhappy01
C/C++言語での開発では特に注意が必要。
いまさらだが、データモデルの違いを意識する必要がある。

64ビットデータモデル
データモデル short int long long long ポインタ
LLP64(Win系) 16 32 32 64 64
LP64(Unix系) 16 32 64 64 64
IP64 16 64 32 64 64
ILP64 16 64 64 64 64
SILP64 64 64 64 64 64

64bit (その2)

IA-64 アーキテクチャで IA-32と互換性なし。
Intel(Itanium2, Itanium)
Windows Server 2008 for Itanium Based-Systems

x68, ia64 のどちらもデバイスドライバが対応しているか、利用するソフトウェアが対応しているかどうかも確認する必要あり。
サーバー用途の場合にはそれほど多くのデバイス、ソフトを使わない傾向にあるので問題が少ないかもしれない。
オープンソースの場合には再コンパイルで対応できるものも多いが、自己責任となる。