Subsecciones

- 5.4.1 Administración básica
- 5.4.2 Configuración
- 5.4.3 Las herramientas de área de usuario
- 5.4.4 Detección automática de nodos
  - Compilaciones
  - Problemas

# 5.4 ADMINISTRACIÓN DEL CLUSTER

El mantenimiento de un sistema resulta incluso más delicado y costoso (en tiempo) que su correcta instalación. En este capítulo se tomará contacto con todas las herramientas con las que cuenta openMosix para poder gestionar tu sistema.

La recomendación que lanzamos desde este manual es que pruebes con ellas para conocer exactamente la respuesta de tu cluster, ya que más tarde puede facilitarte la detección de errores o configuraciones poco adecuadas.

## 5.4.1 Administración básica

openMosix proporciona como principal ventaja la migración de procesos hacia aplicaciones HPC. El adminsitrador puede configurar el cluster utilizando las herramientas de área de usuario de openMosix (openMosix-user-space-tools5.6) o editando la interfície que encontraremos en /proc/hpc y que será descrita con más detalle seguidamente.

## 5.4.2 Configuración

Los valores en los ficheros del directorio /proc/hpc/admin presentan la configuración actual del cluster. El administrador del mismo puede configurar estos valores para cambiar la configuración en tiempo de ejecución, tal como se muestra en las tablas.

Tabla: Administración: Binarios en /proc/hpc/admin

echo 1 /proc/hpc/admin/block | bloquea la llegada de procesos remotos
echo 1 /proc/hpc/admin/bring | lleva todos los procesos a su nodo raíz

Tabla: Administración: Cambiando los parámetros en /proc/hpc
config | el fichero de configuración principal (escrito por la utilidad setpe)
block | permite/prohíbe la llegada de procesos remotos
bring | lleva todos los procesos a su nodo raíz
dfsalinks | lista los actuales enlaces DFSA
expel | envía los procesos huésped a su nodo raíz
gateways | numero máximo de gateways
lstay | los procesos locales se suspenderan
mospe | contiene el ID de nuestro nodo openMosix
nomfs | activa/desactiva MFS
overheads | para ajustes
quiet | detiene la obtención de información sobre la carga del sistema
decay-interval | intérvalo para recoger información sobre la carga
slow-decay | por defecto 975
fast-decay | por defecto 926
speed | velocidad relativa a un PIII/1GHz
stay | activa/desactiva el proceso de migrado automático

Tabla: Administración: Información de los otros nodos

clear | resetea las estadísticas
cpujob | informa a openMosix que el proceso está ligado al procesador
iojob | informa a openMosix que el proceso está ligado a la E/S
slow | informa a openMosix que actualice las estdísticas más lentamente
fast | informa a openMosix que actualice las estdísticas más rápidamente

Tabla: Administración: Escribiendo un '1' en /proc/hpc/decay
/proc/[PID]/cantmove | razón por la cual el proceso ha sido migrado
/proc/[PID]/goto | a qué nodo el proceso podrá migrar
/proc/[PID]/lock | si el proceso se ve bloquead en su nodo raíz
/proc/[PID]/nmigs | el numero de veces que el proceso ha migrado
/proc/[PID]/where | donde el proceso se encuentra siendo computado actualmente
/proc/[PID]/migrate | same as goto remote processes
/proc/hpc/remote/from | el nodo raíz del proceso
/proc/hpc/remote/identity | información adicional del proceso
/proc/hpc/remote/statm | estadística de memoria del proceso
/proc/hpc/remote/stats | estadística del procesador del proceso

Tabla: Administración: Información adicional sobre los procesos locales
/proc/hpc/nodes/[openMosix_ID]/CPUs | el número de CPUs que posee el nodo
/proc/hpc/nodes/[openMosix_ID]/load | la carga de openMosix en este nodo
/proc/hpc/nodes/[openMosix_ID]/mem | memoria disponible para openMosix
/proc/hpc/nodes/[openMosix_ID]/rmem | memoria disponible para Linux
/proc/hpc/nodes/[openMosix_ID]/speed | velocidad del nodo relativa a un PIII/1GHz
/proc/hpc/nodes/[openMosix_ID]/status | estado del nodo
/proc/hpc/nodes/[openMosix_ID]/tmem | memoria disponible
/proc/hpc/nodes/[openMosix_ID]/util | utilización del nodo

## 5.4.3 Las herramientas de área de usuario

Estas herramientas permitirán un fácil manejo del cluster openMosix. Seguidamente se enumeran con todos sus parámetros.

`migrate [PID] [openMosix_ID]` envia una petición de migrado del proceso identificado con el ID, al nodo que indiquemos..

`mon` es un monitor de los daemons basado en el terminal y da información relevante sobre el estado actual que puede ser visualizada en diagramas de barras.

