Latinoamérica
de.novatoanovato@gmail.com

Comando -lscpu-

Dedicado al nuevo usuario de software libre

Comando -lscpu-

Comando lscpu

El comando lscpu, es un programa del tipo UNIX muy utilizada en la familia de sistemas operativos GNU/Linux para obtener información detallada sobre de la arquitectura del procesador, siendo ésta obtenida de nuestro sistema acudiendo a los ficheros /sys/fs y proc/cpuinfo, quienes según el estándar de jerarquía de directorios FHS, son los que contienen valores de eventos del sistema y del hardware de nuestro dispositivo, entre los que se encuentra la información de la CPU.

Objetivo de éste artículo

El objetivo de éste artículo es el de explicar como utilizar y poder leer la información que obtenemos cuando ejecutamos el comando lscpu, aprender a utilizar la sintaxis y sus opciones. También se pretende desglosar terminologías sobre la arquitectura del procesador para que comprenda la información que nos imprima el programa en las distintas ejecuciones sintácticas.

Conceptos necesarios

Para poder comprender por completo la salida que nos imprime el comando lscpu y porque no, aprender un poco sobre hardware, definiremos de forma simple algunos conceptos sobre los procesadores y su funcionamiento. De mas esta decir, que si ya cuentas con ellos, puedes saltarte a la sintaxis del comando directamente.

¿Qué es un procesador?

La unidad central de procesamiento o unidad de procesamiento central (conocida por las siglas CPU, del inglés: Central Processing Unit), es el hardware dentro de los dispositivos programables, que interpreta las instrucciones de un programa informático mediante la realización de las operaciones básicas aritméticas, lógicas y de entrada/salida del sistema.

La CPU, es el componente que realmente lleva a cabo el cómputo. Trabaja leyendo instrucciones y datos de la memoria, y ejecuta esas instrucciones que operan sobre esos datos.

¿Qué son los núcleos de un procesador?

Los núcleos no son mas CPU dentro un mismo procesador, actualmente cada uno puede contener una o más CPUs y son también conocidas como cores.

– Un procesador single-core es aquel que contiene una sola CPU (o core/núcleo).

– Un procesador multi-core es aque que contiene más de una CPU (o cores/núcleos) y ejecutan multiprocesos como tal.

Diferencia entre núcleos virtuales y físicos

Con el paso de los años apreció la tecnología HyperThreading de Intel que consiste en duplicar algunos elementos dentro del procesador como los registros o las memorias caché de primer nivel, esto permite al núcleo del procesador poder manejar dos tareas a la vez (2 hilos o threads) y da lugar a la aparición de los núcleos lógicos.

Esta tecnología HyperThreading “engaña” al sistema operativo al hacerle creer que existen dos núcleos cuando en realidad solo existe uno, el que existe de verdad es el núcleo físico y el que aparece fruto de HyperThreading es el virtual.

¿Qué son las caches en un procesador?

La memoria cache del procesador se encarga de acelerar las lecturas y escrituras que necesita del sistema de memoria. Estas permite a la CPU acceder rápidamente a los datos que se utilizan con mayor frecuencia. Cada vez que se accede a una celda de la Memoria Principal, se copian celdas que están a continuación, especulando que pronto serán accedidas.

Nota: El procesador levanta los programas que están en RAM para ser ejecutadas, el paso de esto desde la RAM al micro suele ser lento, el trabajo de las memorias cache es el de agilizar esta transferencia de datos desde las memorias RAM al procesador por medio de una especie de «predicción» de los datos que pueda llegar a necesitar en las próximas instrucciones a ejecutar.

Este tipo de memorias son de alta velocidad y se encuentran dentro del procesador, la proximidad a este permite sacar mas provecho a velocidad que ya tienen en la que entrega datos a la CPU. Aunque sus capacidades son del orden de los kB o MB debido al costo de fabricación.

¿Qué son los niveles de cache en un procesador?

