Express 5800 110Gd で 4GB メモリが使えた on IA-32

NEC Express 5800 110Gd(チップセット 3000)に,あえてメモリ空間食いな NVIDIA PCX 6600 を載せて調査。

CentOS 5.0 i386 で,non-PAE kernel の場合,

Linux version 2.6.18-8.el5 (mockbuild@builder4.centos.org) (gcc version 4.1.1 20
070105 (Red Hat 4.1.1-52)) #1 SMP Thu Mar 15 19:57:35 EDT 2007
BIOS-provided physical RAM map:
 BIOS-e820: 0000000000000000 - 000000000009dc00 (usable)
 BIOS-e820: 000000000009dc00 - 00000000000a0000 (reserved)
 BIOS-e820: 00000000000e4000 - 0000000000100000 (reserved)
 BIOS-e820: 0000000000100000 - 00000000c7e70000 (usable)
 BIOS-e820: 00000000c7e70000 - 00000000c7e7a000 (ACPI data)
 BIOS-e820: 00000000c7e7a000 - 00000000c7e7b000 (ACPI NVS)
 BIOS-e820: 00000000c7e7b000 - 00000000c8000000 (reserved)
 BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
 BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved)
 BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
 BIOS-e820: 00000000ff000000 - 0000000100000000 (reserved)
 BIOS-e820: 0000000100000000 - 0000000138000000 (usable)
Warning only 4GB will be used.
Use a PAE enabled kernel.
3200MB HIGHMEM available.
896MB LOWMEM available.

... snip ...

Memory: 3234772k/4194304k available (2043k kernel code, 39088k reserved, 846k data, 232k init, 2357696k highmem)

のように 3.2GB のメモリが使用可とのことですが,

 BIOS-e820: 0000000100000000 - 0000000138000000 (usable)

という部分に一筋の光明が。

ということで PAE kernel でブートしてみる。と,

Linux version 2.6.18-8.1.6.el5PAE (mockbuild@builder4.centos.org) (gcc version 4
.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP Thu Jun 14 19:10:16 EDT 2007
BIOS-provided physical RAM map:
 BIOS-e820: 0000000000000000 - 000000000009dc00 (usable)
 BIOS-e820: 000000000009dc00 - 00000000000a0000 (reserved)
 BIOS-e820: 00000000000e4000 - 0000000000100000 (reserved)
 BIOS-e820: 0000000000100000 - 00000000c7e70000 (usable)
 BIOS-e820: 00000000c7e70000 - 00000000c7e7a000 (ACPI data)
 BIOS-e820: 00000000c7e7a000 - 00000000c7e7b000 (ACPI NVS)
 BIOS-e820: 00000000c7e7b000 - 00000000c8000000 (reserved)
 BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
 BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved)
 BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
 BIOS-e820: 00000000ff000000 - 0000000100000000 (reserved)
 BIOS-e820: 0000000100000000 - 0000000138000000 (usable)
4096MB HIGHMEM available.
896MB LOWMEM available.

... snip ...

Memory: 4145100k/5111808k available (2040k kernel code, 46236k reserved, 841k data, 232k init, 3275200k highmem)

おお,4GB使用可になりましたよ。

% free

            total       used       free     shared    buffers     cached
Mem:       4147812     404944    3742868          0      81964     208564
-/+ buffers/cache:     114416    4033396
Swap:      1044216          0    1044216

X もきちんとあがりますし(nvidia ドライバじゃなくて nv ドライバでしかテストしていませんが)。

ということで,IA-32 でも PAE on でうまく PCI memory remapping をハンドリングできる OS を使えば,無駄なくメモリを使用することができる環境はある,と。

本筋とは関係ないですが,このマシン,PCI Express にグラボ刺しててもオンボードな Volari が切り離されないのはちっと悲しいです。

2007/06/26 追記

Windows XP 32bit をインストールしてみましたが,やっぱり天使の取り分が発生し,有効メモリは 3GB になってしまいました。システム情報リソースでメモリを見たところ,32 bit な表記だったんで,やっぱり物理アドレス 32bit が限界みたいですね。