`mosctl` es la principal utilidad para la configuración de openMosix. Su sintaxis es:

    mosctl  [stay|nostay]
           [block|noblock]
           [quiet|noquiet]
           [nomfs|mfs]
           [expel|bring]
           [gettune|getyard|getdecay]

            mosct whois [openMosix_ID|IP-address|hostname]
            mosct [getload|getspeed|status|isup|getmem|getfree|getutil] [openMosix_ID]
            mosctl setyard [Processor-Type|openMosix_ID||this]
            mosctlsetspeed interger-value
            mosctlsetdecay interval [slow fast]

Tabla: Administración: Parámetros adicionales para `mosrun`

stay | desactiva la migración automática
nostay | migración automática (defecto)
lstay | local processes should stay
nolstay | los procesos locales podran migrar
block | bloquea la llegada de otros procesos
noblock | permite la llegada de procesos
quiet | desactiva la posibildiad de dar información sobre la carga del nodo
noquiet | activa la posibildiad de dar información sobre la carga del nodo
nomfs | desactiva MFS
mfs | activa MFS
expel | envía fuera del nodo los procesos que han llegado previamente
bring | traerá todos los procesos migrados hacia su nodo raíz
gettune | muestra el parámetro de overhead
getyard | muestra la utilización actual de Yardstick
getdecay | muestra el estado del parámetro decay
whois | nos muestra el openMosix-ID, la dirección IP y los nombres de host del cluster
getload | muestra la carga (openMosix-)
getspeed | muestra la velocidad (openMosix-)
status | muestra el estado y la configuración actual
isup | nos informa de si un nodo está funcionando o no (ping openMosix)
getmem | muestra la memoria lógica libre
getfree | muestra la memoria física libre
getutil | muestra la utilización del nodo
setyard | establece un nuevo valor para Yardstick
setspeed | establece un nuevo valor para la velocidad (openMosix-)
setdecay | establece un nuevo valor para el intervalo del decay

Con `mosrun` ejecutaremos un comando especialemte configurado en un nodo establecido.
Su sintaxis: `mosrun [-h|openMosix_ID| list_of_openMosix_IDs] command [arguments]`

El comando `mosrun` puede ser ejecutado con diversas opciones. Para evitar complicaciones innecesarias viene con ciertas pre-configuraciones para ejecutar las tareas con configuraciones especiales de openMosix.

Tabla: Administración: Parámetros de `mosctl` con más detalle
nomig | runs a command which process(es) won't migrate
runhome | ejecuta un comando bloqueado en el nodo raíz
runon | ejecutará un comando el cuál será directamente migrado y bloqueado a cierto nodo
cpujob | informa a openMosix que el proceso está ligado a la CPU
iojob | informa a openMosix que el proceso está ligado a la E/S
nodecay | ejecuta un comando e informa al cluster de no refrescar las estadisticas de carga
slowdecay | ejecuta un comando con intervalo de decay grande para acumular en las estadísticas
fastdecay | ejecuta un comando con intervalo de decay pequeño para acumular en las estadísticas

`setpe` es una utilidad de configuración manual del nodo sintaxis:

            setpe   -w -f   [hpc_map]
            setpe   -r [-f  [hpc_map]]
            setpe   -off

`-w` lee la configuración de openMosix desde un fichero (normalmente /etc/hpc.map).

`-r` escribe la configuración actual de openMosix en un fichero (normalmente /etc/hpc.map).

`-off` desactiva la configuración actual del cluster.

`tune` es una utilidad de calibración y optimización de openMosix (para más información recurra a las páginas man de tune).

Existen utilidades adicionales a la interfície de /proc y a las línias de comandos. Por ejemplo existen unos parches para `ps` y para `top` (llamados `mps` y `mtop`) los cuales muestran adicionalmente el ID de nuestro nodo openMosix en una columna. Esta posibilidad es interesante para encontrar dónde ha migrado un cierto proceso.

Para clusters pequeños pueden sernos muy útiles las utilidades de openMosixView, una GUI para las tareas de administración más comunes y que más adelante se detalla en un capítulo.

## 5.4.4 Detección automática de nodos

El demonio de auto-detección de nodos, `omdiscd`, proporciona un camino automático para la configuración de nuestro cluster openMosix. Con él podremos eliminar la necesidad de configuraciones manuales como son la edición del fichero /etc/mosix.map .

`omdiscd` genera un envío de paquetes multicast (a todas las direcciones, en nuestro caso, nodos) para notificar a los otros nodos que hemos añadido uno nuevo. Esto significa que al añadir un nodo sólo tendremos que iniciar `omdiscd` en él.

