SC420 では物理メモリ 4GB はフルフルに使えない

最近メモリが安いので,Dell PowerEdge SC420 にメモリ 4GB とおごってみました。ところが OS から見えるメモリは 3GB 強程度。さらっと調べた感じだと,

  • PAE を有効にすればできるよ,たぶん
  • x86_64 な OS だと大丈夫だよ,たぶん

という意見がよく出てくるのですが,私の環境では PAE カーネルにしてもだめでした。ということであれこれ探し回って,4GB(以上)のメモリを使うために何が必要なのかを調べてみました。

結論ですが,

ハードウェアサイドの要件として

  • IA32 の場合 CPU が PAE(物理アドレス拡張)に対応していること
    • といっても 4GB もメモリを詰めるような環境では当然対応してます
  • チップセットが 8GB 以上のメモリをサポートしていること
    • MCH(昔でいう North Bridge)が 33 bit 以上のアドレス空間を利用できる必要がある
  • チップセットPCI Memory Remapping をサポートしていること
    • というか上記を満たすものはサポートしていると思われる
  • BIOSPCI Memory Remapping をサポートしていること;安定していること

OS サイドの要件としては

  • IA32 の場合 OS が PAE に対応していること(でもこのケースの成功事例をみたことがないような…あれば教えてください!)Linux PAE でいけました;下記 110/Gd の件参照
  • OS が PCI Memory Remapping 状況下でも安定していること
  • 種々のデバイスドライバPCI Memory Remapping 状況下でも安定していること(やや迷信)

が必要なようです。主に Microsoft の技術文書の引き写しですが,ちょこちょこ変えてあります。

4GB がフルフルに認識されない原因ですが,PCI (Express) デバイスがメモリマップド I/O 用領域(←いまどき違う?)を 4GB 未満のアドレス空間に確保してしまい,その領域(以上のアドレス)のメモリにアクセスできないためです。そんなの論理空間の問題じゃないの?とか思うんですが実際には物理空間の話であり MCH とかの下のレイヤーなのでうかつに手出しはできません。と Linux 先生もおっしゃっていると,思います,たぶん。

で,それじゃ困るよねってことで Memory Remapping という技術ができました。これは,(おそらく)その領域の物理メモリを 4GB 以上のアドレス領域にマッピングしなおすものです。ですが,これはチップセットBIOS,OS が対応してないとうまく働かないようです。

最近のグラフィックカード(つーか主に NVIDIA?)は大量の領域を予約するので Memory Remapping がうまく働かない状況では利用可能な物理メモリが相当目減りしてしまうのです(天使の取り分と呼ぶ方々もいらっしゃいます)。

ケーススタディ 1(わたしの SC420)

SC420 のチップセットは E7221 というものです。925X がちょっと偉くなっただけものです。こいつの仕様によると最大搭載可能メモリは 4GB。BIOS にも Memory Remapping という単語もないようですし,そもそもハードウェアのレベルで絶望的です。さらに Intel E7221 Chipset という文書に下記のようにダメだしされてしまいました。

10.2 Main Memory Address Range (1MB to TOLUD)

This address range extends from 1 MB to the top of physical memory that is permitted to be accessible by the MCH (as programmed in the TOLUD register). All accesses to addresses within this range will be forwarded by the MCH to the DRAM unless they falls into the optional TSEG, or optional ISA Hole, or optional IGD stolen VGA memory.

The MCH provides a maximum DRAM address decode space of 4GB. The MCH does not remap APIC or PCI Express memory space. This means that as the amount of physical memory populated in the system reaches 4GB, there will be physical memory that exists yet is non-addressable and therefore unusable by the system.

さて,わたしが使っているグラフィックカードGeForce 6600 LE なのですが,これがなかなか凶悪です。lspci -v の結果を抜粋すると,

01:00.0 VGA compatible controller: nVidia Corporation NV43 [GeForce 6600 PCIe] (
rev a2) (prog-if 00 [VGA])
        Flags: bus master, fast devsel, latency 0, IRQ 16
        Memory at d8000000 (32-bit, non-prefetchable) [size=64M]
        Memory at c8000000 (64-bit, prefetchable) [size=128M]
        Memory at de000000 (64-bit, non-prefetchable) [size=16M]
        [virtual] Expansion ROM at dfe00000 [disabled] [size=128K]

0xc8000000〜0xd0000000(128M),0xd8000000〜0xdc000000(64M),0xde000000〜 0xdf000000(16M)のように 208M もの空間を占有し,先頭が 0xc8000000 というのもヒドいです*1。さらに,この 0xc8000000 より前に ACPI 用データが確保されるので TOLUD(最大利用可能メモリアドレス)が 0xc7e8cc00 になってます。で,利用可能メモリは 3.2GB 弱。ぐむぅ。

いま使っている CPU は Pentium 4(HT 対応 Prescott)なのですが,EM64T 対応 Prescott-2M に載せ替えても,Memory Remapping にチップセットが対応していない以上,4GB のメモリをフルに使うことは厳しいでしょう。

ということで対策としては

  1. 天使の取り分としてがまんする
  2. 1GB×2 を 512MB×2 に交換し,3GB とする。精神衛生上よい。
  3. もっとメモリ空間を無駄食いしないグラフィックカードに変える

ですかね。

