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