Debemos ocuparnos de algunos requisitos previos como pueden ser una buena configuración de la red de interconexión de los nodos, principalmente para el correcto enrutamiento de paquetes. Sin una ruta por defecto deberemos especificar a `omdiscd` la interfície con la opción `-i`. De otra forma acabará con un error parecido al siguiente:

    Aug 31 20:41:49 localhost omdiscd[1290]: Unable to determine address of
    default interface.  This may happen because there is no default route
    configured.  Without a default route, an interface must be: Network is
    unreachable
    Aug 31 20:41:49 localhost omdiscd[1290]: Unable to initialize network.
    Exiting.

Un ejemplo de buena configuración podría ser la siguiente:

    [root@localhost log]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 eth0
    127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
    0.0.0.0         10.0.0.99       0.0.0.0         UG    0      0        0 eth0

La importancia de poder automatizar el reconocimiento de nuevos nodos conectados al sistema ha facilitado que se llegue a la simplicidad con la que contamos actualmente para iniciar dicha detección, con el comando `omdiscd`.

Ahora echando un vistazo a los logfiles tendríamos que ver algo parecido a

    Sep  2 10:00:49 oscar0 kernel: openMosix configuration changed: This is openMosix
    #2780 of 6 configured)
    Sep  2 10:00:49 oscar0 kernel: openMosix #2780 is at IP address 192.168.10.220
    Sep  2 10:00:49 oscar0 kernel: openMosix #2638 is at IP address 192.168.10.78
    Sep  2 10:00:49 oscar0 kernel: openMosix #2646 is at IP address 192.168.10.86
    Sep  2 10:00:49 oscar0 kernel: openMosix #2627 is at IP address 192.168.10.67
    Sep  2 10:00:49 oscar0 kernel: openMosix #2634 is at IP address 192.168.10.74

Tendremos el cluster listo para ser utilizado.

`omdiscd` tiene otras opciones entre las que cuentan poder ejecutarse como un demonio (por defecto) o en background (segundo plano) donde la salida será la pantalla (la salida estándar), con el comando `omdiscd -n`. La interfície, como ya se ha indicado, debe ser especificada con la opción `-i`.

Ahora vamos a ver brevemente la herramienta `showmap`. Esta utilidad nos mostrará el nuevo mapa.

    [root@oscar0 root]# showmap
    My Node-Id: 0x0adc

    Base Node-Id Address          Count
    ------------ ---------------- -----
    0x0adc       192.168.10.220   1
    0x0a4e       192.168.10.78    1
    0x0a56       192.168.10.86    1
    0x0a43       192.168.10.67    1
    0x0a4a       192.168.10.74    1

Existen otras muchas utilidades que pueden sernos útiles para la detección automática de nodos, como un mecanismo de routing para clusters con más de una red de conexión. Toda esta información es actualizada constantemente y podremos encontrarla en los ficheros README y DESIGN de las herramientas de usuario.

### Compilaciones

Si queremos obtener este módulo a partir de las fuentes tendremos que hacer una pequeña modificación en el fichero openmosix.c. Una de las línias, concretamente

    #define ALPHA

tendremos que comentarla ya que nosotros estamos trabajando en plataforma x86.

Si quisiéramos tener un historial más detallado podemos editar main.c para escribir

`log_set_debug(DEBUG_TRACE_ALL);` (en la línia 84 aproximadamente)

ahora podremos ejecutar

`make clean`

`make`

### Problemas

Algunas veces la auto-detección no funcionará tal como podríamos esperar, per ejemplo cuando un nodo debería ser detectado y no ve el tráfico multicast que se lleva a cabo en la red.

Esto ocurre con algunas targetas PCMCIA. Una solución posible sería poner la interfície en modo promíscuo, tal como se detalla seguidamente:

    Aug 31 20:45:58 localhost kernel: openMosix configuration changed:
            This is openMosix #98 (of 1 configured)
    Aug 31 20:45:58 localhost kernel: openMosix #98 is at IP address 10.0.0.98
    Aug 31 20:45:58 localhost omdiscd[1627]: Notified kernel to activate
    openMosix  Aug 31 20:45:58 localhost kernel:
            Received an unauthorized information request from 10.0.0.99

Algo que podríamos probar es forzar manualmente nuestro NIC a modo promíscuo y/o multicast, así:

    ifconfig ethx promisc

o

    ifconfig ethx multicast

Podremos ejecutar igualmente

`tcpdump -i eth0 ether multicast`

Si se nos muestra simulated es que seguramente hemos olvidado poner el comentario a la línia `#define ALPHA`, sería:

    Aug 31 22:14:43 inspon omdiscd[1422]: Simulated notification to activate openMosix
    [root@inspon root]# showmap
    My Node-Id: 0x0063

    Base Node-Id Address          Count
    ------------ ---------------- -----
    0x0063       10.0.0.99        1
    [root@inspon root]# /etc/init.d/openmosix status
    OpenMosix is currently disabled
    [root@inspon root]#