Mis problemas fueron causados por un módulo de memoria defectuosoy muy posiblemente un binario del kernel roto.
Acabo de arrancar mi PC con hardware básicamente nuevo. He estado ejecutando Debian 6.0 AMD64 antes y no hubo cambios (literalmente; simplemente desconecté los discos duros de la placa base antigua y los volví a conectar a la nueva), pero encontré algo curioso:
- He instalado físicamente 4 x 8 GB de RAM
- La configuración UEFI/BIOS informa 16383 MB de RAM
- Linux
free -m
informa 2985 MB de RAM
2985 MB parece demasiado cerca de la marca mágica de 3 GB para que sea pura coincidencia, pero uname -r
se imprime 2.6.32-5-amd64
; claramente un kernel de 64 bits, que es todo lo que se ha instalado en la unidad del sistema que estoy usando. La nueva placa base es una Asus M5A97 Pro, que tiene cuatro ranuras DDR3 que supuestamente admiten módulos de 8 GB. Los módulos de memoria en sí son idénticos: cuatro Corsair XMS3 PC12800 de 8 GB, comprados juntos.
No revisé la configuración UEFI en detalle, pero la examiné y no vi nada que pareciera que fuera necesario cambiar para habilitar grandes cantidades de RAM.
Editar:Confirmación adicional de que realmente estoy ejecutando 64 bits:
# file `which free`
/usr/bin/free: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
#
¿Qué pasa con esto y qué puedo hacer al respecto?
Edición 2:dmesg, dmidecode y meminfo, según lo solicitado. No tengo acceso físico al sistema en este momento, así que tendré que esperar hasta esta noche para sacar algunos módulos y ver qué hace. (Tenga en cuenta que dmidecode informa 3 x 8 GB más una ranura DIMM vacía. También tenga en cuenta el mensaje de discrepancia MTRR del kernel, lo que lleva a una pérdida de 13 GB, que al menos se suma a lo que informa la placa base).
# dmidecode --type memory
# dmidecode 2.9
SMBIOS 2.7 present.
Handle 0x0026, DMI type 16, 23 bytes
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 32 GB
Error Information Handle: Not Provided
Number Of Devices: 4
Handle 0x0028, DMI type 17, 34 bytes
Memory Device
Array Handle: 0x0026
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: DIMM
Set: None
Locator: DIMM0
Bank Locator: BANK0
Type: <OUT OF SPEC>
Type Detail: Synchronous
Speed: 1333 MHz (0.8 ns)
Manufacturer: Manufacturer0
Serial Number: SerNum0
Asset Tag: AssetTagNum0
Part Number: Array1_PartNumber0
Handle 0x002A, DMI type 17, 34 bytes
Memory Device
Array Handle: 0x0026
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: DIMM
Set: None
Locator: DIMM1
Bank Locator: BANK1
Type: <OUT OF SPEC>
Type Detail: Synchronous
Speed: 1333 MHz (0.8 ns)
Manufacturer: Manufacturer1
Serial Number: SerNum1
Asset Tag: AssetTagNum1
Part Number: Array1_PartNumber1
Handle 0x002C, DMI type 17, 34 bytes
Memory Device
Array Handle: 0x0026
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: DIMM
Set: None
Locator: DIMM2
Bank Locator: BANK2
Type: <OUT OF SPEC>
Type Detail: Synchronous
Speed: 1333 MHz (0.8 ns)
Manufacturer: Manufacturer2
Serial Number: SerNum2
Asset Tag: AssetTagNum2
Part Number: Array1_PartNumber2
Handle 0x002E, DMI type 17, 34 bytes
Memory Device
Array Handle: 0x0026
Error Information Handle: Not Provided
Total Width: Unknown
Data Width: 64 bits
Size: No Module Installed
Form Factor: DIMM
Set: None
Locator: DIMM3
Bank Locator: BANK3
Type: Unknown
Type Detail: Synchronous
Speed: Unknown
Manufacturer: Manufacturer3
Serial Number: SerNum3
Asset Tag: AssetTagNum3
Part Number: Array1_PartNumber3
#
======================================================================
# cat /proc/meminfo
MemTotal: 3056820 kB
MemFree: 1470820 kB
Buffers: 390204 kB
Cached: 194660 kB
SwapCached: 0 kB
Active: 488024 kB
Inactive: 419096 kB
Active(anon): 231112 kB
Inactive(anon): 96660 kB
Active(file): 256912 kB
Inactive(file): 322436 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 8 kB
Writeback: 0 kB
AnonPages: 322320 kB
Mapped: 33012 kB
Shmem: 5472 kB
Slab: 613952 kB
SReclaimable: 597404 kB
SUnreclaim: 16548 kB
KernelStack: 2384 kB
PageTables: 19472 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 1528408 kB
Committed_AS: 621464 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 294484 kB
VmallocChunk: 34359429080 kB
HardwareCorrupted: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 9216 kB
DirectMap2M: 2054144 kB
DirectMap1G: 1048576 kB
#
======================================================================
# dmesg | grep -i memory
[ 0.000000] WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13295MB of RAM.
[ 0.000000] WARNING: at /tmp/buildd/linux-2.6-2.6.32/debian/build/source_amd64_none/arch/x86/kernel/cpu/mtrr/cleanup.c:1092 mtrr_trim_uncached_memory+0x2e6/0x311()
[ 0.000000] [<ffffffff814f7f1e>] ? mtrr_trim_uncached_memory+0x2e6/0x311
[ 0.000000] [<ffffffff814f7f1e>] ? mtrr_trim_uncached_memory+0x2e6/0x311
[ 0.000000] [<ffffffff814f7f1e>] ? mtrr_trim_uncached_memory+0x2e6/0x311
[ 0.000000] initial memory mapped : 0 - 20000000
[ 0.000000] init_memory_mapping: 0000000000000000-00000000bdf00000
[ 0.000000] PM: Registered nosave memory: 000000000009d000 - 000000000009e000
[ 0.000000] PM: Registered nosave memory: 000000000009e000 - 00000000000a0000
[ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000
[ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000
[ 0.000000] PM: Registered nosave memory: 00000000bd94d000 - 00000000bd99c000
[ 0.000000] PM: Registered nosave memory: 00000000bd99c000 - 00000000bd9a6000
[ 0.000000] PM: Registered nosave memory: 00000000bd9a6000 - 00000000bdade000
[ 0.000000] PM: Registered nosave memory: 00000000bdade000 - 00000000bdaef000
[ 0.000000] PM: Registered nosave memory: 00000000bdaef000 - 00000000bdb02000
[ 0.000000] PM: Registered nosave memory: 00000000bdb02000 - 00000000bdb04000
[ 0.000000] PM: Registered nosave memory: 00000000bdb04000 - 00000000bdb0d000
[ 0.000000] PM: Registered nosave memory: 00000000bdb0d000 - 00000000bdb13000
[ 0.000000] PM: Registered nosave memory: 00000000bdb13000 - 00000000bdb75000
[ 0.000000] PM: Registered nosave memory: 00000000bdb75000 - 00000000bdd78000
[ 0.000000] Memory: 3046732k/3111936k available (3075k kernel code, 4728k absent, 60476k reserved, 1879k data, 584k init)
[ 1.636730] Freeing initrd memory: 9501k freed
[ 1.647370] Freeing unused kernel memory: 584k freed
[ 4.876602] [TTM] Zone kernel: Available graphics memory: 1528410 kiB.
[ 4.876615] [drm] radeon: 256M of VRAM memory ready
[ 4.876617] [drm] radeon: 512M of GTT memory ready.
[ 25.571018] VBoxDrv: dbg - g_abExecMemory=ffffffffa051d6c0
#
Grepping para e820 muestra una serie de rangos, culminando con e820 update range: 00000000bdf00000 - 000000043f000000 (usable) ==> (reserved)
. 43f000000 es 16 GiB, bdf00000 es 3039 MiB. sínoVeo que eso es una coincidencia.
# dmesg | grep -i e820
[ 0.000000] BIOS-e820: 0000000000000000 - 000000000009d800 (usable)
[ 0.000000] BIOS-e820: 000000000009d800 - 00000000000a0000 (reserved)
[ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved)
[ 0.000000] BIOS-e820: 0000000000100000 - 00000000bd94d000 (usable)
[ 0.000000] BIOS-e820: 00000000bd94d000 - 00000000bd99c000 (ACPI NVS)
[ 0.000000] BIOS-e820: 00000000bd99c000 - 00000000bd9a6000 (ACPI data)
[ 0.000000] BIOS-e820: 00000000bd9a6000 - 00000000bdade000 (reserved)
[ 0.000000] BIOS-e820: 00000000bdade000 - 00000000bdaef000 (ACPI NVS)
[ 0.000000] BIOS-e820: 00000000bdaef000 - 00000000bdb02000 (reserved)
[ 0.000000] BIOS-e820: 00000000bdb02000 - 00000000bdb04000 (ACPI NVS)
[ 0.000000] BIOS-e820: 00000000bdb04000 - 00000000bdb0d000 (reserved)
[ 0.000000] BIOS-e820: 00000000bdb0d000 - 00000000bdb13000 (ACPI NVS)
[ 0.000000] BIOS-e820: 00000000bdb13000 - 00000000bdb75000 (reserved)
[ 0.000000] BIOS-e820: 00000000bdb75000 - 00000000bdd78000 (ACPI NVS)
[ 0.000000] BIOS-e820: 00000000bdd78000 - 00000000bdf00000 (usable)
[ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved)
[ 0.000000] BIOS-e820: 00000000fec10000 - 00000000fec11000 (reserved)
[ 0.000000] BIOS-e820: 00000000fec20000 - 00000000fec21000 (reserved)
[ 0.000000] BIOS-e820: 00000000fed00000 - 00000000fed01000 (reserved)
[ 0.000000] BIOS-e820: 00000000fed61000 - 00000000fed71000 (reserved)
[ 0.000000] BIOS-e820: 00000000fed80000 - 00000000fed90000 (reserved)
[ 0.000000] BIOS-e820: 00000000fef00000 - 0000000100000000 (reserved)
[ 0.000000] BIOS-e820: 0000000100001000 - 000000043f000000 (usable)
[ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)
[ 0.000000] e820 update range: 00000000bdf00000 - 000000043f000000 (usable) ==> (reserved)
[ 0.000000] update e820 for mtrr
#
EDITAR 3/4 - éxito parcial:
- Actualizar el BIOS UEFI de la versión
0705 x64 08/23/2011
a1007 02/10/2012
no ayudó: persistió exactamente el mismo problema. - Quitar un módulo DIMM (adiviné con suerte cuál era la ranura número 4: la más alejada de la CPU) permitió que el BIOS detectara y usara los 24 GB restantes, aunque una configuración de tres DIMM no es "recomendada" según la diagrama en el manual del usuario. En particular, colocar uno de los DIMM restantes en la ranura n.° 4 aún permitía su uso, por lo que la ranura está bien. Al volver a colocar el DIMM "original" en esa ranura, volví a mi punto de partida.
- Arrancar desde el CD de instalación de Debian 6.0.3 AMD64 en un entorno de rescate y verificar su
dmesg
resultado muestrano hay errores MTRR similares. Además, en ese entorno, con 3 x 8 GB instalados, 24 GB (más o menos épsilon multiplicado por pi o más o menos; no hice los cálculos exactos) aparecen como utilizables segúnfree
. - Actualizar/reinstalar el kernel (había una actualización menor disponible) parece haber solucionado los problemas de MTRR también.
dmesg
ahora informa 26198016 KB en total y no hay errores MTRR, lo cual está en línea con lo que esperaría con 3 x 8 GB instalados.free -m
ahora informa 24114 MB de RAM total, lo que, francamente, está bastante cerca para mí.
Esto huele a DIMM vomitado, además de un núcleo que por alguna razón fue dañado; eso últimopuedehan sucedido durante el corte de energía (¡aunque debo decir que es una forma extraña de que el núcleo se rompa!). El DIMM que no funciona volverá al revendedor tan pronto como hable con él (con suerte, mañana).
(con suerte) EDICIÓN FINAL
Hice RMA de uno de los dos pares de DIMM, el revendedor lo aceptó como dañado y me enviaron un par nuevo, que parece funcionar bien. Así que ahora estoy básicamente en donde pretendía originalmente hace casi un mes (aunque una gran fracción de ese tiempo no se debió realmente al revendedor), con 32 GB de RAM utilizables; free -m
informa 32194 MB de memoria total y el kernel informa 34586624k
RAM en la inicialización, los cuales están en línea con mis expectativas.
Respuesta1
Primero, si su BIOS/UEFI no detecta correctamente su RAM, entonces su sistema operativo no funcionará mejor. No es necesario continuar si su BIOS muestra información incorrecta sobre su configuración.
=> Probablemente tengasal menosun problema de hardware.
EDITAR: Desde tu dmesg | memoria grep, parece que tienesEn realidadun problema de hardware, ubicado en su BIOS integrada. Al menos Linux lo ha detectado y te avisa: WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13295MB of RAM
. También parece que uno de sus 4 módulos de RAM no se reconoce o se inserta incorrectamente.
Puede informarlo a su fabricante, actualizar su BIOS y cambiar su placa base. Hay muchas posibilidades de que con menos RAM no encuentres este error.
Como nota al margen, es posible que esté de acuerdo con esta famosa cita deLinus Torvalds sobre los fabricantes de BIOS:
Los escritores de BIOS son invariablemente monos totalmente incompetentes y adictos al crack.
En segundo lugar, cuando su BIOS esté bien con lo que realmente tiene en su placa base, puede echar un vistazo en Linux a /proc/meminfo
. A menudo queda muy claro lo que su sistema Linux sabe y hace con su memoria. Esto es lo que tengo en mi 64 bits/8 Gb de RAM:
$ cat /proc/meminfo
MemTotal: 8175652 kB
MemFree: 5476336 kB
Buffers: 63924 kB
Cached: 1943460 kB
SwapCached: 0 kB
[...]
Acerca del proceso de arranque y lo que utiliza/libera el kernel de Linux, puede obtenerlo desde dmesg
:
$ dmesg | grep Memory
[ 0.000000] Memory: 8157672k/8904704k available (6138k kernel code, 534168k absent, 212864k reserved, 6896k data, 988k init)
EDITAR: Como dijo Gilles, con dmidecode --type memory
, puede tener detalles sobre la configuración de su hardware. Se ve así para un sistema de 4x2Gb:
$ sudo dmidecode --type memory
# dmidecode 2.9
SMBIOS 2.6 present.
Handle 0x0020, DMI type 16, 15 bytes
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: None
Maximum Capacity: 32 GB
Error Information Handle: Not Provided
Number Of Devices: 4
Handle 0x0022, DMI type 17, 28 bytes
Memory Device
Array Handle: 0x0020
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 2048 MB
[...]
[This block is repeated for each module]
Respuesta2
Busque /var/log/dmesg el mapa de memoria (grep para 'e820') y cuente cuánta memoria se informa allí como utilizable. Esto es lo que el BIOS le dice al sistema operativo cargado para la memoria.
(Esto es correcto solo para el arranque de estilo antiguo. No sé cómo se informa la memoria si se usa el arranque de estilo EFI, pero supongo que hay un informe similar).
Además, informar 16 GB mediante BIOS mientras están instalados 32 GB significa cierta rareza en la configuración de la memoria. Intente reducir la memoria instalada a 4 u 8 GB y compare los efectos.
Respuesta3
Muchas placas AMD más antiguas pueden tener 4 ranuras, pero si llenas la última ranura, estás buscando problemas. Es un problema del chipset que no se puede solucionar.