Solo 3,2 GB de 4 GB de RAM detectados en Debian de 64 bits

9

Estoy ejecutando 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

Tengo 2 unidades compatibles de 2 GB de DDR2 en mi placa base G31M-S . Admite hasta 8 GB:

ingrese la descripción de la imagen aquí

Como este es un servidor, realmente no me importan los gráficos. Así que lo puse al más bajo.

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

ingrese la descripción de la imagen aquí

Sin embargo, Linux solo detecta 3.19GiB de memoria:

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

Mirando el mapa 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)

Y haciendo un poco de matemática:

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

Obtenemos casi la misma respuesta.

¿Qué me estoy perdiendo?


No estoy comprando completamente el argumento del "espacio de direcciones PCI". Al sacar uno de los dos sobres de 2GB, la pantalla de configuración muestra 2048MB.

# cat /proc/meminfo
MemTotal:        2058432 kB

Eso es 1.96GB.

E820 mapa de nuevo:

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

Y las matemáticas ...

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

Entonces obtuve 2GB / 2GB. /proc/cpuinfomuestra que mi procesador admite direccionamiento físico de 36 bits. 2 ^ 36 = 64 GB, que ni siquiera estoy cerca.


# ./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
fuente
Asegúrese de que la reasignación de memoria esté activada en el BIOS.
David Schwartz
@DavidSchwartz Intenté encenderlo y el núcleo entró en pánico al arrancar. Aunque puedo intentarlo con un CD en vivo.
Jonathon Reinhart
@DavidSchwartz Tienes toda la razón. Activar la reasignación de memoria parece haber hecho el truco. Sin activarlo, Memtest86 + informa ~ 3300 MB. Con esto encendido, reporta 4086 MB. Si responde eso, con gusto lo aceptaré.
Jonathon Reinhart

Respuestas:

5

Que necesita para convertir la memoria de reasignación EN en el BIOS. De lo contrario, no reasignará la memoria por encima del límite de 4 GB y parte de la memoria estará cubierta por asignaciones de hardware.

David Schwartz
fuente
Este fue el problema. Activar la reasignación de memoria parece haber hecho el truco. Sin activarlo, Memtest86 + informa ~ 3300 MB. Con esto encendido, reporta 4086 MB.
Jonathon Reinhart
Lo mismo, antes de habilitar Memory Hole Remapping(AMIBIOS), la POST informaría aproximadamente 3.3 GiB, mientras que DMI aún enumeraría dos módulos de 2 GiB cada uno.
njsg
5

PCI también usa parte del espacio de direcciones. Tanto las tarjetas PCI como los dispositivos PCI se integran en la placa base (como el conjunto de chips).

Por lo general, esto significaba que de 4GB solo había disponibles de 3¼ a 3½ GB, incluso si no usaba una GPU moderna con mucha RAM incorporada.

Hennes
fuente
Casi ignoré ese hecho ... ¿Me refiero a 0.8GB? Sin embargo, la parte superior del mapa e820 0x100000000 == 1<<32es interesante. Entonces, ¿por qué el BIOS no asigna el resto de la RAM por encima de 1 << 32? Es un Celeron E3400, y /proc/cpuinfodice address sizes : 36 bits physical, 48 bits virtualque debería ser bueno para 64 GB. ( (1<<36) / (1024*1024*1024) == 64)
Jonathon Reinhart
El manual de mi antigua placa base Tyan es el único que parecía advertirme que, aunque admitía 4 GB de RAM, nunca expondría todo eso al sistema operativo. Dependiendo de las tarjetas de expansión usadas (PCI simple, 66Mhz, 64bit) expondría aproximadamente 3.3GB de espacio utilizable. Nunca pude probar eso, 512 MB de RAM era todo lo que podía pagar. (Esto fue cuando esta placa base de doble CPU todavía significaba usar dos CPU físicas. Las cosas podrían haber cambiado desde entonces y PCIe podría no tener el mismo límite. Pero la mayoría de las placas base todavía tienen PCI y PCIe).
Hennes
Mira mi edición. Creo que el problema es que el BIOS se niega a informar sobre cualquier memoria 1<<32o este núcleo no sabe cómo entenderlo.
Jonathon Reinhart
¿Consideró la memoria compartida utilizada por sus gráficos internos? Si lo ha smeminstalado, intente smem -R 4G -wobtener una descripción general de la memoria disponible / usada.
Izzy
1
@Hennes Esta respuesta tendría mucho sentido si se tratara de un sistema de 32 bits. Pero no para 64 bits (con direccionamiento de memoria física de 36 bits).
Jonathon Reinhart
2

El firmware utiliza la RAM que falta:

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

Resumiendo:

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

Como ve, suma hasta 4GB. Y aquí están los ~ 800M que informa que faltan:

firmware/hardware            843592          0     843592
Izzy
fuente
Sí, y eso no me sorprende. La pregunta es, ¿por qué el BIOS no informa que los 800 MB de RAM anteriores 0x100000000 (1<<32)? Se comporta como si fuera un sistema de 32 bits.
Jonathon Reinhart
Sí, creo que esta respuesta es válida, pero esa pregunta final permanece :-)
Jonathon Reinhart
Entonces, ¿qué smem -R 2G -wdice con solo 2G en la máquina (especialmente en lo que respecta al firmware / hardware, ya que esa parece ser la sección donde el "800M faltante" fue con 4G)? Sería bastante divertido si el firmware de repente ya no necesita esos 800M ...
Izzy
¿Podría tener que ver con AMI BIOS detected: BIOS may corrupt low RAM, working around it.- y la observación de Wikipedia (desde su enlace e820) "A veces el BIOS tiene errores e informa incorrectamente la memoria reservada. Esto puede hacer que el software de prueba de memoria, como Memtest, informe errores". ? EDITAR: Ah, no, eso solo representaría 64k , no 800M ...
Izzy
Puedo verificar cuando llegue a casa, pero supongo que dirá lo mismo. Mira el mapa E820 para 2GB. Por observación, se ve más o menos igual, excepto que los rangos reservados / ACPI son más bajos en el espacio adicional (algunos de ellos).
Jonathon Reinhart