Tolerância a falhas

Redundância

NMR (N-Modular Redundancy)

Essa técnica consiste em replicar o hardware utilizado para processamento das informações em N módulos paralelos ligados a um sistema de votação como a figura que segue:

Essa replicação do hardware gera processamento paralelo em que as saídas geradas são direcionadas a um circuito de votação que retorna a resposta da maioria, gerando apenas uma saída no sistema. Essa forma de construção evita que falhas em apenas um dos componentes gere erros no sistema, pois esta falha será encoberta pelo restante do hardware redundante no circuito de votação. Essa técnica, porém,é vulnerável a falha em múltiplos módulos e é vulnerável no sistema de votação pois o mesmo é um ponto central de falha.

O NMR é uma especialização de construções lock-step, que baseam-se na computação redundante paralela e comparação para verificação de falhas nos módulos. Além desta, o NMR possui implementações com suporte a stand-by sparing.

TMR (Triple Modular Redundancy)

O modelo NMR possui implementações bastante utilizadas na indústria, como o TMR (Triple Modular Redundancy). Este, é uma versão do NMR com 3 módulos de hardware redundantes com o uso de sistema de votação[1] ou não. Como mostrado em [2] o uso de implementações NMR sem sistema de votação vem sendo feita atualmente e demonstrado um desempenho e confiabilidade superiores pois retiram o ponto crítico de falha do sistema que é o circuito de votação, que, apesar de simples, limita a confiabilidade do sistema à sua própria. Em particular, sistemas SMR (Siftout Modular Redundancy) [3] tem-se mostrado mais eficientes e provêm sistemas de redundância 2-out-of-n possuindo um sistema de recuperação bastante simples. Uma outra solução para aumentar a confiabilidade dos sistemas com circuito de votação é a replicação do circuito de votação na ordem de N do NMR.

2MR (2-Modular Redundancy)

Outra forma bastante utilizada no mercado é o 2MR(2-Modular Redundancy) [4]. Nesta, o hardware é apenas duplicado e através de comparação entre as saídas é possível evitar que saídas com falha sejam propragadas e gerem defeitos no sistema. porém, esta não é capaz de gerar saída válida caso um dos dois módulos falhe. Este tipo de implementação tolerante à falhas é chamado de fail-silent pois apenas evita que o erro seja propagado, porém interrompe a atividade normal do sistema em caso de erro. Segue ilustração:

Mid-value Selection

Em muitos sistemas as saídas geradas pelos módulos podem variar muito, como em cálculos com pontos flutuantes, nestes sistemas é aconselhado o uso de uma técnica chamada Mid-value selection. Esta técnica resume-se ao cálculo da mediana das diversas saídas dos módulos e usá-la como saída válida do sistema. Este tipo de implementação também pode incluir valores limites aceitáveis para saída, de modo a poder eliminar módulos defeituosos que estejam gerando saídas muito distoantes do esperado. É bastante utilizado em sistemas que fazem uso de sensores analógicos.

Flux Summing

A técnica Flux-summing[5] basea-se na correção dos sistemas de entrada à partir da saída mais votada do sistema, através de uma reentrada das saídas como entrada, como segue a figura:

Como pode ser observado, a saída gerada no sistema de votação é usada como recarga em todos os módulos do sistema para fins de correção em tempo de execução. Flux summing também pode ser aplicado sem o sistema de votação, sendo utilizado o comportamento do sistema como entrada para os módulos do mesmo.

Standby Sparing

Standby Sparing, também conhecida como Standby Replacement, é a técnica em que um ou mais módulos ficam em standby enquanto o módulo principal está operacional. Em caso de detecção de erro, o módulo principal é descartado e substituído por um módulo previamente em stanby. O standby sparing pode ser classificado em hot standby e cold standby. Na primeira classificação, os módulos redundantes que estão em standby ficam funcionando em sincronia com o módulo operacional, sem que sua computação seja considerada no sistema, e, caso uma falha seja detectada, o mesmo está pronto para se tornar operacional imediatamente. Já no cold standby os módulos redundantes ficam desligados e apenas quando uma falha ocorre é que os mesmos serão ativados. Sistemas com standby sparing do tipo cold standby necessitam de mais tempo para recuperação, em relação ao hot standby, porém possuem a vantagem do menor consumo de energia e de não desgastarem os sistemas em standby.

As técnicas de sparing podem ser também utilizadas em conjunto com as técnicas de redundância, como o NMR[6]. Neste caso, o hardware replicado é posto em paralelo ao bloco central de módulos e substitui módulos defeituosos em caso de falha, recompondo o módulo N. Como uma extensão ao NMR com sparing, existe a técnica triple-duplex ou N-duplex, em que cada módulo do TMR ou NMR, respectivamente, é acompanhado de um módulo em hot-standby e as saídas de cada módulo e seu par em stanby são comparadas antes de seguir para o sistema de votação. Esta técnica híbrida facilita a localização e correção rápida de falhas.

N Versão

Além de técnicas de replicação de hardware, também existem técnicas de replicação de software, como a técnica de N-Versões. Nesta, N equipes são destacadas, e isoladas entre si, para o desenvolvimento de software com as mesmas especificações para todas as equipes. Os códigos gerados por cada uma das equipes tendem a ser diferentes entre si em implementação. Logo, a probabilidade de falha na programação dos componentes é diminuída tornando o sistema mais confiável. Nesta técnica, cada código gerado é executado em processadores paralelos e as saídas dos módulos passam pelo sistema de votação, para detectar possíveis erros de programação ainda remanescentes. Esta técnica é utilizada basicamente na detecção de erros lógicos no software, partindo do preceito que o hardware não apresenta falhas de projeto. Como visto, esta técnica é similar ao NMR e pode tolerar até n-1/2 falhas.

N-Self-Checking Programming

Uma extensão à técnica N-Versões é a N-Self-Checking Programming, em que, da mesma forma que a N-Versões, N equipes são destacadas e isoladas para implementar um software com uma única especificação, porém, as equipes também desenvolvem um módulo de verificação de corretude lógica do próprio código. O software desenvolvido pelas equipes será executado em processadores diferentes paralelos e as saídas dos módulos serão submetidas à verificação de corretude, sendo selecionada uma saída, que haja passado na própria verificação de corretude. Segue ilustração desta técnica:

Blocos de Recuperação

Outra extensão à técnica N-Versões é a técnica de blocos de recuperação. Nesta técnia, N equipes são destacadas e isoladas para implementar um software com uma única especificação. As versões de módulos gerados pelas equipes são postas em paralelo, porém, com apenas uma das versões em operação. A saída da versão em operação é submetida a um teste de corretude. Em caso de detecção de erro na versão, a mesma é descartada e a próxima versão passa a ser executada pelo hardware, tornando-se operacional. Ocorre uma falha no sistema caso nenhuma das versões passe na verificação de corretude.