290 likes | 378 Views
Universidade da Beira Interior. Fiabilidade de Sistemas Informáticos Nuno Magarreiro n.º 14805. Memória Estável. Índice: Introdução Definição do problema Métodos de implementação: Usando um único disco Disk Shadowing RAID (Redudant Arrays os Disks). Introdução.
E N D
Universidade da Beira Interior Fiabilidade de Sistemas Informáticos Nuno Magarreiro n.º 14805
Memória Estável • Índice: • Introdução • Definição do problema • Métodos de implementação: • Usando um único disco • Disk Shadowing • RAID (Redudant Arrays os Disks)
Introdução • Assume-se que um sistema possui memória estável quando os seus conteúdos são preservados depois da ocorrência de falhas. • Nestes sistemas, o conteúdo do disco é frequentemente copiado para sistemas de armazenamento secundários. • Os discos não são uma forma muito segura de memória estável. • Para sistemas de tolerância a falhas, a confiança que a memória estável feita por um disco normal proporciona não é aceitável.
Definição do problema • O problema principal é ter sistemas de armazenamento físico que têm várias falhas e convertê-los num sistema de armazenamento de memória estável. • Nenhum sistema consegue ser completamente tolerante a falhas. • Para uma melhor percepção do problema vai-se estudar primeiro o sistema físico no qual a memória estável será construída, assim como as falhas existentes neste sistema físico. • A memória estável normalmente é construída com sistemas de discos.
Definição do problema • O sistema de armazenamento dum disco é constituído por um conjunto de páginas. • Cada página possui blocos de informação e a cada bloco está associado um estado. • O estado por ser correcto ou incorrecto, indicando se a informação nesse bloco é correcta ou se está corrompida. • Se o estado dum bloco for incorrecto, a tentativa de leitura desse bloco pelo sistema pode não ser conseguida com êxito.
Definição do problema • Existem duas operações através das quais o processador (ou um processo) pode interagir com o disco: • procedure write (addr, data) • procedure read (addr) returns (status, data). • A operação de escrita possui dois parâmetros: • A localização do sector (addr) e • A informação que deve ser escrita nesse sector. • Esta operação não devolve qualquer valor. • A operação de leitura possui um parâmetro: • A localização do sector que vai ser lido. • Esta operação devolve a informação desse sector assim como o estado da operação.
Definição do problema • Existem vários tipos de falhas que podem ocorrer num sistema de discos. • Algumas das mais comuns são: • Falhas transitórias • Sector danificado • Falha de um controlador • Crash do disco
Definição do problema • Ainda existem outras causas possíveis que provocam falhas no disco. • Os acontecimentos que ocorrem no disco podem ser resultado de operações de escrita ou de leitura ou ainda de outros eventos. • Alguns destes eventos são desejáveis mas outros são indesejáveis. • Para se ter memória estável, devem-se conseguir disfarçar os acontecimentos indesejáveis.
Definição do problema • Os resultados indesejáveis que podem acontecer numa operação de leitura são: • Soft read error: O estado da página a é correcto, mas a operação de leitura devolve incorrecto. • Erro de leitura persistente: O estado da página a é correcto mas a operação de leitura devolve incorrecto, e as leituras seguintes também devolvem incorrecto. • Erro indetectável: O estado da página a é incorrecto mas a operação de leitura devolve correcto, ou então o estado da página a é correcto, e a operação de leitura devolve informação errada.
Definição do problema • Os resultados indesejáveis para uma operação de escrita (addr, data) são: • Escrita nula: A página a não é alterada. • Escrita incorrecta: Se se tentar ler a pagina é devolvido (incorrecto , d’). • Para além dos erros descritos existem ainda os decaysevents que também provocam falhas no disco.
Definição do problema • Decay event: Erro provocado pela falha de um componente que na grande maioria das vezes funciona correctamente. • Decay set: Conjunto dos erros causados por um decay event. • Decay related: Duas páginas são decay related se ambas são afectadas por erros que pertencem ao mesmo decay set. • Os decays events raramente acontecem.
Definição do problema • Para implementar uma aproximação de memória estável com um único disco, assume-se que é possível dividir o disco em pares de páginas que não são decay related. • Consideram-se os seguintes decay events: • Corrupção: Uma página varia de (correcto,d) para (incorrecto,d). • Recuperação: Uma página passa de (incorrecto,d) para (correcto,d) • Erro não detectado: a página muda de (s,d) para (s,d´) com d diferente de d´.
Definição do problema • É importante salientar que: • Os resultados de qualquer operação que esteja a ser executada quando ocorre uma falha são imprevisíveis. Se ocorrer uma falha quando alguma operação está a ser efectuada no disco, o resultado dessa operação deve ser considerado indesejável. • O objectivo dos sistemas de memória estável é ter um ou mais discos de armazenamento que podem falhar duma das várias maneiras anteriormente descritas e, com eles, construir um sistema onde as operações essenciais do disco (como a leitura e a escrita) continuem a funcionar depois da ocorrência de erros.
Implementação • De seguida vão ser apresentados alguns métodos que proporcionam uma aproximação à memória estável usando discos de armazenamento. • Estes métodos, tal como todas as técnicas de suporte a falhas, apenas conseguem fornecer aproximações do que seria ideal. • Estes métodos apenas suportam alguns tipos de falhas (os que, na prática, ocorrem com mais frequência).
Implementação • Usando um único disco • Primeiro, vai-se construir um “Careful disk storage” com duas operações: CarefulRead e CarefulWrite. • Na CarefulRead, a leitura é repetida até o valor devolvido para o estado ser correcto ou, depois de um certo número de tentativas, se concluir que a página não poder ser lida. • Na CarefulWrite a operação de escrita é seguida da operação de leitura até ser devolvido o estado correcto. • Assim eliminam-se a escrita nula e os erros de escrita incorrecta mas não se anulam os decay events nem os erros durante a operação de CarefulWrite.
Implementação • Usando um único disco • A memória estável é representada por um par ordenado de páginas do disco, não podendo estas páginas ser decay related. • A informação da página é duplicada para ambas as páginas deste par. • Com isto, podemos implementar as operações StableReade StableWrite:
Implementação • Usando um único disco • A StableRead faz uma CarefulRead para uma das páginas do par, e se o resultado for mau, faz uma CarefulRead para a outra. • A StableWrite primeiro faz uma CarefulWrite para uma das páginas representativas. Quando a operação é completada com sucesso, é feita uma CarefulWrite para a outra página. • Assim resolve-se o problema dos decay events.
Implementação • Usando um único disco • De qualquer modo, os crashes durante a StableWrite podem causar duas páginas representativas diferentes. • Para se estar protegido desta situação, deve ser feita uma operação de limpeza. • Esta acção é feita para todas as páginas pelo menos aquando da inicialização do sistema e depois de cada erro. • A operação de limpeza consiste em:
Implementação • Usando um único disco Efectuar a operação de CarefulRead para as duas páginas. Se ambas devolverem o estado correcto e a mesma informação Não se faz nada Else Se apenas uma página devolver o estado incorrecto Efectuar a operação de CarefulWrite para escrever a informação da página com estado correcto para a página com estado incorrecto Else Se as duas páginas devolvem o estado correcto mas informação diferente /* é porque ocorreu um erro durante a StableWrite */ Escolher uma das duas páginas e fazer uma CarefulWrite para a outra.
Implementação • Usando um único disco • Limitações: • Apesar desta implementação para memória estável conseguir suportar acontecimentos indesejáveis como soft read error, escrita nula, má escrita e o erro de leitura persistente (apenas se só uma das páginas representativas tiver estes erros) não consegue proteger-se de acontecimentos como um crash do disco. • Embora as inconsistências causadas pela falha dum controlador poderem ser protegidas, a informação armazenada é inútil para todos os outros processos até que o processo que sofreu o erro seja recuperado.
Implementação • Disk Shadowing (ou Disk Mirroring) • Disk shadowing é, essencialmente, uma implementação do esquema descrito anteriormente, no qual duas paginas representativas da memória residem em dois discos diferentes (e, consequentemente, satisfazem o facto de não estarem decay related). • O principal objectivo é aumentar a confiança e a disponibilidade do armazenamento secundário. • Vai ser considerado o caso em que são usados apenas dois discos. Neste caso, os discos são chamados de discos espelho.
Implementação • Disk Shadowing (ou Disk Mirroring) • Um ou mais processos/processadores podem ser ligados aos discos espelho. Quando um processo/processador escreve informação, esta é escrita nos dois discos espelho. Os pedidos de leitura são executados a partir de qualquer um dos discos. • Disk mirroring consegue suportar falhas do disco completo e permite aceder à informação do disco enquanto o processo/processador que falhou está a ser reparado. • Assim, a utilização de discos espelho proporciona uma boa aproximação à memória estável. Mas deve ficar claro que este não é um exemplo perfeito de memória estável uma vez que não é suportado o facto dos dois discos falharem.
Implementação • Disk Shadowing (ou Disk Mirroring) • Com a utilização de discos espelho, apenas ocorre uma falha no sistema de memória estável se falharem os dois discos. Especificamente, se um disco falha, e o outro falha antes do primeiro estar arranjado. • Se o tempo médio para a falha dum disco for MTTF, e o tempo médio para o reparar for MTTR, e se o tempo para a falha e o tempo para a reparação estiverem distribuídos exponencialmente, então o tempo médio entre falhas dos discos espelho pode ser dado pela expressão: • MTTF mirror = (MTTF/2) * (MTTF / MTTR).
Implementação • Disk Shadowing (ou Disk Mirroring) • Intuitivamente, a equação diz que, na média, a primeira falha acontecerá depois de MTTF/2 e MTTF/MTTR refere a probabilidade do segundo disco falhar enquanto o primeiro está a ser reparado. Se o MTTF de um disco for 100 dias, e o tempo necessário para o arranjar 1 dia, então o tempo médio para o sistema de discos espelho falhar é de 5000 dias (aproximadamente 14 anos). Claramente, se se usarem discos de confiança então o sistema de discos espelho proporciona uma boa aproximação de memória estável.
Implementação • RAID (Redudant Arrays of Disks) • Os sistemas RAID são um método com boa relação qualidade/preço para simular discos de grande capacidade. • Nestes sistemas, a informação é dividida pelos múltiplos discos usando bit-interleaving. • Bit-interleaving proporciona uma boa performance de I/O, desde que o acesso aos diferentes discos possa ser feito em paralelo. • Mesmo assim, um conjunto de discos usado desta maneira só é de confiança se a falha de um dos discos não provocar que toda a informação se torne inacessível.
Implementação • RAID (Redudant Arrays of Disks) • A solução passa por ter alguns discos com informação redundante. • De seguida vai-se descrever uma implementação particular de RAID que, para cada grupo de discos, utiliza apenas um disco de verificação. • Nesta implementação os discos estão divididos em grupos. • Os discos redundantes armazenam a paridade do conjunto de bits dos discos de dados do grupo.
Implementação • RAID (Redudant Arrays of Disks) • A falha de qualquer disco pode ser completamente ocultada desde que o disco que falha consiga descobrir que efectivamente falhou. • Com isto, a informação do disco que falhou pode ser reconstruída através do cálculo da paridade dos restantes discos de dados e comparando-a com a paridade que está armazenada no disco de verificação. • É claro que este método de implementação RAID consegue suportar a falha dum único disco. • Nesta implementação, a falha do sistema RAID acontece apenas se mais de um disco falhar.
Implementação • RAID (Redudant Arrays of Disks) • Assumindo que o sistema RAID consiste apenas num único grupo de discos, com G discos de dados e C discos de verificação (total de discos: C + G) e se o tempo de falha e de recuperação de cada disco for distribuída exponencialmente, e o tempo médio de falha de cada disco for MTTF e o tempo de reparação for MTTR, então o tempo médio de falha do grupo (RAID) pode ser dado por: • MTTF raid = (MTTF / (G+ C)) * (MTTF / (G + C -1)) / MTTR . • O primeiro termo é o tempo médio de falha do primeiro disco, em que o tempo médio de falha dum disco é dividido pelo numero total de discos.
Implementação • RAID (Redudant Arrays of Disks) • O segundo termo relaciona a probabilidade de qualquer outro disco falhar antes do primeiro disco estar arranjado. • Se o MTTF dum disco for 100 dias, e o tempo de reparação for de 1 dia, e existirem 4 discos de dados e 1 disco de verificação, então o MTTF do grupo é de 500 dias. • Claramente, esta implementação do sistema RAID, proporciona uma aproximação fraca á memória estável.