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

Carpe Diem

備忘録。https://github.com/jun06t

32bit PAEカーネル と 64bit の違い

PAEカーネルを使用すると64Gまでメモリを認識できるようになります。これはカーネルコンパイル時に設定したり、PAEカーネルパッケージを使用することで使えるようになります。 では「32bit PAEカーネル と 64bit のメモリの違い」は何なのか、と思うことがあったのでまとめてみたいと思います。 結論から言うと「32bitを使用する特別な理由がなければ64bitの方が圧倒的に有益」です。 ベンチマーク こちらを確認してください。 Ubuntu 32-bit, 32-bit PAE, 64-bit Kernel Benchmarks performanceと書いてあるものは高いほうがよく、timeと書いてあるのは低いほうがいいです。 これを見て分かるのは64bitの方が明らかに良いということです。なので特別な理由がない限りは64bitにした方が良いです。 ◆32bitPAEの仕組み そもそも32bitPAEはどういう仕組みで4G以上のメモリを使えるのかをまとめます。 仮想アドレス空間は32bitのOS/APであるかぎりその空間サイズは基本的に固定的で、それをマッピングする先である物理アドレス空間とでも言うべきものが32bitを超えられる、そのための技術がPAEです。 なので86xの場合、仮想アドレスでは4GBまでしか扱うことはできません。 そのため以下の前提は変わりません(以下はWindowsの割り当てです。Linuxの場合コンパイル時に設定可能)。 ユーザ空間 :2GB カーネル空間:2GB(1プロセスに対して) ただし、カーネル空間に対して割り当てられた仮想アドレスは 1プロセスに対して2GBであるため 2プロセスであれば4GB, 3プロセスであれば6GB使用することができます。 2プロセス稼動で、物理メモリを6GB積んでいた場合では通常では カーネル+ 2*プロセス=6GB 使用するためPAEを使用しなければ2GBページングする必要がありますが、PAEを使用するば物理アドレスを6GBとして使えるためページアウトする必要がなくなります。 しかし前述したとおり、いくらPAEを使用したとしても1プロセスに対して2GB以上の仮想アドレスを割り当てることはできません。 ◆64bitの違い 32bitの情報は4GBのRAMまでしかアクセスできませんが、64bitのマシンの場合、172億GBのシステムメモリにアクセス可能となります。これが何を意味するかというと、ビデオカードやその他のデバイスがオペレーティングシステムのメモリ容量を搾取しない、ということです。Windows 64bitのHomeエディションの場合、ライセンシングの理由によりRAMの上限は16GBになっていますが、Professiona/Ultimate版であれば192GBまでのRAMが使用可能です。 プロセス単位の上限もかなり上がっていて、64bitのWindowsの場合、2GB上限の代わりにそれぞれのアプリケーションには、特殊なAPIなしで8TBの仮想メモリへのアクセスが割り当てられます。動画編集などのアプリや仮想マシンなどRAMが大量に必要な場合には相当な差が生じてきます。Windowsの64bit版は、カーネルがハイジャックされることを防止する技術やハードウェアによるデータ実行防止(DEP)サポート、デジタル署名された64bitのデバイスドライバの義務付けなどが搭載されています。また16bitのアプリを実行することは出来なくなります(大した問題にはなり得ないと思いますが)。 ◆64bitの誤解 ○32bitのアプリは64bitのOSで動くのか? 32bitのアプリのほとんどは問題なく動きます。「Wow64」は実行するスレッドの必要に応じて、32bitモードと64bitモードの間のプロセッサーの切り替えを行い、64bit環境でも32bitのソフトウェアが円滑に作動するようにしてくれます。しかし、これには例外があり、32bitデバイスドライバアンチウイルスのようなローレベルシステムアプリ、Windowsプラグインするシェルエクステンション、一部のメディアアプリは作動しません。 ○64bitのOSは2倍のRAMを使用するのか? 64bitプロセスは、確かに少し多くのメモリを使用しますが、これはメモリポインタが少し大きくなるため、RAM使用量も少し上がる、というだけの話であって、実際に2倍に膨れ上がる訳では決してありません。図書館の本がどこにあるのかを示すファイリングシステムの棚が少し大きくなると本を見つけやすくはなりますが、図書館自体が2倍になるわけではないのと同じ感じです。 ソース: Ubuntu 32-bit, 32-bit PAE, 64-bit Kernel Benchmarks PAEに関して 64ビットのOSと32ビットのOSってどっちがいいのだ?って言うか何が違うのだ?