¿Cuánta memoria tiene mi máquina? (GNU/Linux)

memoryEn algunas ocasiones necesitamos saber qué memoria tiene nuestra máquina o servidor y a qué frecuencia está funcionando. Aunque influyen otros factores, estos son parámetros que necesitaremos conocer en el caso de, por ejemplo, querer ampliar la cantidad de memoria con la que contamos.

En Linux, existen varios comandos que pueden resultarnos especialmente útiles en casos como este:

Comando free

Este sencillo comando nos permitirá de forma rápida ver cuánta memoria tenemos, y cuánta hay ocupada actualmente.  Por ejemplo, en una máquina con 12 GB de RAM tendríamos la siguiente salida:

[root@machine ~]# free
             total       used       free     shared    buffers     cached
Mem:      12186680    2377520    9809160          0     427888     796572
-/+ buffers/cache:    1153060   11033620
Swap:      2097144      48500    2048644

Pero a simple vista la información es algo confusa, y esto es debido a que la salida por defecto de este comando se muestra en Kilobytes, siendo una salida idéntica a si ejecutásemos el comando con la opción «-k».

Este comando, soporta diferentes parámetros de visualización que hacen la salida más intuitiva. Entre ellas están «-m» (Megabytes) y «-g» Gigabytes). Ejemplo:

[root@machine ~]# free -m
             total       used       free     shared    buffers     cached
Mem:         11901       2324       9576          0        418        777
-/+ buffers/cache:       1128      10772
Swap:         2047         47       2000
[root@bc01 ~]# free -g
             total       used       free     shared    buffers     cached
Mem:            11          2          9          0          0          0
-/+ buffers/cache:          1         10
Swap:            1          0          1

 

Bonus: Y si lo lanzamos en una máquina con 1 Terabyte de RAM…

[root@supernode ~]# free -g
             total       used       free     shared    buffers     cached
Mem:          1009         10        999          0          0          3
-/+ buffers/cache:          6       1003
Swap:            1          0          1

Comando vmstat

Este comando es parecido a free, pero su uso está más orientado a la estadística de uso de memoria, tanto física como virtual. Si lo usamos sin ningún parámetro muestra lo siguiente:

