• Nenhum resultado encontrado

3.2 Protocolos Quase-s´ıncronos

3.2.1 Classe SZPF

Os protocolos da classe SZPF impedem a forma¸c˜ao de qualquer caminho-Z no padr˜ao de checkpoints e mensagens da computa¸c˜ao. Os padr˜oes gerados por estes protocolos tamb´em s˜ao chamados de SZPF e s˜ao definidos formalmente da seguinte forma:

34 Cap´ıtulo 3. Protocolos para Checkpointing

Defini¸c˜ao 3.1 Padr˜oes SZPF — Um padr˜ao de checkpoints e mensagens ´e SZPF se, e somente se, ele n˜ao possui nenhum caminho-Z.

Garantir esta propriedade n˜ao ´e nem um pouco complicado, uma vez que ela est´a dire- tamente relacionada com a ordem entre os eventos de envio e entrega de mensagens dentro de um intervalo entre checkpoints, conforme apresentamos no Teorema 3.1.

Teorema 3.1 Um padr˜ao de checkpoints e mensagens ´e SZPF se, e somente se, em cada intervalo entre checkpoints, todos os eventos de entrega de mensagens ocorrem antes de qualquer evento de envio de mensagem.

Prova: Suficiˆencia(⇐): Considere um padr˜ao onde todas as entregas de mensagens ocorrem antes dos envios de mensagens dentro de cada intervalo entre checkpoints. Suponha por contradi¸c˜ao que este padr˜ao n˜ao ´e SZPF, ou seja, ele possui pelo menos um caminho-Z. No entanto, um caminho-Z apresenta, por defini¸c˜ao, pelo menos um par de mensagens mi e mi+1

consecutivas dentro do caminho tais que entrega(mi) 6→ envio(mi+1), sendo que estes dois

eventos ocorrem no mesmo intervalo entre checkpoints. Este fato, por´em, ´e uma contradi¸c˜ao com a nossa suposi¸c˜ao inicial a respeito do padr˜ao de checkpoints e mensagens.

Necessidade(⇒): Considere um padr˜ao de checkpoints e mensagens SZPF. Suponha por contradi¸c˜ao que existe um intervalo entre checkpoints no qual a entrega de uma mensagem ma ocorre ap´os o envio de uma mensagem mb. Neste caso [ma, mb] forma um caminho-Z e,

portanto, o padr˜ao n˜ao pode ser SZPF. 2

Em tais padr˜oes, como todos os caminhos em ziguezague s˜ao caminhos-C, todas as Z- precedˆencias existentes s˜ao causais. Este fato automaticamente impede a existˆencia de check- points obsoletos uma vez que um evento n˜ao pode preceder causalmente a si pr´oprio. Os protocolos desta classe costumam ser muito simples, uma vez que a decis˜ao de for¸car um checkpoint pode ser baseada apenas no regime de troca de mensagens e n˜ao nas rela¸c˜oes de dependˆencia entre os checkpoints. Por este motivo tais protocolos tamb´em s˜ao chamados de baseados em modelo1 [13]. Apesar de serem f´aceis de desenvolver, os protocolos desta classe

apresentam um n´umero excessivo de checkpoints for¸cados, necess´arios para quebrar todos os caminhos-Z existentes. Isto pode gerar um atraso consider´avel na execu¸c˜ao da computa¸c˜ao distribu´ıda e degradar completamente o seu desempenho.

Um dos protocolos mais conhecidos desta classe ´e o NRAS (No-Receive-After-Send ) [36], o qual for¸ca um checkpoint antes de entregar uma mensagem caso j´a tenha ocorrido um evento de envio dentro do mesmo intervalo. O Algoritmo 3.2 mostra como este protocolo ´e implementado em um processo pi. Note que ´e necess´ario apenas manter uma vari´avel

booleana para indicar se um evento de envio j´a ocorreu no intervalo corrente. Inicialmente, esta vari´avel ´e inicializada com o valor falso e sempre que uma mensagem for enviada, ela

3.2. Protocolos Quase-s´ıncronos 35

Algoritmo 3.2 Protocolo NRAS em um processo pi.

