\chapter{Escalonadores de Tarefas}
\label{escalonadoresdetarefas}
\cutname{escalonadoresdetarefas.html}

Sistemas de ``\textit{job scheduler}", ou de agendamento/escalonamento de tarefas, para clusters e grids são softwares desenvolvidos para controlar a execução dos ``\textit{jobs}"~ ou tarefas no ambiente. Esse tipo de software é composto normalmente por um gerenciador de filas de processamento (``\textit{batch queue manager}") que prioriza e controla a execução de múltiplas tarefas. ``\textit{Job schedulers}"~ são também, conhecidos como  gerenciadores de distribuição de recursos ou gerenciadores de filas de execução.


As características básicas esperadas de um ``\textit{job scheduler}"~ são:

	\begin{itemize}
	\item Interface para se definir o fluxo e/ou a árvore de dependência de execução dos trabalhos;
	\item Submissão automática das tarefas para execução;
	\item Interfaces para monitoramentos das execuções;
	\item Controle das prioridades e das filas de tarefas, para controlar a ordem de execução das tarefas.
	\end{itemize}

Vários sistemas como ERPs, Bancos de dados, sistemas de cópias de segurança, incluem ou podem usar algumas características de sistemas de agendamento de tarefas.

Alguns exemplos de ferramentas utilizadas em ambientes de cluster para ``\textit{job scheduler}"  serão descritos a frente:
	\begin{itemize}
	\item openPBS \ref{openpbs};
	\item TORQUE \ref{torque};
	\item MAUI \ref{maui};
	\item Crono\ref{crono}.
	\end{itemize}



\section{OpenPBS}
\label{openpbs}
\textbf{Sítio:} \url{http://www.openpbs.org/}

O propósito do sistema OpenPBS é prover controles adicionais sobre a inicialização ou o seqüenciamento de execução de grupos de tarefas, e permitir a distribuição destes trabalhos entre vários nós de um cluster. O sistema de controle de tarefas (\textbf{batch server}) permite que sejam definidas e implementadas regras para diferentes tipos de recursos e para a quantidade de recursos pode ser usada por diferentes tarefas. Este sistema também provê um mecanismo com o qual um usuário pode assegurar que uma tarefa tenha os recursos necessários para ser completada.

Este sistema de controle de tarefas é constituído por um conjunto de componentes: um servidor, clientes e comandos de usuários. O servidor gerencia diferentes objetos, como tarefas e filas de execução.

Interações típicas entre os componentes são baseadas no modelo cliente-servidor, um cliente faz requisição para o servidor, a execução de uma tarefa, e o servidor executa o trabalho em um de seus clientes. Clientes não podem criar ou modificar os objetos diretamente, eles dependem de uma ordem do servidor que gerência estes objetos.

O ''servidor de tarefas'' é um processo permanente (\textit{daemon}) ou um conjunto de processos . O servidor de tarefas gerencia os objetos (trabalhos a serem executados), assim como, as filas e as tarefas. Ele provê serviços como: criação, execução, modificação, exclusão e roteamento de tarefas para os clientes (nós computacionais) responsáveis pela execução dessas tarefas.



\section{TORQUE}
\label{torque}

\textbf{Sítio:} \\ \url{http://www.clusterresources.com/pages/products/torque-resource-manager.php}

TORQUE é um gerenciador de recursos em código aberto que provê controle sobre tarefas (\textit{batch jobs}) em nós computacionais distribuídos. Ele é um esforço da comunidade de software livre, baseado no código original do projeto *PBS, e que já conta com mais de 1.200 correções e melhorias de código, com melhorias significativas em áreas como escalabilidade, tolerância à falhas e novas extensões. Alguns contribuidores do projeto são: NCSA, OSC, USC , U.S. Dept of Energy, Sandia, PNNL, U-Buffalo, TeraGrid e outras organizações líderes em desenvolvimento de HPCs.

Características:

\begin{itemize}
\item Tolerância à falhas:\\
	Suporte a checagem de nós fora do ar;\\
	Várias condições de checagens de falhas nos nós.
\item Interface de seqüenciamento:\\
	Interface de busca estendida, provendo informações mais acuradas sobre o escalonamento das tarefas;\\
	Interface de controle estendida para permitir maior controle sobre as tarefas, seus atributos e execução;\\
	Permite a obtenção de dados estatísticos de tarefas já executadas.
\item Escalabilidade:\\
	Servidor de monitoramento;\\
	Capacidade de trabalhar com cluster muito grande (acima de 15TeraFlops e 2500 processadores);\\
	Capacidade de trabalhar com um grande volume de tarefas (acima de 2000 processos);\\
	Capacidade de suportar grande número e tamanho de mensagens de servidores.
\item Usabilidade:\\
	Mecanismo de ''log'' mais completo;\\
	''Logs'' com características de leitura mais simples.
\end{itemize}



\section{MAUI}
\label{maui}
\textbf{Sítio:} \\ \url{http://www.clusterresources.com/pages/products/maui-cluster-scheduler.php}

MAUI é um avançado escalonador de tarefas com um grande conjunto de características desenvolvidas especialmente para plataformas de computação de alto desempenho (HPC). Ele usa políticas de escalonamento agressivas para otimizar a utilização de recursos e minimizar o tempo de resposta (execução) das tarefas (\textit{job}). Simultaneamente, provê ferramentas de controle administrativas sobre os recursos e o volume de tarefas sendo executadas, permitindo uma grande capacidade de configuração em diversas áreas como: priorização de tarefas, seqüenciamento, alocação, distribuição de cargas e políticas de reserva de recursos.


MAUI foi projetado com base em experiências coletivas dos maiores e mais avançados centros de HPC do mundo. Ele prove ferramentas que estes centros precisavam para controlar, rastrear e otimizar o uso de seus recursos. Uma coleção extensiva de estatísticas e ferramentas de perfil, modo de teste de operação e um avançado simulador de características que permite a checagem de ambientes de produção, para saber se todas as alterações de configurações foram feitas de forma segura.


\section{Crono}
\label{crono}
%http://www.cpad.pucrs.br

Crono é um gerenciador de recursos livre e otimizado para pequenos e médios clusters baseados em sistema GNU/Linux \cite{crono-netto:03}. O Crono suporta batch jobs e possui um escalonador otimizado, baseado em características presentes em alguns outros gerenciadores de recursos.

As principais características do Crono são:

\begin{itemize}
	\item Possui um bom nível de configuração, permitindo a criação de grupos e o controle de acesso a nível de usuário e de grupos;
	\item Um pequeno número de linhas de código (comparado a outras soluções existentes), o que torna mais simples a adaptação do sistema por usuários especialistas;
	\item Suporte a scripts de pré e pós processamento de requisição, que torna o sistema mais flexível para atender à demanda específica de usuários;
	\item Permite modo de alocação de espaço compartilhado (os nós são alocados exclusivamente para o usuário) e de tempo compartilhado (onde usuários podem compartilhar um mesmo nó);
	\item Suporte a clusters heterogêneos em número de processadores e em arquitetura, tornando possível, por exemplo, que existam em um mesmo cluster máquinas de arquitetura Intel x86, x86-64 e Itanium;
	\item Suporte à integração com o OurGrid, permitindo que facilmente nós do cluster sejam utilizados por usuários de grids. Este suporte pode ser para acesso dedicado ou não-dedicado. No primeiro, nós do cluster são alocados para usuários da grade e ficam disponíveis pelo tempo de alocação. No segundo, todos os nós não alocados a usuários locais são cedidos ao grid e removidos do mesmo tão logo sejam solicitados por usuários locais (isto é, usuários que possuem direito de acesso ao cluster).
\end{itemize}