[root@supernode ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
324  0      0 443964416 221640 37652276    0    0     0     0    0    0  1  0 99  0  0

Donde podemos ver por columnas ciertos valores como memoria libre, memoria swap, procesos en ejecución, etc. Esta opción a simple vista puede ser algo confusa y poco más útil que la salida del comando free, por lo que el uso clásico que se le da a herramienta suele ser con la opción  «-s», la cual nos muestra las estadísticas detalladas de uso de la memoria (de todos los tipos de memoria del sistema de hecho):

[root@supernode ~]# vmstat -s
   1058702208  total memory
    624236416  used memory
    591003456  active memory
     14968620  inactive memory
    434465824  free memory
       221644  buffer memory
     37652288  swap cache
      2097144  total swap
            0  used swap
      2097144  free swap
    712171256 non-nice user cpu ticks
        10079 nice user cpu ticks
     47309179 system cpu ticks
  50637698892 idle cpu ticks
       219249 IO-wait cpu ticks
          287 IRQ cpu ticks
       938991 softirq cpu ticks
            0 stolen cpu ticks
      1487239 pages paged in
     42845506 pages paged out
            0 pages swapped in
            0 pages swapped out
   3201988556 interrupts
    631003769 CPU context switches
   1406018774 boot time
     20166216 forks

Además, para facilitar la lectura podemos añadirle también el parámetro «-S M» para que nos muestre la información en Megabytes:

[root@bc25 ~]# vmstat -s -S M
      1033888 M total memory
       609938 M used memory
       577479 M active memory
        14617 M inactive memory
       423950 M free memory
          216 M buffer memory
        36769 M swap cache
         2047 M total swap
            0 M used swap
         2047 M free swap
    712172203 non-nice user cpu ticks
        10079 nice user cpu ticks
     47309222 system cpu ticks
  50637729405 idle cpu ticks
       219249 IO-wait cpu ticks
          287 IRQ cpu ticks
       938991 softirq cpu ticks
            0 stolen cpu ticks
      1487239 pages paged in
     42845510 pages paged out
            0 pages swapped in
            0 pages swapped out
   3202002044 interrupts
    631008244 CPU context switches
   1406018774 boot time
     20166219 forks

 

Comando lshw

El comando lshw es algo más avanzado y su funcionamiento es similar al clásico «ls» para listar el contenido de una carpeta, pero enfocado al hardware presente en la máquina. La mayoría de las distribuciones no lo incluyen por defecto. Por tanto sería necesario instalarlo previamente. Para ello:

En caso de que nuestra máquina sea Ubuntu/Debian

[root@debian ~]# apt-get update && apt-get install lshw

Y en caso de ser CentOS/RedHat

[root@centos ~]# yum clean expire-cache && yum install lshw

Una vez instalado este sencillo pero completo comando, podemos utilizarlo para encontrar información muy útil.

Si ejecutamos un simple «lshw» encontraremos una salida completa, con mucha información detallada sobre todo el hardware de la máquina. Pero centrándonos en el tema de artículo, si quisiésemos conocer, por ejemplo, cuántos módulos de memoria tenemos actualmente y su frecuencia, bastaría con hacer lo siguiente (tened en cuenta que puede tardar unos segundos en recopilar la información):

[root@machine ~]# lshw -short -C memory
H/W path        Device      Class          Description
======================================================
/0/0                        memory         64KiB BIOS
/0/4/5                      memory         128KiB L1 cache
/0/4/6                      memory         1MiB L2 cache
/0/4/7                      memory         6MiB L3 cache
/0/1b                       memory         4GiB System Memory
/0/1b/0                     memory         DIMM Synchronous [empty]
/0/1b/1                     memory         4GiB DIMM DDR3 Synchronous 1333 MHz (0.8 ns)
/0/1b/2                     memory         DIMM Synchronous [empty]
/0/1b/3                     memory         DIMM Synchronous [empty]

En la salida del comando, podemos ver en las líneas resaltadas que contamos con 4 slots en los que podemos meter módulos de memoria, de los cuales 3 están vacíos (etiquetados como «[empty]«) y contamos con un módulo de 4 GigaBytes DDR3 a 1333 MHz.

Bonus: Y si lo lanzamos en una máquina con 1 Terabyte de RAM…

[root@supernode ~]# lshw -short -C memory
H/W path            Device      Class      Description
======================================================
/0/d                            memory     128KiB BIOS
/0/0                            memory     1TiB System Memory
/0/0/0                          memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/1                          memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/2                          memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/3                          memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/4                          memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/5                          memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/6                          memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/7                          memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/8                          memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/9                          memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/a                          memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/b                          memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/c                          memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/d                          memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/e                          memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/f                          memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/10                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/11                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/12                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/13                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/14                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/15                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/16                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/17                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/18                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/19                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/1a                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/1b                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/1c                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/1d                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/1e                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/1f                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/20                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/21                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/22                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/23                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/24                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/25                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/26                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/27                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/28                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/29                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/2a                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/2b                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/2c                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/2d                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/2e                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/2f                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/30                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/31                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/32                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/33                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/34                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/35                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/36                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/37                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/38                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/39                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/3a                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/3b                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/3c                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/3d                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/3e                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/0/3f                         memory     16GiB DIMM Synchronous 1067 MHz (0.9 ns)
/0/96/97                        memory     18MiB L3 cache
/0/96/99                        memory     256KiB L2 cache
/0/96/9a                        memory     32KiB L1 cache
/0/98                           memory     32KiB L1 cache
/0/9b/9c                        memory     18MiB L3 cache
/0/9b/9e                        memory     256KiB L2 cache
/0/9b/9f                        memory     32KiB L1 cache
/0/9d                           memory     32KiB L1 cache
/0/a0/a1                        memory     18MiB L3 cache
/0/a0/a3                        memory     256KiB L2 cache
/0/a0/a4                        memory     32KiB L1 cache
/0/a2                           memory     32KiB L1 cache
/0/a5/a6                        memory     18MiB L3 cache
/0/a5/a8                        memory     256KiB L2 cache
/0/a5/a9                        memory     32KiB L1 cache
/0/a7                           memory     32KiB L1 cache
/0/aa/ab                        memory     18MiB L3 cache
/0/aa/ad                        memory     256KiB L2 cache
/0/aa/ae                        memory     32KiB L1 cache
/0/ac                           memory     32KiB L1 cache
/0/af/b0                        memory     18MiB L3 cache
/0/af/b2                        memory     256KiB L2 cache
/0/af/b3                        memory     32KiB L1 cache
/0/b1                           memory     32KiB L1 cache
/0/b4/b5                        memory     18MiB L3 cache
/0/b4/b7                        memory     256KiB L2 cache
/0/b4/b8                        memory     32KiB L1 cache
/0/b6                           memory     32KiB L1 cache
/0/b9/ba                        memory     18MiB L3 cache
/0/b9/bc                        memory     256KiB L2 cache
/0/b9/bd                        memory     32KiB L1 cache
/0/bb                           memory     32KiB L1 cache

Comando dmidecode

Este comando es algo especial, ya que obtiene la información directamente del DMI (Direct Media Interface), que no es más que un enlace entre el dos puntos clave en una placa base: el northbridge (elemento de enlace entre CPU, RAM y PCI-Express) y el southbridge (enlace entre BIOS, PCI y dispositivos de entrada/salida).

Como a dmidecode podríamos dedicar una entrada completa del blog, vamos a limitarnos a cómo obtener información de la memoria. Este comando  si lo ejecutamos tal cual, muestra toda la información por pantalla, pero si queremos ser específicos podemos solicitarlo:

[root@machine ~]# dmidecode -t memory

De esta forma obtendríamos una salida detallada con la información que dmidecode es capaz de obtener de nuestra memoria, indicando información curiosa como la ubicación de cada módulo, fabricante, tipo de memoria, velocidad, número de serie, capacidad máxima del sistema, etc. Por ejemplo, en la máquina con 12 GB de RAM de antes:

[root@machine ~]# dmidecode -t memory
# dmidecode 2.11
SMBIOS 2.6 present.

Handle 0x002E, DMI type 16, 15 bytes
Physical Memory Array
        Location: System Board Or Motherboard
        Use: System Memory
        Error Correction Type: Multi-bit ECC
        Maximum Capacity: 96 GB
        Error Information Handle: Not Provided
        Number Of Devices: 9

Handle 0x0030, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x002E
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: 2048 MB
        Form Factor: DIMM
        Set: None
        Locator: P1_DIMM1A
        Bank Locator: P1_BANK1
        Type: Other
        Type Detail: Other
        Speed: 1066 MHz
        Manufacturer: Hyundai
        Serial Number: 123456789
        Asset Tag: AssetTagNum0
        Part Number: CETACIEMAT-123
        Rank: Unknown

Handle 0x0032, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x002E
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: P1_DIMM1B
        Bank Locator: P1_BANK1
        Type: Other
        Type Detail: Other
        Speed: Unknown
        Manufacturer: Manufacturer01
        Serial Number: SerNum01
        Asset Tag: AssetTagNum1
        Part Number: ModulePartNumber01
        Rank: Unknown

Handle 0x0034, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x002E
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: P1_DIMM1C
        Bank Locator: P1_BANK1
        Type: Other
        Type Detail: Other
        Speed: Unknown
        Manufacturer: Manufacturer02
        Serial Number: SerNum02
        Asset Tag: AssetTagNum2
        Part Number: ModulePartNumber02
        Rank: Unknown

Handle 0x0036, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x002E
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: 2048 MB
        Form Factor: DIMM
        Set: None
        Locator: P1_DIMM2A
        Bank Locator: P1_BANK2
        Type: Other
        Type Detail: Other
        Speed: 1066 MHz
        Manufacturer: Hyundai
        Serial Number: 123456789
        Asset Tag: AssetTagNum0
        Part Number: CETACIEMAT-123
        Rank: Unknown

Handle 0x0038, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x002E
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: P1_DIMM2B
        Bank Locator: P1_BANK2
        Type: Other
        Type Detail: Other
        Speed: Unknown
        Manufacturer: Manufacturer04
        Serial Number: SerNum04
        Asset Tag: AssetTagNum4
        Part Number: ModulePartNumber04
        Rank: Unknown

Handle 0x003A, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x002E
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: P1_DIMM2C
        Bank Locator: P1_BANK2
        Type: Other
        Type Detail: Other
        Speed: Unknown
        Manufacturer: Manufacturer05
        Serial Number: SerNum05
        Asset Tag: AssetTagNum5
        Part Number: ModulePartNumber05
        Rank: Unknown

Handle 0x003C, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x002E
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: 2048 MB
        Form Factor: DIMM
        Set: None
        Locator: P1_DIMM3A
        Bank Locator: P1_BANK3
        Type: Other
        Type Detail: Other
        Speed: 1066 MHz
        Manufacturer: Hyundai
        Serial Number: 123456789
        Asset Tag: AssetTagNum0
        Part Number: CETACIEMAT-123
        Rank: Unknown

Handle 0x003E, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x002E
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: P1_DIMM3B
        Bank Locator: P1_BANK3
        Type: Other
        Type Detail: Other
        Speed: Unknown
        Manufacturer: Manufacturer07
        Serial Number: SerNum07
        Asset Tag: AssetTagNum7
        Part Number: ModulePartNumber07
        Rank: Unknown

Handle 0x0040, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x002E
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: P1_DIMM3C
        Bank Locator: P1_BANK3
        Type: Other
        Type Detail: Other
        Speed: Unknown
        Manufacturer: Manufacturer08
        Serial Number: SerNum08
        Asset Tag: AssetTagNum8
        Part Number: ModulePartNumber08
        Rank: Unknown

Handle 0x0042, DMI type 16, 15 bytes
Physical Memory Array
        Location: System Board Or Motherboard
        Use: System Memory
        Error Correction Type: Multi-bit ECC
        Maximum Capacity: 96 GB
        Error Information Handle: Not Provided
        Number Of Devices: 9

Handle 0x0044, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x0042
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: 2048 MB
        Form Factor: DIMM
        Set: None
        Locator: P2_DIMM1A
        Bank Locator: P2_BANK1
        Type: Other
        Type Detail: Other
        Speed: 1066 MHz
        Manufacturer: Hyundai
        Serial Number: 123456789
        Asset Tag: AssetTagNum0
        Part Number: CETACIEMAT-123
        Rank: Unknown

Handle 0x0046, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x0042
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: P2_DIMM1B
        Bank Locator: P2_BANK1
        Type: Other
        Type Detail: Other
        Speed: Unknown
        Manufacturer: Manufacturer10
        Serial Number: SerNum10
        Asset Tag: AssetTagNum10
        Part Number: ModulePartNumber10
        Rank: Unknown

Handle 0x0048, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x0042
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: P2_DIMM1C
        Bank Locator: P2_BANK1
        Type: Other
        Type Detail: Other
        Speed: Unknown
        Manufacturer: Manufacturer11
        Serial Number: SerNum11
        Asset Tag: AssetTagNum11
        Part Number: ModulePartNumber11
        Rank: Unknown

Handle 0x004A, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x0042
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: 2048 MB
        Form Factor: DIMM
        Set: None
        Locator: P2_DIMM2A
        Bank Locator: P2_BANK2
        Type: Other
        Type Detail: Other
        Speed: 1066 MHz
        Manufacturer: Hyundai
        Serial Number: 123456789
        Asset Tag: AssetTagNum0
        Part Number: CETACIEMAT-123
        Rank: Unknown

Handle 0x004C, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x0042
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: P2_DIMM2B
        Bank Locator: P2_BANK2
        Type: Other
        Type Detail: Other
        Speed: Unknown
        Manufacturer: Manufacturer13
        Serial Number: SerNum13
        Asset Tag: AssetTagNum13
        Part Number: ModulePartNumber13
        Rank: Unknown

Handle 0x004E, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x0042
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: P2_DIMM2C
        Bank Locator: P2_BANK2
        Type: Other
        Type Detail: Other
        Speed: Unknown
        Manufacturer: Manufacturer14
        Serial Number: SerNum14
        Asset Tag: AssetTagNum14
        Part Number: ModulePartNumber14
        Rank: Unknown

Handle 0x0050, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x0042
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: 2048 MB
        Form Factor: DIMM
        Set: None
        Locator: P2_DIMM3A
        Bank Locator: P2_BANK3
        Type: Other
        Type Detail: Other
        Speed: 1066 MHz
        Manufacturer: Hyundai
        Serial Number: 123456789
        Asset Tag: AssetTagNum0
        Part Number: CETACIEMAT-123
        Rank: Unknown

Handle 0x0052, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x0042
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: P2_DIMM3B
        Bank Locator: P2_BANK3
        Type: Other
        Type Detail: Other
        Speed: Unknown
        Manufacturer: Manufacturer16
        Serial Number: SerNum16
        Asset Tag: AssetTagNum16
        Part Number: ModulePartNumber16
        Rank: Unknown

Handle 0x0054, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x0042
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: P2_DIMM3C
        Bank Locator: P2_BANK3
        Type: Other
        Type Detail: Other
        Speed: Unknown
        Manufacturer: Manufacturer17
        Serial Number: SerNum17
        Asset Tag: AssetTagNum17
        Part Number: ModulePartNumber17
        Rank: Unknown

Handle 0x0056, DMI type 16, 15 bytes
Physical Memory Array
        Location: System Board Or Motherboard
        Use: Flash Memory
        Error Correction Type: None
        Maximum Capacity: 4 MB
        Error Information Handle: Not Provided
        Number Of Devices: 1

Handle 0x0058, DMI type 17, 28 bytes
Memory Device
        Array Handle: 0x0056
        Error Information Handle: Not Provided
        Total Width: 8 bits
        Data Width: 8 bits
        Size: 4096 kB
        Form Factor: Other
        Set: None
        Locator: BIOS
        Bank Locator: ROM0
        Type: Flash
        Type Detail: Non-Volatile
        Speed: 33 MHz
        Manufacturer: ATMEL
        Serial Number: 123456789
        Asset Tag: AssetTagNum0
        Part Number: CETACIEMAT-123
        Rank: Unknown

 

Herramienta hwloc

Y dejamos para el final toda una joya: hwloc. Este conjunto de herramientas soporta infinidad de posibilidades para conocer el hardware de una máquina, hasta el punto de ser capaz de mostrar la topología hardware de la máquina. Una vez que se instala esta herramienta, tendremos acceso a una serie de comandos muy útiles en el sistema, como puede ser lstopo. Ejecutándolo «a secas», la salida directa de este comando es la siguiente (para la máquina de 1 TB de RAM):

[root@supernode ~]# lstopo --whole-system
Machine (1024GB total)
  Group0 L#0
    NUMANode L#0 (P#0 128GB) + Socket L#0 + L3 L#0 (18MB)
      L2 L#0 (256KB) + L1d L#0 (32KB) + L1i L#0 (32KB) + Core L#0 + PU L#0 (P#0)
      L2 L#1 (256KB) + L1d L#1 (32KB) + L1i L#1 (32KB) + Core L#1 + PU L#1 (P#8)
      L2 L#2 (256KB) + L1d L#2 (32KB) + L1i L#2 (32KB) + Core L#2 + PU L#2 (P#16)
      L2 L#3 (256KB) + L1d L#3 (32KB) + L1i L#3 (32KB) + Core L#3 + PU L#3 (P#24)
      L2 L#4 (256KB) + L1d L#4 (32KB) + L1i L#4 (32KB) + Core L#4 + PU L#4 (P#32)
      L2 L#5 (256KB) + L1d L#5 (32KB) + L1i L#5 (32KB) + Core L#5 + PU L#5 (P#40)
      L2 L#6 (256KB) + L1d L#6 (32KB) + L1i L#6 (32KB) + Core L#6 + PU L#6 (P#48)
      L2 L#7 (256KB) + L1d L#7 (32KB) + L1i L#7 (32KB) + Core L#7 + PU L#7 (P#56)
    NUMANode L#1 (P#1 128GB) + Socket L#1 + L3 L#1 (18MB)
      L2 L#8 (256KB) + L1d L#8 (32KB) + L1i L#8 (32KB) + Core L#8 + PU L#8 (P#1)
      L2 L#9 (256KB) + L1d L#9 (32KB) + L1i L#9 (32KB) + Core L#9 + PU L#9 (P#9)
      L2 L#10 (256KB) + L1d L#10 (32KB) + L1i L#10 (32KB) + Core L#10 + PU L#10 (P#17)
      L2 L#11 (256KB) + L1d L#11 (32KB) + L1i L#11 (32KB) + Core L#11 + PU L#11 (P#25)
      L2 L#12 (256KB) + L1d L#12 (32KB) + L1i L#12 (32KB) + Core L#12 + PU L#12 (P#33)
      L2 L#13 (256KB) + L1d L#13 (32KB) + L1i L#13 (32KB) + Core L#13 + PU L#13 (P#41)
      L2 L#14 (256KB) + L1d L#14 (32KB) + L1i L#14 (32KB) + Core L#14 + PU L#14 (P#49)
      L2 L#15 (256KB) + L1d L#15 (32KB) + L1i L#15 (32KB) + Core L#15 + PU L#15 (P#57)
    NUMANode L#2 (P#2 128GB) + Socket L#2 + L3 L#2 (18MB)
      L2 L#16 (256KB) + L1d L#16 (32KB) + L1i L#16 (32KB) + Core L#16 + PU L#16 (P#2)
      L2 L#17 (256KB) + L1d L#17 (32KB) + L1i L#17 (32KB) + Core L#17 + PU L#17 (P#10)
      L2 L#18 (256KB) + L1d L#18 (32KB) + L1i L#18 (32KB) + Core L#18 + PU L#18 (P#18)
      L2 L#19 (256KB) + L1d L#19 (32KB) + L1i L#19 (32KB) + Core L#19 + PU L#19 (P#26)
      L2 L#20 (256KB) + L1d L#20 (32KB) + L1i L#20 (32KB) + Core L#20 + PU L#20 (P#34)
      L2 L#21 (256KB) + L1d L#21 (32KB) + L1i L#21 (32KB) + Core L#21 + PU L#21 (P#42)
      L2 L#22 (256KB) + L1d L#22 (32KB) + L1i L#22 (32KB) + Core L#22 + PU L#22 (P#50)
      L2 L#23 (256KB) + L1d L#23 (32KB) + L1i L#23 (32KB) + Core L#23 + PU L#23 (P#58)
    NUMANode L#3 (P#3 128GB) + Socket L#3 + L3 L#3 (18MB)
      L2 L#24 (256KB) + L1d L#24 (32KB) + L1i L#24 (32KB) + Core L#24 + PU L#24 (P#3)
      L2 L#25 (256KB) + L1d L#25 (32KB) + L1i L#25 (32KB) + Core L#25 + PU L#25 (P#11)
      L2 L#26 (256KB) + L1d L#26 (32KB) + L1i L#26 (32KB) + Core L#26 + PU L#26 (P#19)
      L2 L#27 (256KB) + L1d L#27 (32KB) + L1i L#27 (32KB) + Core L#27 + PU L#27 (P#27)
      L2 L#28 (256KB) + L1d L#28 (32KB) + L1i L#28 (32KB) + Core L#28 + PU L#28 (P#35)
      L2 L#29 (256KB) + L1d L#29 (32KB) + L1i L#29 (32KB) + Core L#29 + PU L#29 (P#43)
      L2 L#30 (256KB) + L1d L#30 (32KB) + L1i L#30 (32KB) + Core L#30 + PU L#30 (P#51)
      L2 L#31 (256KB) + L1d L#31 (32KB) + L1i L#31 (32KB) + Core L#31 + PU L#31 (P#59)
  Group0 L#1
    NUMANode L#4 (P#4 128GB) + Socket L#4 + L3 L#4 (18MB)
      L2 L#32 (256KB) + L1d L#32 (32KB) + L1i L#32 (32KB) + Core L#32 + PU L#32 (P#4)
      L2 L#33 (256KB) + L1d L#33 (32KB) + L1i L#33 (32KB) + Core L#33 + PU L#33 (P#12)
      L2 L#34 (256KB) + L1d L#34 (32KB) + L1i L#34 (32KB) + Core L#34 + PU L#34 (P#20)
      L2 L#35 (256KB) + L1d L#35 (32KB) + L1i L#35 (32KB) + Core L#35 + PU L#35 (P#28)
      L2 L#36 (256KB) + L1d L#36 (32KB) + L1i L#36 (32KB) + Core L#36 + PU L#36 (P#36)
      L2 L#37 (256KB) + L1d L#37 (32KB) + L1i L#37 (32KB) + Core L#37 + PU L#37 (P#44)
      L2 L#38 (256KB) + L1d L#38 (32KB) + L1i L#38 (32KB) + Core L#38 + PU L#38 (P#52)
      L2 L#39 (256KB) + L1d L#39 (32KB) + L1i L#39 (32KB) + Core L#39 + PU L#39 (P#60)
    NUMANode L#5 (P#5 128GB) + Socket L#5 + L3 L#5 (18MB)
      L2 L#40 (256KB) + L1d L#40 (32KB) + L1i L#40 (32KB) + Core L#40 + PU L#40 (P#5)
      L2 L#41 (256KB) + L1d L#41 (32KB) + L1i L#41 (32KB) + Core L#41 + PU L#41 (P#13)
      L2 L#42 (256KB) + L1d L#42 (32KB) + L1i L#42 (32KB) + Core L#42 + PU L#42 (P#21)
      L2 L#43 (256KB) + L1d L#43 (32KB) + L1i L#43 (32KB) + Core L#43 + PU L#43 (P#29)
      L2 L#44 (256KB) + L1d L#44 (32KB) + L1i L#44 (32KB) + Core L#44 + PU L#44 (P#37)
      L2 L#45 (256KB) + L1d L#45 (32KB) + L1i L#45 (32KB) + Core L#45 + PU L#45 (P#45)
      L2 L#46 (256KB) + L1d L#46 (32KB) + L1i L#46 (32KB) + Core L#46 + PU L#46 (P#53)
      L2 L#47 (256KB) + L1d L#47 (32KB) + L1i L#47 (32KB) + Core L#47 + PU L#47 (P#61)
    NUMANode L#6 (P#6 128GB) + Socket L#6 + L3 L#6 (18MB)
      L2 L#48 (256KB) + L1d L#48 (32KB) + L1i L#48 (32KB) + Core L#48 + PU L#48 (P#6)
      L2 L#49 (256KB) + L1d L#49 (32KB) + L1i L#49 (32KB) + Core L#49 + PU L#49 (P#14)
      L2 L#50 (256KB) + L1d L#50 (32KB) + L1i L#50 (32KB) + Core L#50 + PU L#50 (P#22)
      L2 L#51 (256KB) + L1d L#51 (32KB) + L1i L#51 (32KB) + Core L#51 + PU L#51 (P#30)
      L2 L#52 (256KB) + L1d L#52 (32KB) + L1i L#52 (32KB) + Core L#52 + PU L#52 (P#38)
      L2 L#53 (256KB) + L1d L#53 (32KB) + L1i L#53 (32KB) + Core L#53 + PU L#53 (P#46)
      L2 L#54 (256KB) + L1d L#54 (32KB) + L1i L#54 (32KB) + Core L#54 + PU L#54 (P#54)
      L2 L#55 (256KB) + L1d L#55 (32KB) + L1i L#55 (32KB) + Core L#55 + PU L#55 (P#62)
    NUMANode L#7 (P#7 128GB) + Socket L#7 + L3 L#7 (18MB)
      L2 L#56 (256KB) + L1d L#56 (32KB) + L1i L#56 (32KB) + Core L#56 + PU L#56 (P#7)
      L2 L#57 (256KB) + L1d L#57 (32KB) + L1i L#57 (32KB) + Core L#57 + PU L#57 (P#15)
      L2 L#58 (256KB) + L1d L#58 (32KB) + L1i L#58 (32KB) + Core L#58 + PU L#58 (P#23)
      L2 L#59 (256KB) + L1d L#59 (32KB) + L1i L#59 (32KB) + Core L#59 + PU L#59 (P#31)
      L2 L#60 (256KB) + L1d L#60 (32KB) + L1i L#60 (32KB) + Core L#60 + PU L#60 (P#39)
      L2 L#61 (256KB) + L1d L#61 (32KB) + L1i L#61 (32KB) + Core L#61 + PU L#61 (P#47)
      L2 L#62 (256KB) + L1d L#62 (32KB) + L1i L#62 (32KB) + Core L#62 + PU L#62 (P#55)
      L2 L#63 (256KB) + L1d L#63 (32KB) + L1i L#63 (32KB) + Core L#63 + PU L#63 (P#63)
  HostBridge L#0
    PCIBridge
      PCI 8086:10c9
        Net L#0 "eth0"
      PCI 8086:10c9
        Net L#1 "eth1"
    PCIBridge
      PCI 1000:0079
        Block L#2 "sda"
    PCIBridge
      PCI 102b:0532
    PCI 8086:3a22
      Block L#3 "sr0"
  HostBridge L#4
    PCIBridge
      PCI 8086:10c9
        Net L#4 "eth2"
      PCI 8086:10c9
        Net L#5 "eth3"
  HostBridge L#6
    PCIBridge
      PCI 1000:0079
        Block L#6 "sdb"
    PCIBridge
      PCI 15b3:673c
        Net L#7 "ib0"
        OpenFabrics L#8 "mlx4_0"

Pero lo mejor es que… ¡podemos mostrar de forma gráfica esta información! De forma resumida (ya que al igual que con dmidecode podríamos dedicar otro post íntegro a hwloc) podríamos  simplemente hacerlo de la siguiente forma:

[root@supernode ~]# lstopo supernode.pdf

Obteniendo la siguiente maravilla:

supernode hwloc

Podríamos simplemente indicar otra extensión entre las soportadas (FIG, PDF, PNG, XML, SVG, PS y TXT) y lo tendríamos en ese formato. Rápido, fácil y útil, ¿verdad? 😉

 

Otros comandos clásicos: top y htop

Por último, existen otros comandos más ampliamente conocidos y que no podemos olvidar, como son top y htop, que también nos darán de una forma más interactiva bastantes más datos.

top es una versión interactiva del comando ps (ya dedicaremos algún artículo a gestión de procesos más adelante :)). Mostrará una lista de tareas interactiva, con alguna información genérica de la máquina. Por ejemplo, esta sería la salida del comando top de la máquina de cómputo con 1 TB de RAM, en uso por parte de dos usuarios:

