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:
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
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/cpuinfo
zeigt, 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
quelle
Antworten:
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.
quelle
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.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.
quelle
0x100000000 == 1<<32
jedoch interessant. Warum ordnet das BIOS den Rest des RAM nicht über 1 << 32 zu? Es ist ein Celeron E3400 und/proc/cpuinfo
sagt,address sizes : 36 bits physical, 48 bits virtual
das sollte für 64 GB gut sein. ((1<<36) / (1024*1024*1024) == 64
)1<<32
, oder dieser Kernel nicht weiß, wie er es verstehen soll.smem
installiert haben, versuchen Sie ,smem -R 4G -w
einen allgemeinen Überblick über den verfügbaren / verwendeten Speicher zu erhalten.Ihr fehlender RAM wird von der Firmware verwendet:
Zusammenfassen:
Sie sehen also, es summiert sich auf 4 GB. Und hier sind die ~ 800M, die Sie als vermisst melden:
quelle
0x100000000 (1<<32)
. Es verhält sich wie ein 32-Bit-System.smem -R 2G -w
also 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 ...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 ...