La instalación que realizamos fue de un cluster MOSIX de 3 nodos, cada uno con las siguientes características:
||
Procesador ||
RAM ||
DD ||
Distro ||
||
|| AMD Athlon 1.2Ghz || 756MB || 30GB || Red Hat 7.1 ||
|| AMD Duron 750Mhz || 128MB || 01GB || Red Hat 7.1 ||
|| AMD K6-2 350 Mhz || 96MB || 01GB || Red Hat 7.1 ||
El 1er nodo que se configuró fue el Athlon. Se procedió a instalar (en una partición nueva) la distro Red Hat 7.1 incluyendo los paquetes de desarrollo. Luego se siguieron los paso descritos en la sección
3. Para el 2do y 3er nodo se utilizaron 2 disco duros viejos de 1GB. También se instalo la distro Red Hat 7.1 y se siguieron los pasos correspondientes (esto se pudo haber ahorrado, ver sección 6).
La instalación automática incluye la modificación al LILO, por lo que una vez finalizada la instalación y reiniciado el equipo, basta con elegir la opción linux-mosix desde el menú del LILO, para poder cargar el kernel MOSIX recién compilado.
Las pruebas que hicimos fueron bastante básicas, esto por razones de tiempo y de preparación. Nuestro X-Team programó una pequeña rutina (el proceso X!) que únicamente ejecutaba un ciclo infinito sin mostrar nada en pantalla. Al ser ejecutada en un Linux "normal", esta rutina ocupa el 100% de la CPU. La idea era ver que pasaba si ese mismo proceso se ejecuta en un cluster...
Dentro de las aplicaciones que trae MOSIX, se encuentra el programa
mon que se ejecuta en modo texto (consola) y que permite monitoriar la carga de los nodos del cluster, obtener información acerca de las velocidades de los nodos, cantidad de memoria, etc.
Usando el
mon pudimos apreciar lo siguiente:
- al ejecutar nuestra rutina X! en el nodo más lento, MOSIX migraba el proceso hacía el nodo más rapido, quedando el nodo lento sin carga(!).
- al ejecutar la rutina en el nodo más ràpido, toda la carga se quedaba en el mismo nodo, es decir, MOSIX no migraba el proceso hacia otros nodos.
- al modificar nuestra rutina X! agregándole una instrucción printf() y repetir las pruebas anteriores, no se pudo apreciar ningún tipo de migración entre nodos. Esto tiene una explicación bien simple, como la instrucción printf() se encarga de mostrar una texto en pantalla, este texto debe ser mostrado en el nodo desde el cual se está ejecutando la rutina, por lo tanto el proceso nunca será migrado ya que el procesamiento que requiere es mínimo (recuerden que sólo es un ciclo infinito) por lo tanto dedicará todo su tiempo a mostrar texto en pantalla...
Con estos pocos resultados y la experiencia de la instalación, hemos llegado a ciertas conclusiones...