Implemente o algoritmo Hi-ADSD. Aqui está a função c(i,s,j) implementada Utilize o vetor State[0..N-1] para armazenar informações de diagnóstico: uma entrada State[i] deste vetor é -1 se o estado do nodo i é desconhecido; 0 se o nodo i é sem-falha; 1 se o nodo i é falho. Um nodo que inicializa desconhece o estado de todos os outros, menos o seu próprio estado. Na medida em que testes são executados todos os nodos descobrem o estado dos demais. Estruture seu log de forma a mostrar quais testes vão sendo executados e qual informação é obtida dos nodos testados.
Simule a execução de um evento: um nodo sem-falha fica falho, ou vice-versa. Repita para diversos tamanhos de sistema e eventos diferentes. Em cada caso mostre: (a) a latência, isto é tempo desde a ocorrência do evento até todos os nodos completarem seu diagnóstico; (b) o número de testes executados por todos os nodos durante o intervalo da latência.
Atenção: são duas semanas de prazo, organize-se para completar de maneira adequada. Cada dia de atraso serão descontados 25% da nota.
Deve ser feita uma página Web, que contém:
Relatório HTML explicando como o trabalho foi feito (use desenhos, palavras, o que você quiser): o objetivo é detalhar as suas decisões para implementar seu trabalho.
Código fonte dos programas em C, comentados. ATENÇÃO: acrescente a todo programa a terminação ".txt" para que possa ser diretamente aberto em um browser. Exemplos: cliente.py.txt ou servidor.c.txt
Log dos testes executados: mostre explicitamente diversos casos testados, lembre-se é a partir desta listagem de testes que o professor vai medir até que ponto o trabalho está funcionando.
Acrescente às páginas do TP os programas de simulação elaborados a partir das tarefas da aula prática de simulação que ocorreram na aula de laboratório.
Para a simulação foi utilizada a biblioteca SMPL juntamente com a função c(i,s,j) fornecida pelo professor. Comparando com o trabalho anterior ADSD, pode se perceber que inicialmente eles utilizam a mesma quantidade de testes. Entretanto, quando o número de nodos aumenta, o Hi-ADSD utiliza um número significativamente menor de testes, se destacando depois dos 32 nodos.
N | Hi-ADSD | Adaptive-DSD |
---|---|---|
4 | 4 | 4 |
8 | 9 | 8 |
16 | 16 | 16 |
32 | 25 | 32 |
64 | 36 | 64 |
128 | 49 | 128 |
256 | 64 | 256 |
512 | 81 | 512 |
1024 | 100 | 1024 |
log2: Um log simples com 2 dimensões para testar o programa, inicialmente falhando no tempo 25 e restaurando no tempo 95, do total de tempo de 300. A falha ocorreu após todos os nodos sairem do estado indeterminado.
log4: Log de dimensão 4, usando os mesmos tempos de falha e recuperação do anterior, levou 15 iterações (valor próximo de n) para reconhecer todos os nodos sem falha. E a Falha foi detectada depois de 120 testes, demorando duas rodadas.
log5: Log de dimensão 5, contendo 32 nodos, falhando no tempo 25 e restaurando no 95 de 300. Identificou todos os nodos sem falha antes de completar a segunda rodada de testes, com a quantidade de 142 testes. A falha na segunda rodada já foi detectado por todos os nodos.
log10: Log de dimensão 10, contendo 1024 nodos, na segunda rodada, quando o nodo 1018 executava seus testes, foi completada a roda que verificou todos os nodos sem falha, logo em seguida no tempo qunado o nodo 1023 terminou seus testes , o nodo 2 falhou no tempo 25, na segunda rodada todos os nodos já sabiam da falha.
log12: Log de dimensão 12, contendo 4096 nodos
Log +: Acima de 12 dimensões não foi possível simular no programa.