Seulement 3,2 Go de RAM 4 Go détectés sur Debian 64 bits

9

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:

entrez la description de l'image ici

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

entrez la description de l'image ici

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/cpuinfomontre 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
Jonathon Reinhart
la source
Assurez-vous que le remappage de la mémoire est activé dans le BIOS.
David Schwartz
@DavidSchwartz J'ai essayé d'activer cela et le noyau a paniqué au démarrage. Je peux essayer cela avec un CD live.
Jonathon Reinhart
@DavidSchwartz Vous avez absolument raison. L'activation du remappage de la mémoire semble avoir fait l'affaire. Sans cela, Memtest86 + rapporte environ 3300 Mo. Lorsqu'il est allumé, il rapporte 4086 Mo. Si vous répondez à cette question, je l'accepterai avec plaisir.
Jonathon Reinhart

Réponses:

5

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.

David Schwartz
la source
C'était ça le problème. L'activation du remappage de la mémoire semble avoir fait l'affaire. Sans cela, Memtest86 + rapporte environ 3300 Mo. Lorsqu'il est allumé, il rapporte 4086 Mo.
Jonathon Reinhart
De même, avant d'activer Memory Hole Remapping(AMIBIOS), le POST rapporterait environ 3,3 Gio, tandis que DMI listerait toujours deux modules de 2 Gio chacun.
njsg
5

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.

Hennes
la source
J'ai pratiquement ignoré ce fait ... je veux dire 0,8 Go? Cependant, le haut de la carte e820 est 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/cpuinfodit que address sizes : 36 bits physical, 48 bits virtualcela devrait être bon pour 64 Go. ( (1<<36) / (1024*1024*1024) == 64)
Jonathon Reinhart
Le manuel de ma vieille carte mère Tyan est le seul qui semble m'avertir que même s'il prend en charge 4 Go de RAM, il n'exposera jamais tout cela au système d'exploitation. Selon les cartes d'extension utilisées (PCI ordinaire, 66 MHz, 64 bits), cela exposerait environ 3,3 Go d'espace utilisable. Je n'ai jamais pu tester cela, 512 Mo de RAM étaient tout ce que je pouvais me permettre. (C'était à l'époque où cette carte mère à double processeur signifiait toujours utiliser deux processeurs physiques. Les choses pourraient avoir changé depuis et PCIe pourrait ne pas avoir la même limite. Mais la plupart des cartes mères ont toujours PCI et PCIe).
Hennes
Voir mon montage. Je pense que le problème est que le BIOS refuse de signaler toute mémoire 1<<32, ou ce noyau ne sait pas comment le comprendre.
Jonathon Reinhart
Avez-vous pensé à la mémoire partagée utilisée par vos graphiques internes? Si vous avez smeminstallé, essayez d' smem -R 4G -wavoir un aperçu général de la mémoire disponible / utilisée.
Izzy
1
@Hennes Cette réponse serait parfaitement logique s'il s'agissait d'un système 32 bits. Mais pas pour 64 bits (avec adressage de mémoire physique 36 bits).
Jonathon Reinhart
2

Votre RAM manquante est utilisée par le firmware:

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

Résumant:

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

Donc, vous voyez, cela résume jusqu'à 4 Go. Et voici le ~ 800M que vous signalez manquant:

firmware/hardware            843592          0     843592
Izzy
la source
Oui, et cela ne m'étonne pas. La question est, pourquoi le BIOS ne rapporte-t-il pas 800 Mo de RAM au 0x100000000 (1<<32)- dessus ? Il se comporte comme s'il s'agissait d'un système 32 bits.
Jonathon Reinhart
Oui, je pense que cette réponse est valide, mais cette dernière question demeure :-)
Jonathon Reinhart
Alors, que smem -R 2G -wdit-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 ...
Izzy
Cela pourrait-il avoir à voir avec 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 ...
Izzy
Je peux vérifier quand je rentre chez moi, mais je suppose que cela dira la même chose. Regardez la carte E820 pour 2 Go. Par observation, il semble à peu près le même, sauf que les plages réservées / ACPI sont plus faibles dans l'espace addr (certaines d'entre elles).
Jonathon Reinhart