Como colocar na lista negra um setor de RAM defeituoso correto de acordo com a indicação de erro MemTest86 +?

MemTest86 + (a versão incluída no Ubuntu 13.04) diz

Failing address: 002f796c48 - 759.5 MB 

O que devo especifique no memmap parâmetro do kernel para ignorar esta área?

Eu tentei executar memtester 770MB e ele diz tudo está ok, então não parece que as indicações do MemTest significam um erro nos 759,5 MB desde o início.

Como interpretar esta indicação do MemTest para configurar memmap?

Não tenho dinheiro para comprar uma nova RAM agora e o erro parece ser único, então espero poder substituí-lo.

Comentários

  • FWIW, o kernel marcará certas páginas como sendo ” reservadas ” se detectar um segmento inválido mas é capaz de se recuperar. A saída de ” free -m ” mostra potências de dois para os totais? Menciono isso como um maneira de explicar porque o memtester pode não vejo a RAM danificada, mas memtest86 + pode.
  • Não ‘ t parece com potências de dois na realidade: i.stack.imgur.com/l86L1.png
  • No momento em que um erro é detectado (se você tiver ecc ram), geralmente é tarde demais. Além disso, o free -m nunca relata uma potência uniforme de dois, já que o BIOS e o kernel reservam alguma memória RAM.
  • Eu sonho em comprar um laptop ECC, mas nunca consegui encontrar ofertas disponíveis, parece que eles não = “3a2c73cbe2”>

