¿Por qué mi sistema muestra solo 3.2 GiB de RAM cuando definitivamente tengo 4.0 GiB?

12

Tengo 2x2 GiB sticks de RAM instalados.
Ejecutar memtest86desde el menú de arranque de grub confirma esto ... memtest86 no informa errores.

Sin embargo, cada vez que reviso mi memoria disponible en un sistema Ubuntu 10.04 en ejecución, informa solo aproximadamente 3.2 GiB.

  • cat /proc/meminfo == 3320132 kB
  • System Monitor == 3.2 GiB
  • htop == 3242 MB
  • free -m == 3242 MB

¿Quién tiene mi RAM faltante ?

Información actualizada: Acabo de iniciar dual en otra versión de Ubuntu 10.04 en el mismo hardware (olvidé que lo había instalado hace muchos meses, para emergencias):) .... Informa 3.9 GiB, a través de System Monitor...

He publicado mi /var/log/messagesinformación más reciente en http://pastebin.ubuntu.com/629246/

Peter.O
fuente
¿Qué tipo de núcleo estás usando? A menos que use un 'bigmem' o 'x86-64', es posible que no tenga toda su RAM visible para el sistema. Además, algunas opciones de BIOS afectan la visibilidad de la RAM total. Use su / var / log / messages log (al principio) para ver cómo se mapearon las regiones de memoria.
mbaitoff
No sé cómo interpretar /var/log/messages, pero he publicado mi información más reciente aquí: pastebin.ubuntu.com/629246 .. tal vez alguien pueda hacer
cara
¿Era ese registro del sistema informado por 3.2Gb, o del sistema informado por 3.9Gb?
mbaitoff
Las líneas 61,62 de su registro muestran 3.2Gb disponibles.
mbaitoff
Tengo Ubuntu 10.04 con x86-64 (64 bits) instalado en una máquina de 4 Gb. Informa 3964 Mb ('free -m'), por lo que su segunda configuración detecta la cantidad de RAM correctamente. Verifique qué tipo de núcleo está instalado en su segundo sistema.
mbaitoff

Respuestas:

19

Un espacio de direcciones de 32 bits significa que tiene espacio para 4 GB de direcciones. Idealmente, al núcleo le gusta poder mapear toda la memoria física, toda la memoria de la tarea actual y toda su propia memoria. Si la memoria física solo ocupa todos los 4 GB disponibles, eso no funcionará. Por lo tanto, la memoria física se divide en poca memoria, que está asignada todo el tiempo, y alta memoria, que debe asignarse cuando está en uso. A menos que esté ejecutando un kernel parcheado, en la arquitectura ix86, se dedican 128 MB de espacio de direcciones al código del kernel y las estructuras de datos, y 896 MB se dedican al mapeo de la memoria física (para un total de 1 GB).

Lectura de antecedentes sobre las complejidades de la administración de memoria cuando su espacio de direcciones no es cómodamente más grande que su memoria total:

Extractos de los registros de su núcleo:

BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cdce0000 (usable)
BIOS-e820: 00000000cdce0000 - 00000000cdce3000 (ACPI NVS)
BIOS-e820: 00000000cdce3000 - 00000000cdcf0000 (ACPI data)
BIOS-e820: 00000000cdcf0000 - 00000000cdd00000 (reserved)
BIOS-e820: 00000000d0000000 - 00000000e0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000130000000 (usable)
2404MB HIGHMEM available.
887MB LOWMEM available.
Zone PFN ranges:
DMA      0x00000000 -> 0x00001000
Normal   0x00001000 -> 0x000377fe
HighMem  0x000377fe -> 0x000cdce0

Aquí tiene 887 MB de memoria baja: el máximo teórico de 896 MB menos unos MB de búferes DMA (zonas de memoria utilizadas para comunicarse con dispositivos de hardware).

De su memoria física, 3328 MB se asignan a direcciones de menos de 4 GB y 768 MB se asignan a direcciones de más de 4 GB (el rango 0x100000000–0x130000000). No está obteniendo acceso a estos 768 MB, lo que explica por qué solo tiene 3242 MB disponibles (4096 MB de RAM menos 768 MB inaccesibles menos 9 MB de memorias intermedias DMA menos 75 MB utilizados por el propio núcleo para el código y los datos). No sé por qué el BIOS asigna algo de RAM por encima de la marca de 4 GB, pero como punto de datos, estoy publicando esto desde una PC con 4 GB de RAM que de manera similar tiene RAM asignada a 0x100000000–0x130000000.

La asignación de memoria física por encima de 4 GB requiere el uso de PAE . PAE incurre en una pequeña sobrecarga de rendimiento (en particular, requiere estructuras de datos más grandes en el administrador de memoria), por lo que no está habilitado sistemáticamente. El kernel predeterminado de Ubuntu se compila sin compatibilidad con PAE. Obtenga el -generic-paekernel Instalar linux-image-generic-pae para poder acceder a hasta 64 GB de RAM.

TL, DR: Linux está funcionando como se esperaba. El firmware no es tan útil. Obtenga un kernel habilitado para PAE.

Gilles 'SO- deja de ser malvado'
fuente
Bueno, eso fue fácil ... Gracias Gilles :) ... ¡comprender el registro es definitivamente más difícil! ... Lo instalé linux-image-2.6.32-32-generic-pae, y htopahora informa3990 MiB
Peter.O
1
La máquina asigna el ram por encima de la marca de 4 gb para que pueda colocar memoria de hardware como su ram de video debajo de la marca de 4 gb para que puedan ser utilizados por núcleos de 32 bits no habilitados para pae.
psusi
¿Supongo que todos tus GB deberían ser GiB?
weynhamz
@TechliveZheng Este es un sitio de tecnología informática, no un sitio de física. Todos mis MB, GB, etc. son de hecho MiB, GiB, etc.
Gilles 'SO- deja de ser malvado'
1

Tal vez sea porque la arquitectura de su Ubuntu es i386 (versión de 32 bits). ¿Cuál es el resultado cuando corres uname -a?

Jeff
fuente
uname -a... Linux DT9400 2.6.32-32-generic # 62-Ubuntu SMP mié 20 abr 21:54:21 UTC 2011 i686 GNU / Linux ... Sin embargo, como mencioné en la "Información actualizada:" en mi queston, otra instalación de arranque dual de 32 bits de 10.04 muestra 3.9 Gib. Ambos sistemas de arranque dual se instalaron desde el mismo CD, pero actualmente ejecutan diferentes núcleos y tienen diferentes programas instalados ... Por cierto, esto no es un acontecimiento reciente, Ha estado mostrando 3.2 GiB durante muchos meses ..
Peter.O
Obviamente estás ejecutando un kernel de 32 bits ('i686'). Por cierto, 3.9Gb ya significa 4Gb, ya que el hardware reserva algo de espacio de direcciones.
mbaitoff
Sí, gracias mbaitoff, esperaría un poco de memoria, pero creo que 0.8 GiB es demasiado, así que me gustaría saber qué está pasando aquí.
Peter
AFAIK Ubuntu puede instalar el kernel PAE que puede usar grandes cantidades de RAM incluso en x86
Anton Barkovsky
3
Creo que solo necesita instalar el kernel pae (linux-generic-pae y linux-headers-generic-pae) y, si lo desea, eliminar el kernel general.
Anton Barkovsky