Los niveles de cache nos indican, principalmente, la velocidad, proximidad con los núcleos del procesador, tamaño y latencia que poseen este tipo de memoria.

– La caché L1 es la más rápida y la que se encuentra más cerca de los núcleos. Almacena los datos que inmediatamente van a ser usados por la CPU y las velocidades suelen estar en torno a los 1150 GB/s con una latencia aproximada de 0,9 ns. El tamaño de esta memoria caché está en torno a los 256 KB en total, siendo la mas pequeña.

Nota: La caché L1 se divide en dos tipos: Caché L1 de datos (L1d) y caché L1 de instrucciones (L1i). La primera se encarga de almacenar los datos que se procesarán y la segunda almacena la información sobre la operación a realizar (suma, resta, multiplicación, etc).

– El siguiente nivel de jerarquía de memorias cache que encontramos es la caché L2. Esta posee mayor capacidad de almacenamiento que el nivel anterior, aunque son más lenta que las L1, hablamos de unos 470 GB/s y 2,8 ns de latencia.  El tamaño de almacenamiento suele variar entre los 256 KB y los 18 MB.

Nota: En este nivel de cache se almacenan las instrucciones y datos que pronto serán utilizadas por la CPU, aunque no está dividida en Instrucciones y datos.

– El ultimo nivel con el que podríamos encontrarnos en las jerarquías de memoria es el L3. Esta tiene un espacio dedicado para ella en el chip del procesador. Son las de mayor tamaño pero también la más lenta, ronda los 200 GB/s y 11 ns de latencia. En la actualidad tienen una capacidad de almacenamiento que va desde los  4 MB hasta los 64 MB.

– Si bien es poco común, podríamos encontrarnos con 4 nivel de cache en algunos procesadores, se utiliza normalmente como apoyo para mejorar el rendimiento de GPUs integradas. Las caches L4 suelen rondar los 128MB de almacenamiento.

¿Que son los indicadores o registros de banderas (FLAGs)?

Son el conjunto de instrucciones que soporta el procesador, se emplean para controlar sus instrucciones. Diferentes procesadores suelen implementar diferentes subconjuntos, aún siendo de la misma marca. No obstante, algunos fabricantes se ponen de acuerdo para implementar un subconjunto de instrucciones básico, como lo hacen AMD e Intel.

Nuevos procesadores normalmente agregan instrucciones pero no quitan. Esto les permite tener compatibilidad hacia atrás.

Sintaxis

El comando lscpu se corresponde con la siguiente sintaxis:

lspci [opciones] [parámetros]

Opciones del comando lscpu

Cuando trabajamos con el comando lscpu, su ejecución de forma directa entrega información muy bien organizada y detalla sobre nuestro procesador.  Aun así, contamos con unas serie de formatos (extendido y analizable) para obtener una salida estándar mas personalizada y un conjunto de opciones que combinadas con los formatos de salidas nos brindan la posibilidad de obtener salidas mucho mas especificas.

Comando lscpu

El comando lscpu ejecutado de forma directa, sin parámetros y opciones, nos brinda bastante información muy bien organizada sobre nuestro procesador. Ejecutemos:

lscpu