não existe.

  • Parece que o kernel também printk ‘ s quando encontra uma página inválida (linha 264-265).
  • Resposta

    memmap

    Existe este tutorial intitulado: Bad Memory HowTo que discute a desativação de memória por meio do kernel usando o memmap argumento para o kernel. De acordo com o howto, você tem 2 opções quando se trata de memmap:

    • Desligue tudo após a memória ruim – (mem=###M option)
    • Desligue apenas a memória em torno da memória ruim – (memmap=#M$###M option)

    Com a primeira opção, se memtest relatar que há memória ruim em 600M, então você pode desabilitar a RAM daquele ponto até o final da RAM com isto:

     mem=595M 

    Se houver ” s RAM ruim em 802M e 807M, você pode desabilitar uma seção de 10M de RAM começando em 800M assim:

    memmap=10M$800M 

    OBSERVAÇÃO: Isso colocará na lista negra os 10M após o endereço base de 800M. Você deve executar memtest86+ depois para confirmar que este argumento é correto.

    BadRAM

    Há um patch disponível para o Ubuntu chamado BadRam. Ele é muito bem abordado aqui neste post intitulado: BadRAM na comunidade Ubuntu site.

    Depois de aplicar o patch ao kernel usando os detalhes dessa página, você faz modificações na configuração do Grub2:

    trecho desse site para o Grub2

    O arquivo de configuração GRUB2 no Natty tem uma linha para configurar exclusões de memória ram do kernel. Portanto, assumirei que essa é a maneira preferida de mapear uma seção da memória que está mostrando erros. A linha que defini foi

    GRUB_BADRAM = “0x7DDF0000,0xffffc000”

    A forma sugerida em todos os sites que pude encontrar foi definir isso para executar memtest86 e deixá-lo mostrar a você o Configurações de BadRAM. memtest86 me deu uma página de coisas que eu teria que inserir. Pude ver que todos os endereços estavam em um bloco de 16K, então eu só queria mapear esse bloco de 16K fora de ação. Aqui está como eu gerei a entrada correta.

    O primeiro parâmetro é fácil. Esse é o endereço básico da memória ruim. No meu caso, pude ver que todos os endereços inválidos eram maiores que 0x7DDF0000 e menores que 0x7DDF4000. Portanto, tomei o início do bloco de 16K como meu endereço inicial.

    O segundo parâmetro é uma máscara. Você coloca 1s onde o intervalo de endereços que você deseja compartilha os mesmos valores e 0s onde ele irá variar. Isso significa que você precisa escolher seu intervalo de endereços de forma que apenas os bits de ordem inferior variem. Olhando para o meu endereço, a primeira parte da máscara é fácil. Você quer começar com 0xffff. Para o próximo nibble, explicarei com mapas de bits. Eu quero variar de 0000 a 0011. Então, a máscara para badram seria 1100 ou um hexadecimal c. Os últimos 3 nibbles precisam ser todos 0s na máscara, já que queremos todo o intervalo mapeado. Portanto, obtemos um resultado total de 0xffffc000.

    Depois de definir esta linha em / etc / default / grub, executei sudo update-grub e reiniciei e minha memória ruim não estava mais sendo usada. Nenhum patch de kernel é necessário para mapear a memória ruim usando esse método.

    Acompanhamento # 1

    Olhando através da página wikipedia para memtest86 +, consta o seguinte:

    excerto da página wikipedia do Memtest86

    A partir do Memtest86 2.3 e Memtest86 + 1.60, o programa pode gerar uma lista de regiões de RAM ruins no formato esperado pelo patch BadRAM para o kernel Linux; usando essas informações, um sistema Linux pode usar um módulo de RAM de maneira confiável, mesmo que tenha alguns bits ruins. Grub2 é capaz de fornecer essas mesmas informações a um kernel sem patch, negando a necessidade do patch BadRAM.

    Também me deparei com isso Página do Gentoo que especificou o memmap=... usando um endereço hexadecimal, então você poderia especificá-lo assim:

    memmap=5M$0x2f796c48 

    O 5M é apenas um palpite, obviamente você pode ajustá-lo para mais ou para menos dependendo de quanta memória RAM na região você deseja / precisa omitir.

    Finalmente, você também pode especificar o tamanho em hexadecimal:

    memmap=0x10000$0x2f796c48 

    Ignoraria 64 KB “s começando no endereço 0x2f796c48.

    Referências

    Comentários

    • ” 800M a 804M ” deve ser ” 800M a 810M ” I suponha …
    • Pode ser, mas o que escrevi também está OK, embora ‘ esteja jogando fora mais memória do que os 4M entre 800M e 810M.
    • 1. Eu sei sobre a opção memmap, mas a questão é mais sobre como interpretar a saída memtest86 +. Eu dei um exemplo específico de saída memtest86 + e pergunto para obter ajuda na configuração de memmap de acordo neste caso específico. 2. Você deve executar memtest86 + depois para confirmar que este argumento está correto. ” – memtest86 + é executado antes de um kernel do sistema operacional, então eu duvido seriamente a opção memmap do kernel Linux pode afetá-lo.
    • @Ivan, 1. Achei que fosse óbvio, dados os exemplos que incluí, mas você ‘ d precisa dizer algo como: memmap=5M$759M para o seu caso específico, dado memtest86 + está falhando em 759,5 MB. 2. Eu quis dizer que você deve passar a opção memmap=... para memtest86 + também. Isso não foi testado / não confirmado por mim, mas algo que você pode fazer com memtest86 +.
    • Ok, obrigado. Eu não tinha certeza do que ” 002f796c48 – 759,5 MB ” significa (talvez pudesse ser 759,5 megs após o endereço 002f796c48 ou algo parecido ) e nunca suspeitei que pudesse passar os parâmetros do kernel do Linux para MemTest86 + (pensei que não tinha nada a ver com o Linux).

    Resposta

    Memtest86 + (eu usei 4.20) pode gerar um formato badram diretamente.

    1. Pressione “c” para chegar ao diálogo de configuração diálogo de configuração do memtest

    2. Em seguida, “4” para “Modo de relatório de erros”

      diálogo do modo de relatório de erros memtest

    3. Então “3” para “Padrões BadRAM”

    A saída mudará de uma lista de falhas de teste individuais para uma série de badram = linhas, cada uma contendo mais um novo setor defeituoso. Como as linhas se juntam e aglutinam os segmentos adjacentes, você pode apenas executar o teste sem cabeça durante a noite e usar a linha impressa final (embora se você tiver um dimm muito ruim o formato menos preciso “5 megas em torno deste ponto” provavelmente será um pouco menor ).

    Resultado final:

    Memtest86 + mostrando a saída do badram

    Comentários

    • Agora, se eu não ‘ tivesse que copiar manualmente e, em vez disso, entregá-lo ao GRUB sem erros de digitação, isso seria fantástico.
    • O que fiz foi tirar uma foto dele (celular com câmera), carregá-lo no GIMP, = > grayscale = > invert = > contrast / gamma e, em seguida, passe-o para tesseract ${IMG} stdout .. então verificou e corrigiu a linha antes de inserir em / etc / default / grub … Provavelmente demorou tanto quanto inseri-lo manualmente imediatamente ^^
    • Definitivamente mais divertido do que manualmente embora ugh

    Resposta

    Muito suja e muito boa solução alternativa: execute um memtester de espaço do usuário, espere até que encontra um erro. Deixe, por exemplo, em 0xfce2ea31.

    Em seguida, execute novamente o memtester, mas nesse endereço físico, então:

    memtester -p 0xfce20000 64k 128 

    Para ser claro, é melhor sacrificar mais do que a página do endereço problemático.Aqui, sacrificamos 64kByte em torno do endereço defeituoso.

    Se tudo correr bem, ele encontrará o local da memória defeituosa, muito mais rapidamente, novamente.

    Em seguida, suspenda o processo do memtester com um ctrl / z.

    Conseqüência: até que o processo do memtester seja suspenso, não levará mais recurso, mas nenhum outro processo será capaz de acessar a memória defeituosa . Porque será alocado pelo memtester.

    Particularmente útil em grandes servidores remotos. O processo suspenso pode fique até que a nova RAM não seja enviada. Ou talvez até o próximo Natal, quando um tempo de inatividade não será tão grande problema.

    Comentários

    • Em vez desse truque, você também pode usar a ferramenta chmem no util-linux para dizer ao kernel para colocar um determinado intervalo de memória offline (movendo os dados para outro lugar e nunca reutilizando as páginas) .
    • @TooTea Tentei essa ferramenta em várias máquinas e não conseguiu eactivate um único bloco de memória.

    Deixe uma resposta

    O seu endereço de email não será publicado. Campos obrigatórios marcados com *