32bit Linuxで3GBの壁を超える!
3GB以上の物理メモリをLinuxに認識させる場合には物理アドレス拡張(Physical Address Extension; PAE)に対応したカーネルが必要になります。もちろんマザーボードも対応している必要があります。物理メモリの上限に関しては詳しい解説が探せばいくらでもあるので適当に探して下さい 。
マザーボードによっては4GB積んでも3.2GBぐらいしか認識しないもの(AOpen XC cube EZ965; 使用できるのは3.2GBって書いてありましたが、memオプションのチューニングによって3.7GBあたりまで認識させることができました)、6GB(2+2+1+1)積んで6GB認識できたもの(DELL OptiPlex745)がありました。この辺りはマザーボードの仕様に書かれていると思いますので事前に確認しておいた方がいいでしょう。
ここではVine Linux 4.2でPAEに対応したカーネルを再構築した時の記録を残しておきます。他のディストリビューションでは、PAE対応カーネルのバイナリが用意されている場合があるようなので確認して下さい。なお、ここで使用しているmkkpkgはVine Linux独自のスクリプトだと思います。
- 2009-04-27追記
- EZ965ではBIOSをR1.14にアップグレードしてみたところ32bit Vine Linux 4.2でPAE対応カーネルを構築し使うことで(2.6.16-76.47vl4)、4GBまで認識しました。が、udevの起動以降あまりにも遅すぎるので使い物になりません(Xの起動までたぶん10-30分ぐらい)。その後、いろいろとトライした結果、パフォーマンスの低下が起こらない状態で、mem=4608MでHIGHMEMに3712MBまで認識させることができました(non-PAEに比べて約500MB UP!;これ以上の値ではパフォーマンスの低下が起こりました) 。なんか強引な気もしますが。ただし、この値は私の環境ですので他のマザーボードとメモリの組み合わせの場合変わってくると思われます。
なお、使用できるメモリが増えた状態(3.2GB->3.7GB)でCNSベンチマークの速度に差はありませんでした。
Vine LinuxでPAE対応カーネルを構築してみましたのでメモです。
この作業はカーネル交換を伴いますので、失敗するとシステムが起動しなくなる可能性があります。自分がどんな作業を行っているか認識した上で慎重に行って下さい。
カーネルの再構築
rootで作業します。カーネル構築コマンドであるmkkpkgとカーネルソースを取得します。
# apt-get install mkkpkg # apt-get -d source kernel
取得したのはkernel-2.6.16-76.37vl4です。取得したらmkkpkgでカーネルRPMを構築します。
# mkkpkg kernel-2.6.16-76.37vl4.src.rpm --target=i686 Welcome to mkkpkg Please wait for a while "make menuconfig" to be executed... Executing "rpmbuild -bp /home/nobrin/rpm/SPECS/kernel-2.6-vl.spec"...done. Input your kernel Revision [SRPM = 76.37vl4]: 76.37vl4pae <-- ここでは76.37vl4PAEにしました kernel Revision [yours = 76.37vl4pae]. OK? [y/n] y Do you want to edit kernel-2.6.16-76.37vl4pae.spec? [y/n] n <-- SPECファイルは修正しない Do you want to build SRPM? (If no, only RPMs are built) [y/n] n <-- SRPMファイルは作成しない Ready for make "menuconfig" by kernel-2.6.16-i686.config <-- ターゲットがi686 [Push enter to continue]
ここでmenuconfigの画面に切り替わります。PAEの設定をするには以下の項目を変更します。
Processor type and features ---> High Memory Support (4GB) ---> 64GB <- 64GBにすればPAE対応になる
設定を変更したらExitを選択すればビルド前の確認画面になりEnterを押すとビルドが始まります。だいたい30分〜1時間ぐらいかかりますので気長に待ちましょう。
mkkpkg Now we are prepared for executing: rpmbuild -bb /root/rpm/SPECS/kernel-2.6.16-76.37vl4pae.spec --target=i686 Log output goes to /tmp/kernel-mkkpkg.log. You can read it by following sequence: 1. Push "Ctrl+Z" to suspend the next long process 2. Type "bg" to continue background 3. Use "less" to print /tmp/kernel-mkkpkg.log 3.1 Push "Shift+F" to "Forward forever; like tail -f" 3.2 If you want to stop reading, Push "Ctrl+C" 4. Type "fg" to get back to mkkpkg X. If you are using X, you can read log thru another term window It takes about 10-240 minutes depending on your configuration and also depending on your machine: It's not freezing! Ready for Action? [Push enter to continue] <- Enterでビルド開始 Started: Thu Jul 10 12:16:07 2008 Building... Finished: Thu Jul 10 12:55:13 2008 [Push enter] <- ビルド終了 Created: /root/rpm/RPMS/i686/kernel-2.6.16-76.37vl4pae.i686.rpm <- できたファイル /root/rpm/RPMS/i686/kernel-devel-2.6.16-76.37vl4pae.i686.rpm How do you want kernel-mkkpkg.log in /tmp? m)move to /root r)remove *)leave in /tmp : r <- /tmp/kernel-mkkpkg.logを削除するか Do you want to clean up BUILD tree and files in SOURCES? [y/n] y <- 展開されたソースを削除するか
終了したら、
- kernel-2.6.16-76.37vl4pae.i686.rpm
- kernel-devel-2.6.16-76.37vl4pae.i686.rpm
が/root/rpm/RPMS/i686ディレクトリに作成されているはずです。
インストール
作成されたものをインストールします。通常通りrpmでインストールします。
# rpm -ivh kernel-2.6.16-76.37vl4pae.i686.rpm # rpm -ivh kernel-devel-2.6.16-76.37vl4pae.i686.rpm <-- 必要なら
再起動すれば認識するはずです。