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


9

私は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マザーボードに互換性のある2 GBのDDR2スティックが2つあります。最大8GBをサポートします。

ここに画像の説明を入力してください

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

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

ここに画像の説明を入力してください

ただし、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

BIOSでメモリの再マッピングがオンになっていることを確認します。
David Schwartz

@DavidSchwartzオンにしてみたところ、カーネルが起動時にパニックになりました。でもライブCDで試してみるかもしれません。
Jonathon Reinhart

@DavidSchwartzあなたは絶対に正しいです。メモリの再マッピングをオンにすることで問題が解決したようです。オンにしないと、Memtest86 +は約3300 MBを報告します。オンにすると、4086 MBと報告されます。答えていただければ、喜んでお受けいたします。
Jonathon Reinhart

回答:


5

BIOSでメモリの再マッピングをオンにする必要があります。それ以外の場合は、4GB境界を超えるメモリは再マッピングされず、一部のメモリはハードウェアマッピングによってカバーされます。


これが問題でした。メモリの再マッピングをオンにすることで問題が解決したようです。オンにしないと、Memtest86 +は約3300 MBを報告します。オンにすると、4086 MBと報告されます。
Jonathon Reinhart

同じように、Memory Hole Remapping(AMIBIOS)を有効にする前は、POSTは約3.3 GiBを報告しますが、DMIはそれぞれ2 GiBの2つのモジュールをリストします。
njsg 2014

5

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

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


私はその事実をほとんど無視しました...つまり、0.8GBですか?ただし、e820マップの上部はで、0x100000000 == 1<<32興味深いです。では、なぜBIOSは残りのRAMを1 << 32以上にマッピングしないのですか?それはCeleron E3400であり、それは64GBには良いはずだと/proc/cpuinfo言いaddress sizes : 36 bits physical, 48 bits virtualます。((1<<36) / (1024*1024*1024) == 64
Jonathon Reinhart 2012

私の古いTyanマザーボードのマニュアルは、4GBのRAMをサポートしていても、そのすべてがOSに公開されることはないと警告しているように思われる唯一のマニュアルです。使用する拡張カード(プレーンな古いPCI、66Mhz、64ビット)にもよりますが、約3.3GBの使用可能なスペースを公開します。私はそれをテストすることはありませんでした、512MBのRAMは私が買う余裕があったすべてでした。(これは、このデュアルCPUマザーボードがまだ2つの物理CPUを使用することを意味していたときに戻ってきました。それ以降、状況が変更され、PCIeに同じ制限がない可能性があります。ただし、ほとんどのマザーボードにはPCIとPCIeの両方がまだあります)。
ヘネス2012

私の編集を参照してください。問題は、BIOSがに関するメモリの報告を拒否するか、1<<32このカーネルがそれを理解する方法を知らないことです。
Jonathon Reinhart 2012

内部グラフィックで使用される共有メモリを検討しましたか?smemインストールしている場合はsmem -R 4G -w、使用可能/使用中のメモリの概要を確認してください。
Izzy、2012

1
@Hennesこれが32ビットシステムの場合、この回答は完全に理にかなっています。ただし、64ビット(36ビットの物理メモリアドレス指定)は対象外です。
Jonathon Reinhart

2

不足している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

はい、それに驚いてはいません。問題は、なぜBIOSが800MB以上のRAMを報告しないのかということ0x100000000 (1<<32)です。32ビットシステムのように動作しています。
Jonathon Reinhart

はい、私はこの答えは有効だと思いますが、その最後の質問は残ります:-)
Jonathon Reinhart

ではsmem -R 2G -w、マシンの2Gだけで何が言えるでしょうか(特に、「不足している800M」が4Gで発生したセクションのように思われるため、ファームウェア/ハードウェアに関して)。ファームウェアが突然これらの800Mを必要としなくなったらかなりおかしいでしょう...
Izzy

それと関係があるのでしょうかAMI BIOS detected: BIOS may corrupt low RAM, working around it.-ウィキペディアのコメント(e820linkから)「BIOSにバグがあり、予約済みメモリが誤って報告されることがあります。これにより、Memtestなどのメモリテストソフトウェアがエラーを報告する可能性があります。」?編集:ああ、いいえ-それは800Mではなく64kを占めるだけです...
Izzy

家に帰ったらチェックできますが、同じことが言えると思います。2GBのE820マップを見てください。観察により、予約済み/ ACPI範囲がアドレス空間で低くなっていることを除いて、ほぼ同じに見えます(それらの一部)。
Jonathon Reinhart
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.