ケーススタディ 2(SC430

SC430チップセットは E7230 とのことで,こいつは最大 8GB のメモリーアドレス空間だそうです。

まず,お一人目として Dell SC420 Maniacsさん(【PowerEdge SC430 メモリ4GB搭載 その1 SC420 Maniacs/ウェブリブログ】)。IA32 用 OS でいろいろためされているようですが,やはり天使の取り分が発生している模様です。画面写真を見ると PAE は有効になっているようです。これは【Windows の DEP は物理アドレス拡張 (PAE) を自動的に有効にする】のため,自動的に PAE が有効になっているみたいです。

では x86_64 OS だとどうかというのを anyway さんが試されていますが(【DELL SC430 4Gメモリ+WINDOWS SERVER 2003 X64: anyway我流コンサル】),やはり天使の取り分をとられたようです。

ということは SC430BIOS が Memory Remapping に対応していないか,お二方ともそれを on にしていないか,でしょう。ひょっとすると最新の BIOS ではそのような項目が新設されているかもしれません。

ケーススタディ 3(Asus P5B Deluxe)

P5B Deluxe のチップセットは P965 です。これについては id:thk さんが詳細にお調べになってます(【Vista自作⑦ Vistaにメモリ4GBを搭載する 〜3GBの壁を超えろ!編〜 - 東洋黒客は勇者である】)。

結果だけ抜粋すると,

  • Memory Remapping OFF では,どのような環境でも 3GB
  • Memory Remapping ON で Vista, Linux(IA32 w/o PAE)だと 2GB(!)
  • Memory Remapping ON で Vista(IA32 with PAE) だと 3GB
  • Memory Remapping ON で Vistax86_64)だと 4GB(成功)

といった感じのようです(Linux with PAE だとどうなのか気になりますね)。

やっぱり x86_64 にするのが無難かもしれません。

その他ケーススタディ

結構まちまちですね。メモリがこれだけ安くなってコンシューマクラスのハードウェアが(仕様上)大容量メモリをサポートする,という状況に OS がおいつけていないのかもしれません。

追記 2007/06/11

いくつかブクマコメントやコメント欄で有用なご指摘いただきました。その後教えていただいた&発見した参考になりそうなサイトリストです。

一番下の MS の文書から抜粋ですが,

Windows Version Support
2000 Pro, XP AWE API and 4 GB of physical RAM
XP SP2- AWE API and 4 GB of physical address space
2000 Server, Server 2003 Std AWE API and 4 GB of RAM
Server 2003 SP1 Ent 8 processors and 64 GB RAM
http://www.microsoft.com/whdc/system/platform/server/PAE/pae_os.mspx#ETG

Windows XP だとそもそもユーザプロセス空間で使える物理メモリが 4GB まででした。ぐあ。AWE API というのは,4GB を越えた部分にアクセスするための API で,ざっくりした例ですがデータベースエンジン等対応アプリケーションが余剰のメモリを使ったり,RAM Disk に使ったりとかのためだと思います(つまり通常プロセス用とは別扱い)。

ということで

# 2007年05月24日 bull2 bull2 hardware, memory WinXPだと3GB迄だったのが、Win2003にすると4GB迄いけたケースがあります

http://b.hatena.ne.jp/bull2/20070524#bookmark-4805372

Server 2003 Ent だと mem remap 等をきちんとハンドリングしていたのかな…

# 2007年05月25日 cubed-l cubed-l pc Dell Precision490 + XPだと3GB認識。x86_64なら4GB認識してくれるのかねぇ

http://b.hatena.ne.jp/cubed-l/20070525#bookmark-4805372

Precision 490 は 5000X チップセットで最大 21GB〜32GB サポートらしいですよ。x86_64 だと認識する可能性が高いのでは…保証はしませんが。

# 名無し 『32bit OSではPAE,mem remapの可否に関わらずMMIO分は4GB以下の部分から取られるので無理です。』(2007/06/10 09:42)

SC420 では物理メモリ 4GB はフルフルに使えない - daily dayflower

参考情報あざーす。「32bit OS だと 4GB 以上を認識したとしても天使の取り分は発生する」という解釈でよろしいですか?それとも「32bit OS ではそもそも 4GB 以下しか認識しない」という解釈ですか?

実はきちんと理解してないんでぼかし気味に書いたんですが,PCI mem remap って

のうちどっちなんだろというのがわからなくって…後者と思っていたんですが。ひょっとしてそのどちらでもないのかなぁ…また謎が増えてしまいました。

仮に後者だとしても,物理メモリのアドレッシングがリニアじゃないから,OS としては PTE の操作とかめんどくさそうだなぁ…そりゃきちんとサポートしてる OS が少ないわけですね。


先日ついに Intel 3000 チップセット搭載の NEC の某サーバを入手したんで,暇があればいろいろためしてみる予定です。書きました(Express 5800 110Gd で 4GB メモリが使えた on IA-32 - daily dayflower)。

追記 2007/06/14

690 :不明なデバイスさん:2007/06/04(月) 14:13:02 id:WQbnuErW

後、110gdには、メモリーホール機能があります。これは、本来OSから利用不可能の3G〜4GBの領域の約700MBを使用可能にするためのしくみです。

(これをNECのシリーズではHW-DIPと呼ぶ)

この機能をonにするには、BIOSでExecute Disable Bit(XD Bit)をEnableに変更してください。(通常はDisableです)
ただし弊害もあります。まずNvidiaビデオカードを増設している方は絶対にEnableにしないでください。これは本来有るべきメモリーホールの場所をRemapする為に正常動作が困難となるためです。(要はnvidiaカードはRemapをサポートしていない)
それから拡張デバイス(キャプチャカード等)やSCSIカードなどを挿している方も注意が必要です。

【DELL,HP】激安・格安サーバ総合 2台目【IBM,NEC】

*1:というかこれだけの空間を 0xe0000000 (PCI Express 等用に予約されてるみたいです) 以前で確保しようとするとどうしてもこのアドレスになってしまうということだと思いますが