Tasks: 1900 total, 328 running, 1539 sleeping,   0 stopped,  33 zombie
Cpu(s):  2.8%us,  0.4%sy,  0.0%ni, 96.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  1058702220k total, 495625064k used, 563077156k free,   359324k buffers
Swap:  2097144k total,        0k used,  2097144k free, 104963792k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
57001 cetauser1  20   0  300g 299g 2108 R 99.8 29.7 364:58.81 perl
  865 root      39  19     0    0    0 S  2.9  0.0   1822:24 kipmi0
 5689 root      20   0 14504 2620  880 R  2.3  0.0   0:00.33 top
 4089 cetauser2   20   0  391m 191m 1724 R  0.6  0.0   0:01.08 R
 4616 cetauser2   20   0  402m 201m 1656 R  0.6  0.0   0:00.77 R
 4641 cetauser2   20   0  391m 191m 1724 R  0.6  0.0   0:00.72 R
 4645 cetauser2   20   0  422m 221m 1652 R  0.6  0.0   0:00.70 R
 5120 cetauser2   20   0  387m 187m 1724 R  0.6  0.0   0:00.50 R
 5210 cetauser2   20   0  401m 200m 1724 R  0.6  0.0   0:00.47 R
 5267 cetauser2   20   0  387m 187m 1724 R  0.6  0.0   0:00.44 R
 5290 cetauser2   20   0  387m 187m 1724 R  0.6  0.0   0:00.43 R
 5300 cetauser2   20   0  397m 196m 1620 R  0.6  0.0   0:00.37 R
 5332 cetauser2   20   0  393m 192m 1528 R  0.6  0.0   0:00.32 R
 5480 cetauser2   20   0  393m 192m 1592 R  0.6  0.0   0:00.22 R
 5498 cetauser2   20   0  396m 195m 1592 R  0.6  0.0   0:00.17 R
 5504 cetauser2   20   0  419m 218m 1528 R  0.6  0.0   0:00.15 R
 5507 cetauser2   20   0  419m 218m 1528 R  0.6  0.0   0:00.14 R
 5590 cetauser2   20   0  419m 218m 1528 R  0.6  0.0   0:00.12 R
 5591 cetauser2   20   0  393m 192m 1580 R  0.6  0.0   0:00.12 R
 5601 cetauser2   20   0  419m 218m 1528 R  0.6  0.0   0:00.12 R
 5642 cetauser2   20   0  396m 195m 1512 R  0.6  0.0   0:00.10 R
 5684 cetauser2   20   0  396m 195m 1324 R  0.6  0.0   0:00.03 R
 5686 cetauser2   20   0  396m 195m 1300 R  0.6  0.0   0:00.02 R
 5688 cetauser2   20   0  419m 218m 1260 R  0.6  0.0   0:00.02 R