Descripción de cada columna

  • Arquitectura: Define la arquitectura de la CPU y por ende de: buses, memoria y por extensión del software que se ejecuta.
  • Modo(s) de operación de las CPUs: Indica el modo de arquitectura del procesador con el que puede operar.
  • Orden de los bytes: Es el orden de los Bytes en los tipos de datos, estos pueden ser «Little Endian» (LE) y «Big Endian» (BE).
  • Tamaños de las direcciones: Es la expresión en binario de la memoria física y virtual de la circuitería de bus de direcciones.
  • CPU(s): Indica la cantidad total de CPUs (físicos y virtuales).
  • Lista de la(s) CPU(s) en línea: Lista la cantidad de CPUs totales (físicos y virtuales) comenzando desde el 0.
  • Hilo(s) de procesamiento por núcleo: Indica la cantidad de hilos por núcleo físico.
  • Núcleo(s) por «socket»: Indica la cantidad de núcleos físicos por socket.
  • «Socket(s)»: Indica la cantidad de sockets que posee la placa madre.
  • Modo(s) NUMA: Non Uniform Memory Architecture, cada procesador tiene acceso directo mediante un bus privado a unos bancos de memoria.
  • ID de fabricante: Muestra el nombre del fabricante del procesador.
  • Familia de CPU: Indica la serie de familia a la que pertenece el procesador.
  • Modelo: Indica que pertenece al tipo de diseño de 8 procesadores.
  • Nombre del modelo: Nos imprime el nombre y modelo completo del procesador.
  • Revisión: Es el número de revisiones por las que ha pasado el componente, desde que se diseñó hasta que fue fabricado.
  • Aumento de frecuencia: Indica si esta activado o desactiva el aumento manual de frecuencia del procesador.
  • CPU MHz: Nos indica los distintos rangos de frecuencia con los que trabaja el procesador (base, mínimos y máximos).
  • BogoMIPS: Los BogoMIPS es una unidad de medida de un computador inventada por Linus Torvalds para Linux. El sistema necesita una forma para la temporización que debe ser calibrado con la velocidad del propio computador, así que es el núcleo el que calcula la velocidad a la que se ejecuta un bucle de retardo, y esta medida son los BogoMIP.
  • Virtualización: Indica si el dispositivo dispone de tecnologías de virtualización para mejorar el rendimiento en el procesamiento.
  • Caché Lx: Capacidad de memoria cache de los distintos niveles.
  • CPU(s) del nodo NUMA 0: Indica la cantidad de CPUs que acceden a NUMA.
  • Vulnerabilit: Indica si tiene vulnerabilidades y en que estado se encuentran. (Las lista según el tipo).
  • Indicadores: También conocidos como Flags, son el conjunto y subconjunto de instrucciones que soporta el procesador.

Tipos de formatos de salida estándar

Antes de adentrarnos en las opciones del comando lscpu, es necesario que entendamos los dos tipos de formatos disponible para la salida estándar. Esto debido a que las opciones pueden combinarse con ellos para así obtener formatos de salidas específicos.

Formato extendido

El formato extendido, no imprime por la salida estándar la información generada por la herramienta lscpu de forma simple, legible y organizada. El parámetro que nos permite invocar este formato es -e, (–extended). Si lo ejecutamos en conjunto con el comando lscpu, obtendremos la siguiente salida. Generalmente este formato es invocado para que la información pueda ser leída por quien la solicita.

lscpu -a

Formato analizable

El formato analizable, nos muestra por salida estándar información generada por el comando lscpu organizada gramaticalmente. Generalmente, este tipo de formatos es utilizado para que la salida estándar pueda ser tratada, ya sea por redireccionamientos por tuberías, o para crear un input de un programa partiendo de esta salida. El parámetro que nos permite obtener este formato es -p, (–parse), y la salida estándar se ve de la siguiente manera.

lscpu -p

Opciones del comando lscpu aplicando formatos

A continuación expondremos las opciones del comando lscpu y las combinaremos con los tipos de formatos anteriormente mencionados.

Imprimir solo los CPUs fuera de linea

Los CPUs fuera de linea, son aquellos que no se encuentran trabajando, si bien en un hardware domestico esto no suele darse, cuando se trabaja con servidores si. El parámetro que nos permite hacer este tipo de peticiones es -c o –offline, y solo funciona si le indicamos un tipo de formato para la salida estándar. De lo contrario…

lscpu -c

Obtendremos este mensaje que nos indica que es un parámetro que se utiliza con formatos.

CPUs fuera de linea en formato extendido

Si ejecutamos el comando -c, con el formato extendido (-e). Obtendremos el listado de procesadores que se encuentran fuera de linea, si no hay ninguno que lo esté, el comando se ejecutara sin mas. Veamos.

