Modificações para Permitir Migração de Processos na LAM/MPI

De Wiki do Veiga

Introdução

Este texto contém algumas informações de como utilizar o suporte a Checkpoint/Restart da LAM/MPI para migrar processos de uma aplicação MPI.

A migração de processos utilizando esta abordagem consiste em três fases:

  • Primeiramente é realizado o checkpoint da aplicação, seguido da transferência dos arquivos de contexto dos processos migrantes para seus nós destinos.
  • Na sequência, modificam-se as informações de localização nos arquivos de contexto e, então, continua-se a execução da aplicação a partir destes arquivos modificados.
  • Com essas modificações é possível continuar a execução da aplicação corretamente em um conjunto diferente de nós, caracterizando uma migração de processos.

Esta foi uma das técnicas exploradas durante a elaboração da minha dissertação de mestrado.

Modificações na LAN/MPI

Cada processo em LAM/MPI possui uma estrutura struct _gps que contém as informações de localização (por exemplo, identificação do processo e do nó). Estas informações são utilizadas por LAM/MPI para reiniciar os canais de comunicação após uma operação de C/R. Desta forma, a modificação do arquivo de contexto consiste em localizar a estrutura _gps e alterar as informações para indicar o novo nó. Também é necessário modificar a tabela de mapeamento presente no arquivo de contexto de mpirun.

A seguir são listadas as modificações necessárias na LAN/MPI:

  • Alterar a localização do processo a ser migrado dentro dos arquivos de checkpoint de todos os processos. Por exemplo, para migrar um processo de um nó 1 (gps_node==1) para um nó 2, deve-se fazer gps_node=2 em todos os arquivos de checkpoint. Para isso, necessita-se encontrar a struct _gps dentro dos arquivos.

A struct _gps contém as informações que identificam o processo dentro da LAM.

struct _gps {
        int4 gps_node; /* node ID */
        int4 gps_pid; /* process ID */
        int4 gps_idx; /* process index */
        int4 gps_grank; /* glob. rank in loc. world */
};
  • Renomiar o arquivo de checkpoint do processo a ser migrado. Por exemplo, renomiar context.PID1-n1-PID2 para context.PID1-n2-PID2, onde PID1 é o PID do mpirun e PID2 é o PID do processo.
  • Atualizar a string /tmp/lam-USER@HOST no arquivo de checkpoint do processo a ser migrado. HOST deve conter o hostname da nova localização.
  • Atualizar as strings que contém o caminho para o arquivo de checkpoint do processo migrado. Por exemplo, como context.PID1-n1-PID2 foi renomiado para context.PID1-n2-PID2, deve-se realizar essa atualização dentro do checkpoint do mpirun. Também é necessário alterar o nNID que aparece antes no inicio das strings, onde NID é o node ID.

Referências


Marcelo Veiga Neves < marcelo.veiga at gmail.com >

Ferramentas pessoais