51662 cetauser2   20   0  391m 192m 3000 R  0.6  0.0   5:19.37 R
 3838 cetauser2   20   0  418m 218m 1832 R  0.3  0.0   0:01.20 R
 3851 cetauser2   20   0  418m 218m 1836 R  0.3  0.0   0:01.19 R
 3854 cetauser2   20   0  397m 196m 1844 R  0.3  0.0   0:01.18 R
 3858 cetauser2   20   0  418m 218m 1836 R  0.3  0.0   0:01.18 R
 3861 cetauser2   20   0  418m 218m 1836 R  0.3  0.0   0:01.17 R
 3871 cetauser2   20   0     0    0    0 R  0.3  0.0   0:01.17 R
 3879 cetauser2   20   0  418m 218m 1832 R  0.3  0.0   0:01.16 R
 3890 cetauser2   20   0     0    0    0 R  0.3  0.0   0:01.14 R
 3901 cetauser2   20   0  391m 191m 1728 R  0.3  0.0   0:01.13 R
 3906 cetauser2   20   0     0    0    0 R  0.3  0.0   0:01.12 R
 3907 cetauser2   20   0  392m 191m 1732 R  0.3  0.0   0:01.12 R
 3992 cetauser2   20   0  391m 191m 1748 R  0.3  0.0   0:01.12 R
 3993 cetauser2   20   0  392m 191m 1732 R  0.3  0.0   0:01.12 R
 3997 cetauser2   20   0  391m 191m 1728 R  0.3  0.0   0:01.11 R
 3998 cetauser2   20   0  418m 218m 1732 R  0.3  0.0   0:01.12 R
 4000 cetauser2   20   0     0    0    0 R  0.3  0.0   0:01.11 R
 4004 cetauser2   20   0  391m 191m 1728 R  0.3  0.0   0:01.11 R
 4066 cetauser2   20   0  392m 191m 1728 R  0.3  0.0   0:01.10 R
 4069 cetauser2   20   0  391m 191m 1724 R  0.3  0.0   0:01.10 R
 4070 cetauser2   20   0  418m 218m 1732 R  0.3  0.0   0:01.10 R
 4072 cetauser2   20   0  391m 191m 1724 R  0.3  0.0   0:01.09 R
 4088 cetauser2   20   0  392m 191m 1728 R  0.3  0.0   0:01.08 R
 4091 cetauser2   20   0  418m 218m 1760 R  0.3  0.0   0:01.07 R
 4095 cetauser2   20   0  418m 218m 1800 R  0.3  0.0   0:01.08 R
 4097 cetauser2   20   0  391m 191m 1724 R  0.3  0.0   0:01.07 R
 4126 cetauser2   20   0  391m 191m 1724 R  0.3  0.0   0:01.06 R
 4127 cetauser2   20   0  392m 191m 1728 R  0.3  0.0   0:01.07 R

Y para finalizar, htop es algo así como la versión fashion de top, con funcionalidades añadidas para facilitar la gestión de procesos. Su salida gráfica interactiva se muestra en la siguiente imagen (difuminando la información sensible):

htop