lscpu -e -c

Al no tener ningún procesador offline, no me lista nada, pero el comando se ejecuto.

CPUs fuera de linea en formato analizable

Si ejecutamos el comando -c, pero en formato analizable (-p). Obtendremos el listado de procesadores que se encuentran fuera de linea, y al igual que en el caso anterior, de no haber ninguno que lo esté, el comando se ejecutara sin mas. Veamos.

lscpu -p -c

De igual modo que en el caso anterior no tendremos ningún procesador offline que mostrar.

Imprimir solo los CPUs en linea

Igual que en el caso anterior, es posible obtener por la salida estándar aquellos CPUs de nuestro procesador que se encuentran en linea o online. El parámetro es -b o –online, y la salida se vería de la siguiente manera.

¿Qué pasó?. Bueno que necesita que le pasemos como parámetro algún tipo de formato.

CPUs en linea en formato extendido

Para ver los CPUs que están en linea con el comando lscpu, utilizaremos el parámetro -b, aunque también indicaremos el parámetro -e, para que obtengamos como salida estándar el formato extendido.

lscpu -e -b

CPUs en linea en formato analizable

Para ver los CPUs que están en linea con el comando lscpu, utilizaremos el parámetro -b, pero en esta ocasión acudiremos al parámetro -p, para que obtengamos como salida estándar la información solicitada en formato analizable.

lscpu -e -b

Imprimir solo los CPUs en linea

Aunque no tenga CPUs fuera de linea como para ejemplificar, me gustaría señalar que también contamos con un parámetro para que nos muestre todos los procesadores, ya sea que estén en linea o no. Este es -a, y su salida esta ligada al tipo de formato que solicitemos, como en los casos anteriores.

Mostrar los CPUs online y offline en formato extendido

Ejecutemos el comando lscpu, solicitando el formato extendido con el parametro -e, indicado que nos muestre todos los CPUs, indistintamente del su estado con el parámetro -a.

lscpu -e -a

Mostrar los CPUs online y offline en formato analizable

Ejecutemos el comando lscpu, solicitando el formato extendido con el parámetro -p, indicado que nos muestre todos los CPUs, indistintamente del su estado utilizando el parámetro -a.

lscpu -p -a

Información del procesador en formato JSON

JSON (acrónimo de JavaScript Object Notation, «notación de objeto de JavaScript») es un formato de texto sencillo para el intercambio de datos. Se trata de un subconjunto de la notación literal de objetos de JavaScript, aunque, debido a su amplia adopción como alternativa a XML, se considera (año 2019) un formato independiente del lenguaje.

Es posible solicitar la salida estándar y la extendida en este formato, para ello contamos con el parámetro -J. Veamos como utilizarlo en ambos casos.

Formato JSON de la salida estándar

Si queremos visualizar la salida estándar del comando lscpu en formato JSON, simple mente la ejecutamos junto al parámetro -J (mayúscula).

lscpu -J

Formato JSON de la salida extendida

Si lo que queremos es optener el formato JSON de la salida extendida del comando lscpu, ejecutamos.

lscpu -e -J

Opciones del comando lscpu para la salida estándar

Hasta el momento solo vimos como trabaja lscpu con opciones que necesitan que pasemos un formato para la salida como parámetro. A continuación, expondremos algunas opciones que se ejecutan de forma directa.

Expresar unidades en Bytes

Esta opción simplemente nos imprime por la salida estándar las unidades expresadas en Bytes, en ves de lo que conocemos como formato legible para humanos, o con notación.

lscpu -B

En comparación con la salida estándar

lscpu

Información de las memorias caches del procesador

Por ultimo veremos con obtener información de las memorias caches del procesador. Para ello nos basta con utilizar el parámetro -C (mayúscula), junto con el comando lscpu. Sin mas.

lscpu -C

Espero sea de utilidad.
Saludos, Cristian.

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

4 × 4 =