• Nenhum resultado encontrado

Capítulo 4 4 Sistemas de Arquivos Robustos: Estado da Arte

4.3 Rio File Cache

O principal objetivo do Rio File Cache [CNR+96] é tornar a memória RAM capaz de sobreviver a crashes de sistema operacional. Para isso, o trabalho adota duas linhas de ação: impede que a memória seja sobregravada acidentalmente pelo sistema, durante um

crash, e provê o sistema de um mecanismo de recuperação do tipo “warm reboot”.

4.3.1 Proteção de Memória

O mecanismo de proteção de memória do Rio File Cache fundamenta-se no controle de acesso às páginas da cache: utiliza uma técnica denominada “code patching”, que impede que rotinas não-autorizadas gravem dados na cache. Essa técnica é implementada através da alteração do código do núcleo do sistema operacional. Todas as rotinas do núcleo, que gravam dados na memória, são acrescidas de instruções que verificam se o endereço de armazenamento é de uma página de cache. Somente as rotinas de manipulação de cache têm permissão explícita para gravar dados na área de cache. A utilização do mecanismo de

4.3.2 Mecanismo de Recuperação

O mecanismo de recuperação do Rio File Cache pressupõe que o sistema é capaz de preservar, por algum tempo, o conteúdo da memória principal e da cache de processador, após um reinício normal do sistema. Assim, depois de um crash, o sistema atualiza o sistema de arquivos com o conteúdo presente na cache. O sistema mantém e protege uma área de memória chamada registro, contendo as informações necessárias para localizar, identificar e restaurar dados e metadados de arquivos, a partir dos buffers da cache. A recuperação é realizada em duas fases:

• logo que o sistema reinicia, o mecanismo de recuperação grava todo o conteúdo presente na memória principal, antes do crash, na partição de permuta do disco. A seguir, grava os metadados atualizados no sistema de arquivos do disco, usando para isso os endereços de disco armazenados no registro. Assim, o sistema de arquivos fica intacto antes do programa de recuperação fsck ser executado;

• quando o sistema finaliza todos os procedimentos de reinício, um processo, no nível de usuário, analisa os dados gravados na partição de permuta e restaura o conteúdo da memória principal.

4.3.3 Efeitos no Projeto de Sistema de Arquivos

O Rio File Cache operou algumas alterações no comportamento do sistema de arquivos, para reduzir a freqüência de operações de saída para disco: a gravação periódica dos dados em cache foi desabilitada; a rotina panic foi modificada, evitando gravar dados para disco antes de um provável crash. As rotinas sync e fsync foram alteradas para retornar imediatamente, sem forçar a gravação síncrona de dados. Assim, as operações de escrita para disco passaram a ocorrer somente durante a substituição de páginas de memória.

Adicionalmente, o Rio File Cache possibilitou a ordenação das alterações de metadados na

cache, do mesmo modo como é feito nas operações de escrita em disco, minimizando a

possibilidade de produzir inconsistências durante um crash.

Esse sistema conseguiu, também, aplicar atomicidade à escrita de metadados críticos, utilizando um esquema de cópias de páginas: antes de alterar uma página da cache contendo metadados críticos, o sistema copia o seu conteúdo, numa nova página de memória, e faz com que o registro aponte para essa cópia; quando a operação termina, o sistema faz com que o registro volte a apontar para a página original da cache, com os metadados já alterados.

4.3.4 Suporte de Arquitetura Necessário

A memória do sistema e a cache do processador devem ser capazes de preservar seus respectivos conteúdos, após um reinício normal do sistema. Equipamentos do tipo DEC Alphas possuem essa característica [DEC94]. No entanto, a maioria dos computadores não possui essa facilidade.

O mecanismo de proteção causa um impacto negativo no desempenho do sistema: as rotinas do núcleo precisam executar instruções adicionais de verificação, toda vez que vão escrever dados na memória, para assegurar que apenas as rotinas de manipulação de cache gravem dados na área de cache. Otimizações de código foram implementadas, com o objetivo de minimizar esse impacto.

Para tornar o mecanismo de proteção simples e eficiente, seria necessário um suporte de hardware, para implementar um controlador de memória capaz de impedir escritas não-autorizadas em certas páginas físicas [BMR+91], nesse caso, as páginas de cache. Uma implementação simples desse controlador pode ser realizada, acrescentando-se a cada página de memória um bit de permissão de escrita e mapeando as permissões no espaço de endereçamento do processador [CNR+96]. Assim, o sistema poderia utilizar os bits de permissão de escrita para substituir o esquema de “code patching” do mecanismo de proteção.

4.3.5 Resultados e Análise Crítica

O Rio File Cache consegue, de fato, tornar a memória principal apta a sobreviver a crashes de sistema operacional [CNR+96]. A confiabilidade atingida, mesmo sem o mecanismo de proteção de memória, é equivalente a de um sistema de arquivos que adota a política de

cache write through, enquanto seu desempenho é vinte vezes maior. O Rio torna todas as

operações de escrita imediatamente permanentes e ainda executa mais rápido do que sistemas como o UNIX FFS, que adotam a política de Propagação Retardada dos dados da

cache para o disco. O mecanismo de proteção de memória pode ser utilizado para tornar o

sistema ainda mais confiável, causando, entretanto, uma queda no desempenho.

Apesar dos resultados obtidos com esse trabalho serem bastante positivos, o sistema depende da disponibilidade de um hardware especial, que não é comum nos computadores utilizados em larga escala. A adaptação de um sistema distribuído, de modo que todos os computadores contenham esse recurso, implica em altos custos. Portanto, o Rio File Cache não consegue prover armazenamento estável de dados a um custo acessível.

4.4 Sistema de Armazenamento em Memória Não-Volátil