web-dev-qa-db-ja.com

64ビットDebianで検出された4GBの3.2GBのみRAM

Debian Squeeze(x64)を実行しています:

# uname -srvmo
Linux 2.6.32-5-AMD64 #1 SMP Mon Jan 16 16:22:28 UTC 2012 x86_64 GNU/Linux

G31M-Sマザーボード に互換性のある2GBのDDR2スティックが2つあります。最大8GBをサポートします。

enter image description here

これはサーバーなので、グラフィックはあまり気にしません。だから私はそれを最低に設定しました。

Internal Graphics Mode Select: Auto
                               Enabled, 1MB   <--
                               Enabled, 8MB
DVMT Mode Select:              Fixed Mode     <--
                               Auto
    DVMT/FIXED Memory:         128MB          <--
                               256MB

enter image description here

ただし、Linuxは3.19GiBのメモリしか検出していません。

# cat /proc/meminfo
MemTotal:        3350712 kB
...

E820マップ を見る:

[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
[    0.000000]  BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000e6000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 00000000cfdb0000 (usable)
[    0.000000]  BIOS-e820: 00000000cfdb0000 - 00000000cfdc0000 (ACPI data)
[    0.000000]  BIOS-e820: 00000000cfdc0000 - 00000000cfdf0000 (ACPI NVS)
[    0.000000]  BIOS-e820: 00000000cfdf0000 - 00000000cfe00000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved)
[    0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[    0.000000]  BIOS-e820: 00000000ff380000 - 0000000100000000 (reserved)
[    0.000000] DMI present.
[    0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it.
[    0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)

そして少し数学をする:

>>> ((0x9F800 - 0x10000) + (0xCF6B0000 - 0x100000)) / 1024.0 / 1024.0 / 1024.0
3.240476608276367

ほぼ同じ答えが得られます。

何が足りないのですか?


「PCIアドレス空間」の議論を完全に購入しているわけではありません。 2つの2GBスティックの1つを取り出すと、セットアップ画面に2048MBが表示されます。

# cat /proc/meminfo
MemTotal:        2058432 kB

それは1.96GBです。

E820マップ 再び:

[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
[    0.000000]  BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000e6000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 000000007fdb0000 (usable)
[    0.000000]  BIOS-e820: 000000007fdb0000 - 000000007fdc0000 (ACPI data)
[    0.000000]  BIOS-e820: 000000007fdc0000 - 000000007fdf0000 (ACPI NVS)
[    0.000000]  BIOS-e820: 000000007fdf0000 - 000000007fe00000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved)
[    0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[    0.000000]  BIOS-e820: 00000000ff380000 - 0000000100000000 (reserved)
[    0.000000] DMI present.
[    0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it.
[    0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)

そして数学...

>>> ((0x9F800 - 0x10000) + (0x7fdb0000 - 0x100000)) / 1024.0 / 1024.0 / 1024.0
1.9973125457763672

だから私は2GB/2GBを手に入れました。 /proc/cpuinfoは、私のプロセッサが36ビットの物理アドレス指定をサポートしていることを示しています。 2 ^ 36 = 64GB、これには近づいていません。


# ./smem -R 4G -w
Area                           Used      Cache   Noncache
firmware/hardware            843592          0     843592
kernel image                      0          0          0
kernel dynamic memory        181116     134616      46500
userspace memory             287784      19736     268048
free memory                 2881812    2881812          0
9

BIOSでメモリの再マッピング[〜#〜] on [〜#〜]をオンにする必要があります。そうしないと、4GBの境界を超えてメモリが再マッピングされず、一部のメモリがハードウェアマッピングによってカバーされます。

5
David Schwartz

PCIは、アドレス空間の一部も使用します。 PCIカードとPCIデバイスの両方がマザーボード(チップセットなど)に組み込まれています。

通常、これは、多くのオンボードRAMを備えた最新のGPUを使用していなくても、4GBのうち3¼から3½GBしか使用できないことを意味していました。

5
Hennes

不足しているRAMはファームウェアによって使用されます:

# ./smem -R 4G -w
Area                           Used      Cache   Noncache
firmware/hardware            843592          0     843592
kernel image                      0          0          0
kernel dynamic memory        181116     134616      46500
userspace memory             287784      19736     268048
free memory                 2881812    2881812          0

まとめ:

echo $((181116 + 287784 + 2881812 + 843592))
4194304

ご覧のとおり、合計で4GBになります。そして、これがあなたが行方不明だと報告する〜800Mです:

firmware/hardware            843592          0     843592
2
Izzy