# OpenMosix

O openMosix é uma extensão ao núcleo Linux para clustering em single system image, que possibilita a conversão de uma rede clássica de computadores desktop num super-computador para aplicações Linux.
Uma vez instalado, os nós do cluster mantêm comunicações entre eles sobre a disponibilidade dos recursos (processador e memória), permitindo a cada nó ter conhecimento se outro nó está mais ou menos disponível para disponibilizar os seus recursos. Desta forma, se um nó com vários processos (a utilizar um destes dois recursos concorrentemente) detecta que outro nó tem disponibilidade superior, ie., tem menos carga de processador/RAM, então o OpenMosix encarrega-se de trasladar/migrar um desses processos para esse nó, dando origem ao processamento distribuído. O OpenMosix tenta continuamente classificar os custos de trasladação e fazer previsões sobre a viabilidade da mesma. A título de curiosidade, estes algoritmos têm a sua base em algoritmos de cálculo financeiro.
O OpenMosix utiliza o seu próprio sistema de ficheiros, o OpenMosix Filesystem (oMFS) para permitir as trocas de dados entre vários processos. Este mecanismo suporta algumas das funcionalidades de Inter Process Communication (IPC) mais simples, como canalizações, fifos, e redireccionamento de ficheiros. Utilizando oMFS e uma configuração adequada, é ainda possível permitir aos processos remotos o acesso directos a ficheiros e dados, ainda que estes não existam no nó anfitrião do processo, como ilustra a Fig. 5-1.

## Características

É um sistema largamente utilizado, nomeadamente em meios de cálculo intensivo, e que herda a reputação do seu projecto predecessor, MOSIX. Na verdade, o OpenMosix é o que se chama, na gíria, de uma ramificação (fork) do projecto original devido a divergências de opinião por parte dos autores em relação ao licenciamento do MOSIX. Das muitas características positivas destacam-se:
* Escalabilidade: completamente transparente, basta lançar um novo nó na rede sem software ou requisitos adicionais, e será automaticamente adaptado pelo cluster como nó;
* Adaptatividade: a arquitectura de cada nó é completamente indiferente, desde que a versão do OpenMosix seja igual entre nós. Com efeito, é possível ter sistemas SMP (Symmetric Multi-Processor) a co-existir com sistemas UP (Uni-Processor).
* Não necessita recompilação das aplicações: qualquer aplicação poderá beneficiar deste sistema sem alterações ao código;
Por outras palavras, um sistema OpenMosix comporta-se de modo semelhante a um sistema SMP, com a grande vantagem de ser facilmente escalável até largas centenas de nós.

## Contrapartidas

A instalação do OpenMosix é relativamente complicada, pois quase sempre envolve baixar um patch e recompilar o núcleo ativando o suporte a ele.
Embora não específicas ao projecto OpenMosix, mas sim à maioria (senão todas) as soluções de processamento distribuído, a maior desvantagem é a dificuldade em migrar processos que utilizem chamadas IPC (Inter Process Communication), nomeadamente semáforos, memória partilhada e filas de mensagens – actualmente existe algum suporte a ser desenvolvido para memória partilhada, mas ainda não foi considerado estável. Fazendo uma listagem rápida sobre os problemas do OpenMosix, podemos listar:
* Processos com baixa computação, como aplicativos com alta comunicação interprocessos.
* Aplicações com memória compartilhada.
* Aplicações dependentes do hardware que necessitam de acesso a um periférico de um nó em especial.
* Aplicações com muitas threads não ganham desempenho.
* Não se ganha desempenho quando se roda um único processo, tal como seu browser.
Aplicações testadas que não migraram sobre OpenMosix:
* Programas em Java usando threads nativas não migram desde que eles utilizem memória compartilhada. Green Threads JVMs, entretanto, podem ser migradas porque cada thread Java é um processo separado.
* Aplicações que usam pthreads.
* MySQL, Apache, Oracle, Postgres, SAP, Baan, usam memória compartilhada.
* Python com threading habilitada.
* VMware, este ao rodar o Win98, algumas vezes travou e em outras o emulador do SO parou. Você deverá ter muito cuidado quando usar o VMware com o OpenMosix.
A característica de não migrar é uma situação normal para programas que falhariam ao serem movimentados pelo OpenMosix. Estes programas devem rodar como planejado no nó onde foram iniciados.