Estruturas de Dados 1: Var 2: enviou: booleano Inicializa¸c˜ao 1: enviou ← falso Ao enviar mensagem m 1: enviou ← verdadeiro 2: enviarede(m) Ao receber mensagem m 1: if enviou then 2: grava checkpoint 3: end if 4: entrega(m) Ao gravar checkpoint 1: enviou ← falso

se torna verdadeira. Sendo assim, ao receber uma mensagem, basta testar o conte´udo da vari´avel e se ela for verdadeira, for¸car a grava¸c˜ao de um checkpoint antes de sua entrega para a aplica¸c˜ao. Al´em disso, sempre que um checkpoint (b´asico ou for¸cado) ´e gravado, esta vari´avel recebe o valor falso pois um novo intervalo entre checkpoints acabou de ser criado.

´

E f´acil verificar que o padr˜ao de checkpoints e mensagens gerado pelo protocolo NRAS sa- tisfaz a condi¸c˜ao do Teorema 3.1 pois nenhuma mensagem pode ser entregue ap´os um evento de envio ter ocorrido em um mesmo intervalo entre checkpoints. A Figura 3.4 apresenta o padr˜ao gerado pelo protocolo NRAS para o mesmo CCP da Figura 3.2. Os checkpoints for¸cados est˜ao representados pelos quadrados com um hachurado diferente. Note que agora todos os checkpoints s˜ao ´uteis, inclusive os b´asicos que originalmente n˜ao eram.

PSfrag replacements [1, 0, 0] [0, ∗, ∗] [1, 4, 2] [0, 3, 1] [1, 4, 4] [0, 3, 3] p0 p1 p2 pf3

36 Cap´ıtulo 3. Protocolos para Checkpointing

Outro protocolo SZPF que merece ser comentado ´e o CAS (Checkpoint-After-Send ) [36], o qual ´e apresentado no Algoritmo 3.3. Este protocolo induz um processo a gravar um checkpoint for¸cado sempre ap´os o envio de uma mensagem. Isto garante que haver´a no m´aximo um evento de envio por intervalo entre checkpoints e que este ser´a o ´ultimo evento do intervalo, satisfazendo a defini¸c˜ao de padr˜ao SZPF. Esta estrat´egia ´e muito mais simples que a utilizada pelo NRAS mas gera um n´umero maior de checkpoints for¸cados no padr˜ao de checkpoints e mensagens. Na realidade o n´umero de checkpoints for¸cados gerados pelo protocolo CAS corresponde exatamente ao n´umero de mensagens propagadas pela aplica¸c˜ao distribu´ıda.

Algoritmo 3.3 Protocolo CAS em um processo pi.

Ao enviar mensagem m 1: enviarede(m)

2: grava checkpoint

A grande vantagem do padr˜ao gerado por este protocolo est´a no fato de que o ´ultimo checkpoint est´avel de um processo n˜ao precede nenhum checkpoint de outro processo pois nenhuma mensagem pode ser enviada depois dele. Se uma mensagem ´e enviada, um check- point for¸cado ´e gravado e este passar´a a ser o ´ultimo checkpoint est´avel do processo. Por causa disso, o retrocesso do estado de um processo ao seu ´ultimo checkpoint est´avel n˜ao for¸ca o retrocesso de estado de nenhum outro processo. Desta maneira, ao se recuperar de uma falha um processo precisa apenas retroceder ao seu ´ultimo checkpoint est´avel, sem se coordenar ou for¸car o retrocesso de qualquer outro processo. Isto garante tamb´em que nenhum outro checkpoint est´avel al´em do ´ultimo ser´a necess´ario no futuro e, portanto, ape- nas um checkpoint por processo precisa ser mantido ao longo da execu¸c˜ao. No entanto, na pr´atica, para garantir que o ´ultimo checkpoint de um processo realmente n˜ao possa preceder algum checkpoint de outro processo ´e necess´ario que as linhas 1 e 2 do Algoritmo 3.3 sejam executadas atomicamente, ou seja, sem a possibilidade de ocorrˆencia de uma falha entre elas ou durante sua execu¸c˜ao parcial. Em geral, como o evento de envio de uma mensagem n˜ao altera o estado de um processo, pode-se obter este efeito apenas trocando a ordem das duas linhas e enviando a mensagem ap´os a grava¸c˜ao do checkpoint.

Documentos relacionados