« September 2007 | Main | December 2007 »

November 30, 2007

Ubuntu Gutsy (i386)でPAE+nvidia

DDR2メモリの価格が偉いことになっているのでつい乗せられて記念に4GB買ってしまった・・・というのはよくある話で、もとある2GBとあわせ合計6GBになったメモリをどうするかというお話。

普通の32bitカーネルが扱える物理メモリ空間は4GBまでで、そのうち3GBを超えた物理メモリ領域はI/Oのためにデバイスにマップされていたりして一部のアドレスがつぶれてしまうため、32bitカーネルで起動してもメインメモリは3.2GBしか認識されない(この容量はマシンによって異なるはずである)。

この場合の選択肢は2つあって、64bitカーネルを動かす方法と、32bitカーネルのままPAE(Physical Address Extension)を有効にする方法とがある。前者の場合はさらに64bitディストリビューションを入れる方法と、32bitディストリビューションのカーネルだけ入れ替える方法とがあるが、今回はユーザーランドは32bitのまま維持したかったのでPAE拡張対応のカーネルを入れる方向でいってみることにした。

Ubuntu Gutsyで標準で入るlinux-image-genericはPAE非対応なので、PAEに対応したイメージであるlinux-image-serverを入れて動かす必要がある。

で済めば何も記事を書くまでもないのだが、ここで問題発生。GeForceを使うためにnvidiaのプロプラエタリドライバを使っているのだが、serverイメージには対応するlinux-restricted-modulesがないことが判明。Xがまともに立ち上がらなくなってしまった。

あれこれ試した結果、以下のようにするのがよいようである。
0. sudo aptitude install linux-image-server
1. sudo aptitude install nvidia-kernel-source linux-headers-server
2. sudo aptitude install module-assistant
3. sudo m-a a-i -l 2.6.22-14-server nvidia
4. sudo depmod 2.6.22-14-server

バージョン番号は適宜読み替えて欲しい。

serverイメージはPAE(CONFIG_HIGHMEM64G)がonになる一方タイマ割り込み頻度(HZ)が100になっている、CONFIG_PREEMPTがnoになっているなど本当にサーバー向けの設定になっている。俺のようにまさにデスクトップとして使いたいがメモリを認識させたいだけの場合は本来なら自分でカーネルを作り直すのがいいような気はするが。

今回の設定はあくまでも32bitカーネルが64GBまでの物理メモリを扱えるようになった、というだけなので、各アプリケーションの仮想メモリ空間は32bitのままである。すなわちLinuxでは1GBのメモリ空間がカーネルによって予約されるので、各プロセスは3GBまでの空間しか使えないということになる。1プロセスにより多くのメモリを割り当てたければ64bitカーネルと64bitのユーザーランドが必要である。

ちなみに同じマシンにはWindows XP(32bit版)も入っているのだが、そちらはServerとの差別化のためなのか、boot.iniに/PAEを書き加えても6GB認識してはくれなかった。NXビット(XDビット)はPAEの一部のような仕様なので少なくともSP2以降のカーネル自体は余裕でPAEに対応しているはずなのだが・・・。

謝辞
m-a a-i (module-assistant auto-install) については研究室一のDebianハッカーであるひらの氏が教えてくれた。

| | Comments (1) | TrackBack (1)

« September 2007 | Main | December 2007 »