hwloc y lstopo: Topología del hardware en Linux

Hoy os vengo a hablar de una herramienta que he conocido recientemente, que permite listar información ampliada de todo el hardware de nuestros equipo. La herramienta en cuestión se llama hwloc, que provee a su vez el comando lstopo.

Esta herramienta viene a complementar todas de las que ya os hablé, destinadas a ofrecer información del hardware en nuestros equipos GNU/Linux, me refiero a esta entrada: Obtener información del hardware en Linux

Háblame un poco de hwloc y lstopo

El paquete de software Portable Hardware Locality (hwloc) proporciona una abstracción portátil (entre sistemas operativos, versiones, arquitecturas, …) de la topología jerárquica de las arquitecturas modernas, incluidos los nodos de memoria NUMA, sockets, cachés compartidos, núcleos y subprocesos múltiples simultáneos. También recopila varios atributos del sistema, como información de memoria y caché, así como la ubicación de los dispositivos de E/S, como interfaces de red, InfiniBand HCA o GPU.

hwloc tiene como objetivo principal ayudar a las aplicaciones a recopilar información sobre plataformas informáticas paralelas cada vez más complejas para explotarlas de manera adecuada y eficiente. También puede ayudar a muchas aplicaciones simplemente proporcionando una CPU portátil y una API de enlace de memoria y una forma confiable de averiguar cuántos núcleos y / o subprocesos de hardware están disponibles.

hwloc se puede utilizar junto a lenguajes de programación como Julia, Perl, Python y Rust.

Se trata de un proyecto que sigue la filosofía de desarrollo del open source y utiliza una licencia BSD.

Instalación en GNU/Linux

Esta herramienta se encuentra disponible en la mayoría de repositorios de las distribuciones GNU/Linux, como podemos ver en el caso de Debian 10:

Información de paquetes de hwloc en Debian 10

Los dos paquetes más importantes son ‘hwloc‘ y ‘hwloc-nonx‘, como ya indica el nombre, escogeremos el que más nos interese, si disponemos de interfaz gráfica o no.

# Si el sistema utiliza escritorio
sudo apt install hwloc
# En cambio, sino tiene interfaz gráfica
sudo apt install hwloc-nonx

Una vez instalado en un equipo sin interfaz, podemos utilizar el comando ‘lstopo‘ para mostrar información del hardware:

lstopo

Con el resultado:

Muestra información del sistema con lstopo

También podemos utilizar el comando ‘hwloc-ls‘ con idéntico resultado.

En el caso de equipo con escritorio,  voy a utilizar mi portátil con Linux Mint Debian Edition, con una muestra del resultado al utilizar la herramienta:

Topologia del hardware mostrada por lstopo en LMDE

Ejemplos de uso

Guardar la información en un fichero de imagen

Si nos interesa podemos guardar la información en fichero de imagen:

lstopo out.png
lstopo out.fig
lstopo out.svg

Los formatos pdf, ps, png y svg necesitan bibliotecas de desarrollo de cairo instaladas en el sistema para estar disponibles. El formato fig siempre está disponible y se puede abrir en xfig.

Exportar a un fichero xml

El formato xml se puede utilizar, por ejemplo, para guardar la topología y volver a cargarla en otra máquina:

hostA$ lstopo out.xml
hostB$ scp machineA:out.xml .
hostB$ lstopo --input out.xml

Puede resultar útil, por ejemplo, mantener una referencia de la topología de nuestros servidores.

Mostrar la informacióin que nos interese

En cambio, si nos interesa mostrar únicamente una parte de la topología, podemos utilizar estos parámetros:

  • –only-core: Unicamente información de los núcleos.
  • –ignore-cache: Ignora la caché.
  • –no-bridges: Ignora los enlaces.
  • –no-legend: No muestra las leyendas.
  • –whole-io: Muestra toda la IO.
  • –fontsize 20: Indica la fuente utilizada.
  • –vert: Fuerza un diseño gráfica vertical en lugar la proporción 4/3 en la salida gráfica.
  • –horiz: Fuerza un diseño horitonzal en lugar de una proporción 4/3 en la salida gráfica.

A modo de ejmplo, vamos a mostrar la información utilizando una fuente 20, sin leyenda y en horizontal.

lstopo --fontsize 20 --horiz --no-legen

Con el resultado:

Uso de lstopo con parámetros

Crear topologías a medida

Una característica muy útil para las diapositivas es crear topologías arbitrarias. Ver por ejemplo:

lstopo --input "node:1 socket:1 core:2 pu:2"

Que construye una máquina con un nodo NUMA, que contiene un socket, que contiene dos núcleo cada uno, que contiene 2 procesadores lógicos cada uno. Aquí podemos jugar con los valores a nuestro gusto. Aquí el resultado:

Topologia creada a medida

La verdad es que tiene muchas más posibilidades.

Familia de programas

Dentro de la familia de programas ofrecidos por hwloc, también nos encontramos con:

    • hwloc-bind: Ejecuta un comando que esté vinculado a procesadores y/o memoria específicos.
    • hwloc-calc: Permite operar con objetos y cadenas de máscaras de CPU
    • hwloc-assembler: Para ensamblar múltiples topologías XML

Además permite utilizar una potente API.

Para elaborar la entrada, me he servido de la siguiente información:

Web open-mpi.org – Portable Hardware Locality

Tutorial de uso de Hwloc