Auf 64-Bit-Debian wurden nur 3,2 GB 4 GB RAM erkannt

9

Ich verwende 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

Ich habe 2 kompatible 2 GB DDR2-Sticks in meinem G31M-S-Motherboard . Es unterstützt bis zu 8 GB:

Geben Sie hier die Bildbeschreibung ein

Da dies ein Server ist, interessieren mich Grafiken nicht wirklich. Also habe ich es auf den niedrigsten Wert gesetzt.

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

Geben Sie hier die Bildbeschreibung ein

Linux erkennt jedoch nur 3,19 GB Arbeitsspeicher:

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

Blick auf die E820-Karte :

[    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)

Und ein bisschen rechnen:

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

Wir bekommen ungefähr die gleiche Antwort.

Was vermisse ich?


Ich kaufe das Argument "PCI-Adressraum" nicht vollständig. Wenn Sie einen der beiden 2-GB-Sticks herausnehmen, zeigt der Setup-Bildschirm 2048 MB an.

# cat /proc/meminfo
MemTotal:        2058432 kB

Das sind 1,96 GB.

E820 Karte noch einmal:

[    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)

Und die Mathematik ...

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

Also habe ich 2GB / 2GB. /proc/cpuinfozeigt, dass mein Prozessor physische 36-Bit-Adressierung unterstützt. 2 ^ 36 = 64 GB, denen ich nicht einmal nahe bin.


# ./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
Jonathon Reinhart
quelle
Stellen Sie sicher , Speicherneuzuordnung ist ON im BIOS.
David Schwartz
@ DavidSchwartz Ich habe versucht, das einzuschalten, und der Kernel geriet beim Booten in Panik. Ich kann das aber mit einer Live-CD versuchen.
Jonathon Reinhart
@ DavidSchwartz Du bist absolut richtig. Das Aktivieren der Speicher-Neuzuordnung scheint den Trick getan zu haben. Ohne diese Option meldet Memtest86 + ~ 3300 MB. Wenn es aktiviert ist, werden 4086 MB gemeldet. Wenn Sie darauf antworten, werde ich das gerne akzeptieren.
Jonathon Reinhart

Antworten:

5

Sie müssen Speicherneuzuordnung drehen ON in dem BIOS. Andernfalls wird der Speicher nicht über der 4-GB-Grenze neu zugeordnet, und ein Teil des Speichers wird durch Hardware-Zuordnungen verdeckt.

David Schwartz
quelle
Das war das Problem. Das Aktivieren der Speicher-Neuzuordnung scheint den Trick getan zu haben. Ohne diese Option meldet Memtest86 + ~ 3300 MB. Wenn es aktiviert ist, werden 4086 MB gemeldet.
Jonathon Reinhart
Vor dem Aktivieren Memory Hole Remapping(AMIBIOS) würde der POST ungefähr 3,3 GiB melden, während DMI immer noch zwei Module mit jeweils 2 GiB auflisten würde.
NJSG
5

PCI verwendet auch einen Teil des Adressraums. Sowohl PCI-Karten als auch PCI-Geräte sind in das Motherboard integriert (z. B. der Chipsatz).

Normalerweise bedeutete dies, dass von 4 GB nur 3¼ bis 3½ GB verfügbar waren, selbst wenn Sie keine moderne GPU mit viel integriertem RAM verwendeten.

Hennes
quelle
Ich habe diese Tatsache so ziemlich ignoriert ... ich meine 0,8 GB? Der obere Rand der e820-Karte ist 0x100000000 == 1<<32jedoch interessant. Warum ordnet das BIOS den Rest des RAM nicht über 1 << 32 zu? Es ist ein Celeron E3400 und /proc/cpuinfosagt, address sizes : 36 bits physical, 48 bits virtualdas sollte für 64 GB gut sein. ( (1<<36) / (1024*1024*1024) == 64)
Jonathon Reinhart
Das Handbuch für mein altes Tyan-Motherboard war das einzige, das mich zu warnen schien, dass es, obwohl es 4 GB RAM unterstützt, all dies niemals dem Betriebssystem aussetzen würde. Abhängig von den verwendeten Erweiterungskarten (einfache alte PCI, 66 MHz, 64 Bit) würde etwa 3,3 GB nutzbarer Speicherplatz verfügbar machen. Ich musste das nie testen, 512 MB RAM waren alles, was ich mir leisten konnte. (Dies war damals, als dieses Dual-CPU-Motherboard noch die Verwendung von zwei physischen CPUs bedeutete. Möglicherweise haben sich die Dinge seitdem geändert und PCIe hat möglicherweise nicht das gleiche Limit. Die meisten Motherboards haben jedoch immer noch sowohl PCI als auch PCIe.)
Hennes
Siehe meine Bearbeitung. Ich denke, das Problem ist, dass entweder das BIOS sich weigert, Speicher zu melden 1<<32, oder dieser Kernel nicht weiß, wie er es verstehen soll.
Jonathon Reinhart
Haben Sie den von Ihren internen Grafiken verwendeten gemeinsamen Speicher berücksichtigt? Wenn Sie smeminstalliert haben, versuchen Sie , smem -R 4G -weinen allgemeinen Überblick über den verfügbaren / verwendeten Speicher zu erhalten.
Izzy
1
@Hennes Diese Antwort wäre absolut sinnvoll, wenn dies ein 32-Bit-System wäre. Aber nicht für 64-Bit (mit 36-Bit-Adressierung des physischen Speichers).
Jonathon Reinhart
2

Ihr fehlender RAM wird von der Firmware verwendet:

# ./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

Zusammenfassen:

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

Sie sehen also, es summiert sich auf 4 GB. Und hier sind die ~ 800M, die Sie als vermisst melden:

firmware/hardware            843592          0     843592
Izzy
quelle
Ja, und das überrascht mich nicht. Die Frage ist, warum das BIOS nicht über 800 MB RAM berichtet 0x100000000 (1<<32). Es verhält sich wie ein 32-Bit-System.
Jonathon Reinhart
Ja, ich denke diese Antwort ist gültig, aber diese letzte Frage bleibt :-)
Jonathon Reinhart
Was sagt man smem -R 2G -walso mit nur 2G in der Maschine (insbesondere in Bezug auf die Firmware / Hardware, da dies der Abschnitt zu sein scheint, in dem die "fehlenden 800M" mit 4G gingen)? Wäre ziemlich lustig, wenn die Firmware diese 800M plötzlich nicht mehr benötigt ...
Izzy
Könnte es damit zu tun haben AMI BIOS detected: BIOS may corrupt low RAM, working around it.- und der Wikipedia-Bemerkung (von Ihrem e820link) "Manchmal ist das BIOS fehlerhaft und meldet den reservierten Speicher falsch. Dies kann dazu führen, dass Speichertestsoftware wie Memtest Fehler meldet." ? EDIT: Ah, nein - das würde nur 64k ausmachen, nicht 800M ...
Izzy
Ich kann überprüfen, wann ich nach Hause komme, aber ich gehe davon aus, dass es dasselbe sagt. Schauen Sie sich die E820-Karte für 2 GB an. Bei Beobachtung sieht es ungefähr gleich aus, außer dass die reservierten / ACPI-Bereiche im Adr-Bereich niedriger sind (einige von ihnen).
Jonathon Reinhart