O Linux pode limpar a memória?

10

O Linux tem um mecanismo para "limpar" a memória? por exemplo. testar a memória e marcar as áreas como sujas se elas falharem, para que o sistema possa continuar a operar "com segurança", mesmo com chips de memória RAM ruins instalados?!

    
por Waxhead 28.12.2011 / 21:40

3 respostas

1

A resposta é sim, e é feita de forma transparente (desde que você tenha memória ECC para detectar erros, e sua versão do kernel seja pelo menos 2.6.30 para continuar a operar com segurança).

Basicamente, sua memória é verificada a cada leitura do processador e limpa periodicamente *, para verificar a consistência com o ECC (Error Correcting Codes). Se um erro ocorrer, você recebe uma Exceção de Verificação de Máquina, que é então registrada e capturada pelo mcelog ( link ).

Se o erro puder ser corrigido, ele incrementará um contador "leaky bucket", o que faz com que um DIMM físico que falha com frequência seja substituído de forma transparente por outro. Assim, sua página de memória é copiada para um novo local, seu endereço de memória virtual é atualizado para apontar para a nova página, e a página antiga é marcada pelo sistema operacional para não ser mais usada.

Isso é chamado de "soft-offlining" no Linux (e desativação da página de memória no Solaris, eu não sei sobre outros sistemas operacionais).

Se o erro não puder ser corrigido, o que é chamado de "hard-offline" acontece, isto é, sua página de memória é removida do gerenciamento normal de memória do sistema operacional e seu aplicativo é eliminado (NB: por algum sinal SIGBUS disponível) diz-lhe onde o erro aconteceu, mas é raro o suficiente não se importar e tentar pegá-lo). Se a sua página de memória é mapeada de um arquivo e limpa, o sistema operacional também pode recarregá-la de forma transparente em outro local físico, em vez de eliminar o processo.

Você pode ler mais sobre o mcelog, existem muitas opções de configuração, você pode obter outros comportamentos a serem acionados, opções e outros leads sobre o que ler e como certificar-se de que o mcelog está sendo executado em seu sistema.

* Scrubbing, ou "Patrol Scrubbing" consiste em ler a memória, verificar erros no ECC e sobrescrever com as palavras de memória corrigidas quando um erro é descoberto. O termo scrubbing de patrulha é usado por oposição à sobrescrita de dados incorretos sobre erros em leituras de memória, que às vezes é chamado de "Demand Scrubbing". Esfregar é um procedimento de hardware que pode ser ativado, geralmente por meio do BIOS.

    
por 11.11.2014 / 12:43
7

Esta é realmente uma má ideia. A memória não pode ser testada de forma confiável em uma varredura rápida. É por isso que softwares como o memtest86 usam múltiplos passos com padrões de bit diferentes para testar a memória. Solução:

  1. Teste a memória com memtest86 , de preferência um teste longo, deixe-o funcionando durante a noite, vai demorar muito tempo.

  2. Se uma memória ruim for detectada, use o parâmetro de kernel memmap para forçar kernel não use essa memória:

   memmap=nn[KMG]$ss[KMG]
            [KNL,ACPI] Mark specific memory as reserved.
            Region of memory to be used, from ss to ss+nn.
            Example: Exclude memory from 0x18690000-0x1869ffff
                     memmap=64K$0x18690000
                     or
                     memmap=0x10000$0x18690000

Além disso, você pode usar memória ECC que corrigirá erros de 1 bit e detectará erros de 2 bits em sua memória automaticamente (e você obterá mensagens de log do kernel sobre problemas de memória incorrigíveis, se acontecerem)

    
por 28.12.2011 / 21:58
2

O post e a resposta entendem mal o problema. A limpeza de memória destina-se a impedir que erros de bit único corrigíveis se transformem em erros duplos incorrigíveis. O purificador apenas toda a memória física (forçando o cache a falhar) ocasionalmente. Se houver algum erro de bit único, ele será corrigido (e a correção deve reescrever o valor correto usando uma comparação e uma troca), eliminando o erro.

Caso contrário, se ocorrer um segundo erro em uma palavra que já tenha um erro, a palavra inteira será incorrigível e o sistema operacional terá que fazer algo drástico.

A depuração é importante porque, sem ela, a memória que é lida, mas não escrita (como as páginas de código), pode acumular erros ao longo do tempo.

    
por 13.06.2013 / 15:51