Los superordenadores funcionan con qué sistemas operativos?

La mayoría de las variedades de Linux hoy en día. Sin embargo, hay una escuela de pensamiento que considera que los nodos de computación deberían ejecutar sistemas operativos despojados, para que no estorben tanto a las aplicaciones. Uno de ellos es el «Compute Node Linux».

Los programas de la HPC, a los que los iniciados llaman «códigos», tienden a no utilizar mucho el SO. Pueden leer o escribir archivos, normalmente desde sistemas de archivos altamente paralelos, y ciertamente hacen E/S de red, pero la actitud del típico programador de aplicaciones HPC sobre el SO es «mapeame toda la memoria, dame acceso directo a la interfaz de interconexión, y luego mantente fuera de mi camino»

Hay un fenómeno en HPC llamado «interferencia del SO». Supongamos que el sistema operativo tiene varias tareas de mantenimiento que se ejecutan durante 0,001 segundos cada segundo. Un 0,1% de sobrecarga, no es gran cosa, ¿verdad? Ahora supongamos que la aplicación es un programa paralelo de 1000 nodos que tiene que coordinar el progreso de los nodos una vez por segundo más o menos. ¡Boom! En algún lugar del sistema, uno de los nodos está SIEMPRE fuera de servicio haciendo algo. Tal vez ejecutando lpd. ¿Quién sabe? El resultado neto es que 999 nodos están esperando al 1000, y ese 0,1% de sobrecarga se magnifica 1000 veces. La mitad de la potencia de cálculo del clúster se pierde en esta pequeña cosa del SO. No es de extrañar que los programadores de HPC odien el SO.

Otro punto delicado es la red. En un buen día, la latencia de extremo a extremo de un salto de Ethernet utilizando 10 Gbps Ethernet, es de unos 5 microsegundos. Eso es «para siempre» para HPC. Los adaptadores y conmutadores Infiniband bien diseñados consiguen habitualmente una latencia inferior a 1 microsegundo. A estas velocidades, simplemente se tarda demasiado en llamar al sistema operativo para enviar o recibir un paquete. En su lugar, las redes HPC suelen utilizar el «bypass del sistema operativo», en el que la aplicación (o, más probablemente, una biblioteca de modo de usuario) puede hablar directamente con el adaptador de E/S. La longitud de la ruta de software desde la aplicación que llama a SEND hasta los bits en el cable es a menudo inferior a 200 instrucciones de máquina. Eso simplemente no puede hacerse con el SO en el camino. Incluso la codificación de las tramas de Ethernet es tan mala para la latencia que tiende a hacer que los ingenieros de HPC sean gruñones. ¿Códigos 64/66? Yechh.

Y no me hagas hablar de la memoria virtual. Cada vez que alguien dice «virtual» hay que pensar en «lento».