J'utilise 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
J'ai 2 sticks compatibles 2 Go de DDR2 dans ma carte mère G31M-S . Il prend en charge jusqu'à 8 Go:
Puisqu'il s'agit d'un serveur, je ne me soucie pas vraiment des graphiques. Je l'ai donc réglé au plus bas.
Internal Graphics Mode Select: Auto
Enabled, 1MB <--
Enabled, 8MB
DVMT Mode Select: Fixed Mode <--
Auto
DVMT/FIXED Memory: 128MB <--
256MB
Cependant, Linux ne détecte que 3,19 Go de mémoire:
# cat /proc/meminfo
MemTotal: 3350712 kB
...
En regardant la carte 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)
Et faire un peu de maths:
>>> ((0x9F800 - 0x10000) + (0xCF6B0000 - 0x100000)) / 1024.0 / 1024.0 / 1024.0
3.240476608276367
Nous obtenons à peu près la même réponse.
Qu'est-ce que je rate?
Je n'achète pas complètement l'argument "espace d'adressage PCI". En retirant l'un des deux sticks de 2 Go, l'écran de configuration affiche 2048 Mo.
# cat /proc/meminfo
MemTotal: 2058432 kB
C'est 1,96 Go.
Carte E820 à nouveau:
[ 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)
Et les maths ...
>>> ((0x9F800 - 0x10000) + (0x7fdb0000 - 0x100000)) / 1024.0 / 1024.0 / 1024.0
1.9973125457763672
J'ai donc eu 2 Go / 2 Go. /proc/cpuinfo
montre que mon processeur prend en charge l'adressage physique 36 bits. 2 ^ 36 = 64 Go, dont je ne suis même pas proche.
# ./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
la source
Réponses:
Vous devez activer la mémoire Remapping ON dans le BIOS. Sinon, il ne remappera pas la mémoire au-dessus de la limite de 4 Go et une partie de la mémoire sera couverte par des mappages matériels.
la source
Memory Hole Remapping
(AMIBIOS), le POST rapporterait environ 3,3 Gio, tandis que DMI listerait toujours deux modules de 2 Gio chacun.PCI utilise également une partie de l'espace d'adressage. Les cartes PCI et les périphériques PCI sont intégrés à la carte mère (comme le chipset).
Habituellement, cela signifiait que sur 4 Go, seuls 3¼ à 3½ Go étaient disponibles, même si vous n'utilisiez pas un GPU moderne avec beaucoup de RAM intégrée.
la source
0x100000000 == 1<<32
, ce qui est intéressant. Alors pourquoi le BIOS ne mappe-t-il pas le reste de la RAM au-dessus de 1 << 32? C'est un Celeron E3400, et/proc/cpuinfo
dit queaddress sizes : 36 bits physical, 48 bits virtual
cela devrait être bon pour 64 Go. ((1<<36) / (1024*1024*1024) == 64
)1<<32
, ou ce noyau ne sait pas comment le comprendre.smem
installé, essayez d'smem -R 4G -w
avoir un aperçu général de la mémoire disponible / utilisée.Votre RAM manquante est utilisée par le firmware:
Résumant:
Donc, vous voyez, cela résume jusqu'à 4 Go. Et voici le ~ 800M que vous signalez manquant:
la source
0x100000000 (1<<32)
- dessus ? Il se comporte comme s'il s'agissait d'un système 32 bits.smem -R 2G -w
dit-on avec seulement 2G dans la machine (en particulier en ce qui concerne le firmware / matériel, car cela semble être la section où le "800M manquant" est allé avec la 4G)? Ce serait assez drôle si le firmware n'a soudainement plus besoin de ces 800M ...AMI BIOS detected: BIOS may corrupt low RAM, working around it.
- et la remarque de Wikipedia (à partir de votre lien e820) "Parfois, le BIOS est bogué et signale de manière incorrecte la mémoire réservée. Cela peut entraîner un logiciel de test de mémoire, comme Memtest, pour signaler des erreurs." ? EDIT: Ah, non - cela ne représenterait que 64k , pas 800M ...