# 6.15 EL API DE OPENMOSIX

El API de openMosix es la manera mediante la cual los programadores pueden controlar el comportamiento de un cluster. Sirve como herramienta de diagnóstico para monitorizar los aspectos más íntimos del procedimiento que se lleva a cabo en el seno del nodo y, por extensión, del cluster. De esta interfaz se obtienen los datos para `mosmon` por ejemplo, para monitorizar la carga -load- o las relaciones de memoria libre y ocupada.

No hará falta ser un experto para poder comprender esta interfaz, puesto que es de una simplicidad sorprendente: lo justo para poder saber en cualquier momento, cualquier aspecto relativo a la algorítmica que controla el cluster: migración, balenceo, etc.

De esta manera se aconseja al lector ver como se opera en este directorio para buscar las razones de migración, por ejemplo, o qué procesos no locales se están ejecutando en su nodo -aspectos que hasta ahora habían permanecido ocultos al ser invisivbles al comando `ps`-. Se pueden llegar a solucionar problemas o simplemente comprender mejor a openMosix.

En este apartado se describirá el API de openMosix, al que se puede acceder como a un conjunto de ficheros6.6 y escribir o leer de ellos dependiendo de su utilización. Todos los ficheros se encuentran en /proc/hpc/. Dentro de este directorio se encuentran los siguientes subdirectorios:

- admin: variables que controlan la administración del nodo. Ver cuadro .
- decay: control de estadísticas. Ver cuadro .
- info: información de variables relativas al nodo. Ver cuadro .
- nodes: información del estado y carga de cada uno de los nodos del cluster. Las variables son las mismas que para el nodo local, en info.
- remote: ruta que sirve para migrar procesos hacia otros nodos. Ver cuadro .

Tabla: El API de openMosix: /proc/hpc/remote/

Fichero | W/R | Función | Valor de activación
block | W | bloqueo para la llegada de procesos | 1
bring | W | devuelve los procesos migrados | 1
config | R/W | configuración del sistema | -
decayinterval | W/R | intervalo de control estadístico | -
dfsalinks | W | activación de rutas DFSA | ruta
expel | W | expele procesos ajenos, activa block | 1
fastdecay | W | tasa de decaída estadística rápida | defecto: 926
gateway | R | número de gateways en red | defecto: 0
lstay | W/R | no migrarán procesos locales | 1
mfscosts | W/R | costes de MFS | ?
mfskill | W | esconde árboles complejos a MFS | ruta
mospe | R/W | identificador de nodo (nodo ID) | /etc/openmosixmap
nomfs | R/W | deshabilita la opción de MFS | 1
overhead | R/W | sobrecargas sobre nodos y red | -
quiet | R/W | el nodo deja de diseminar información a otros | 1
slowdecay | R/W | procesos con tasa de caída lenta | defecto: 976
speed | R/W | velocidad del nodo | valor
sspeed | R/W | velocidad estandar, par areferencia | 10000
stay | R/W | los procesos no migrarán | 1
version | R | versión de openMosix funcionando | variable

Tabla: El API de openMosix: /proc/hpc/admin/
Fichero | W/R | Función | Valor de activación
clear | W | resetea valor estadísticos del nodo | 1
cpujob | W | advierte que el proceso es cpu-intensivo | 1
exec | W | protege de `execve` la política de decay | 1
execonce | W | como el anterior, pero solo para el primer `execve` | 1
fast | W | estadísticas de decaimiento rápidas | 1
inherit | W | heredadas de un proceso a sus hijos | 1
iojob | W | proceso io-intensivo | 1
own | R | factor de decay que utilizaría el proceso | -
slow | W | estadísticas de decaimiento lentas | 1

Tabla: El API de openMosix: /proc/hpc/decay/
Fichero | W/R | Función | Valor de activación
load | R | carga del nodo | variable
mem | R | memoria utilizada por el sistema | variable
rmem | R | memoria del sistema en bruto | variable
speed | R | velocidad del nodo o procesador del nodo | variable
status | R | estado del nodo | variable
tmem | R | memoria total del sistema -utilizada y sin utilizar- | variable
util | R | factor de unificación del sistema | variable
cpus | R | número de procesadores del sistema | variable

Tabla: El API de openMosix: /proc/hpc/info/
Fichero | W/R | Función | Valor de activación
from | R | nodo de procedencia | nodo ID
goto | W | obligación de migrar hacia ese nodo | nodo ID
statm | R | estadísticas de memoria | -
stats | R | estadísticas de procesador | -

En los cuadros se ha hablado de estadísticas referentes tanto a memoria com a procesador. Éstas contienen la siguiente información:

ESTAD´iSTICAS DE MEMORIA

- tamaño total
- tamaño residente
- memoria compartida
- páginas de texto
- páginas de librerías
- páginas de datos
- páginas sucias

ESTAD´iSTICAS DE PROCESADOR

- tiempo de usuario en el nodo
- tiempo de los descendientes, no se muestra
- nice -prioridad UNIX- del proceso
- vsize, tamaño virtual
- rss, número de páginas residentes
- nswap, número de páginas en swap
- cnswap, páginas en swap de los descendientes

Por otro lado existe en /proc/PID/ una estructura ampliada relativa a la información para cada proceso. Entre esta información -propia de linux- ahora podrán encontrarse aspectos relacionados con openMosix, como muestra el cuadro .

Tabla: El API de openMosix: /proc/PID/

Fichero | Función
cantmove | motivo por el que no ha migrado el proceso
goto | nodo al que se desea migrar el proceso
lock | bloqueo del proceso en este nodo
migrate | obliga al proceso a migrar
nmigs | número de veces totales que el proceso ha migrado
sigmig | el solicita una señal tras migrar
where | nodo destino