En 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:
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):

