Supongamos que tenemos un equipo (puede ser un servidor, PC, notebook, netbook, etc.) y queremos agregarle memoria RAM. Como todos sabemos (o no) con arquitecturas de 64 bits se pueden direccionar 16 exabytes, algo así como 16777216 terabytes (264 bytes). Lo que no significa que podamos poner una memoria RAM de 16 exabytes (se me caen las babas...) en nuestro sistema, ya que el arreglo de memoria física tiene un límite. Muchos se sorprenderán al saber que ese límite suele ser bastante bajo para computadoras de escritorio, lo que impide darles un uso serio, por ejemplo para improvisar un servidor. Por ello en este artículo voy a explicar cómo determinar rápidamente, utilizando GNU/Linux, cuál es el límite máximo de memoria RAM se puede instalar en nuestro sistema, sin necesidad de remitirse al manual del equipo o a la hoja de datos del motherboard.
El límite máximo de memoria RAM es un dato que se puede obtener desde la descripción del arreglo de memoria física del sistema. Este tipo de información se encuentra en la tabla DMI (SMBIOS), una estructura de datos que se utiliza para leer información almacenada en la BIOS del sistema.
En GNU/Linux, es posible utilizar la herramienta dmidecode
para obtener información del hardware del sistema, tal como se describe en la BIOS del sistema de acuerdo al estándar SMBIOS/DMI. Entre la información que se puede obtener de esta tabla se incluye el fabricante, modelo, número de serie, versión de BIOS, y una gran cantidad de detalles según cada fabricante. A menudo se incluye el estado de uso de los sockets de CPU, slots de expansión (ISA, AGP, PCI, PCIe) y slots de módulos de memoria, y la lista de puertos de E/S (serie, paralelo, USB).
Cabe destacar que no se puede confiar ciegamente en la información que reporta dmicecode
, ya que no escanea el hardware, sino que reporta los datos de la tabla SMBIOS/DMI, es decir, reporta lo que la BIOS le dice.
man dmidecode
Debido a la gran cantidad de información que posee la tabla DMI, ésta se divide en tipos DMI:
Type Information -------------------------------------------- 0 BIOS 1 System 2 Baseboard 3 Chassis 4 Processor 5 Memory Controller 6 Memory Module 7 Cache 8 Port Connector 9 System Slots 10 On Board Devices 11 OEM Strings 12 System Configuration Options 13 BIOS Language 14 Group Associations 15 System Event Log 16 Physical Memory Array 17 Memory Device 18 32-bit Memory Error 19 Memory Array Mapped Address 20 Memory Device Mapped Address 21 Built-in Pointing Device 22 Portable Battery 23 System Reset 24 Hardware Security 25 System Power Controls 26 Voltage Probe 27 Cooling Device 28 Temperature Probe 29 Electrical Current Probe 30 Out-of-band Remote Access 31 Boot Integrity Services 32 System Boot 33 64-bit Memory Error 34 Management Device 35 Management Device Component 36 Management Device Threshold Data 37 Memory Channel 38 IPMI Device 39 Power Supply 40 Additional Information 41 Onboard Devices Extended Information 42 Management Controller Host Interface
La especificación competa del estándar SMBIOS/DMI se encuentra en el siguiente documento:
System Management BIOS (SMBIOS) Reference Specification
Aunque, dmidecode
admite el uso de keywords para filtrar la información de salida, éstos son: bios, system, baseboard, chassis, chassis, memory, cache, connector, slot.
Por ejemplo, para obtener información de la BIOS ejecutar dmidecode -t bios
:
[root@hal9000 ~]# dmidecode -t bios # dmidecode 2.12 SMBIOS 2.6 present. Handle 0x0000, DMI type 0, 24 bytes BIOS Information Vendor: Intel Corp. Version: BEH6110H.86A.0016.2011.0118.1128 Release Date: 01/18/2011 Address: 0xF0000 Runtime Size: 64 kB ROM Size: 1024 kB Characteristics: PCI is supported BIOS is upgradeable BIOS shadowing is allowed Boot from CD is supported Selectable boot is supported BIOS ROM is socketed EDD is supported 5.25"/1.2 MB floppy services are supported (int 13h) 3.5"/720 kB floppy services are supported (int 13h) 3.5"/2.88 MB floppy services are supported (int 13h) Print screen service is supported (int 5h) 8042 keyboard services are supported (int 9h) Serial services are supported (int 14h) Printer services are supported (int 17h) ACPI is supported USB legacy is supported BIOS boot specification is supported Targeted content distribution is supported Handle 0x0026, DMI type 13, 22 bytes BIOS Language Information Language Description Format: Long Installable Languages: 1 en|US|iso8859-1 Currently Installed Language: en|US|iso8859-1
Entonces, si deseamos saber cuál es el límite máximo de memoria RAM que admite nuestro sistema, debemos obtener la información del arreglo de memoria física, que equivale al tipo DMI 16
(de acuerdo a la tabla de tipos DMI):
[root@hal9000 ~]# dmidecode -t 16 # dmidecode 2.12 SMBIOS 2.6 present. Handle 0x0027, DMI type 16, 15 bytes Physical Memory Array Location: System Board Or Motherboard Use: System Memory Error Correction Type: None Maximum Capacity: 8 GB Error Information Handle: No Error Number Of Devices: 2
Se observa que este motherboard en particular (Intel DH61BE de acuerdo a lo que reporta el comando dmidecode -t baseboard
) soporta apenas unos miserables 8GB de memoria RAM como máximo. Esto es 8GB de memoria RAM en total, no por cada módulo. Revisar la sección "7.17 Physical Memory Array (Type 16)" en la página 84 de la epecificación del estándar SMBIOS.
Lo curioso es que en la hoja de datos del motherboard DH61BE, Intel dice que este modelo soporta hasta 16 GB de memoria RAM. Entonces: o tengo una versión vieja del modelo DH61BE; o Intel miente.
Para obtener información detallada acerca de la memoria RAM de nuestro sistema, es posible ejecutar el comando dmidecode -t memory
:
[root@hal9000 ~]# dmidecode -t memory # dmidecode 2.12 SMBIOS 2.6 present. Handle 0x0027, DMI type 16, 15 bytes Physical Memory Array Location: System Board Or Motherboard Use: System Memory Error Correction Type: None Maximum Capacity: 8 GB Error Information Handle: No Error Number Of Devices: 2 Handle 0x002A, DMI type 17, 28 bytes Memory Device Array Handle: 0x0027 Error Information Handle: No Error Total Width: 64 bits Data Width: 64 bits Size: 4096 MB Form Factor: DIMM Set: None Locator: DIMM1 Bank Locator: Channel A DIMM 0 Type: DDR3 Type Detail: Synchronous Speed: 1333 MHz Manufacturer: Kingston Serial Number: 93073B4C Asset Tag: A1_AssetTagNum0 Part Number: 99U5471-012.A00LF Rank: 2 Handle 0x002D, DMI type 17, 28 bytes Memory Device Array Handle: 0x0027 Error Information Handle: No Error Total Width: 64 bits Data Width: 64 bits Size: No Module Installed Form Factor: DIMM Set: None Locator: DIMM2 Bank Locator: Channel B DIMM 0 Type: Unknown Type Detail: Synchronous Speed: Unknown Manufacturer: A1_Manufacturer1 Serial Number: A1_SerNum1 Asset Tag: A1_AssetTagNum1 Part Number: Array1_PartNumber1 Rank: Unknown
Este comando, además de la información general relativa al arreglo de memoria física, muestra información detallada de cada módulo instalado. De esta forma es posible obtener las especificaciones de los módulos de memoria instalados en el sistema.
De la salida anterior, se observa que en el primer slot de memoria (Memory Device según dmidecode
) se encuentra instalado un módulo Kingston DDR3 de 4GB, mientras que en el segundo slot no hay ningún módulo instalado (No Module Installed).
Junto con el paquete dmidecode
vienen otras herramientas adicionales como biosdecode
(muestra toda la información relativa a la BIOS que encuentra), ownership
(obtiene el "ownership tag" en sistemas Compaq) y vpddecode
(imprime la información VPD, "vital product data", que poseen casi todos los sistemas IBM y Lenovo).
¡Espero que les sirva!
Tal vez pueda interesarte