memmap
Existe este tutorial intitulado: HowTo Bad Memory, que discute a desativação da memória através 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 o memtest relatar que há memória ruim em 600M, você poderá desativar a RAM desse ponto até o final da RAM com isso:
mem=595M
Se houver RAM ruim em 802M e 807M, você pode desativar uma seção de 10M de RAM, começando em 800M, assim:
memmap=10M$800M
NOTA: Isso colocará na lista negra os 10M após o endereço base de 800M. Você deve executar memtest86+
posteriormente para confirmar que esse argumento está correto.
BadRAM
Existe um patch disponível para o Ubuntu chamado BadRam. Está bem coberto aqui neste post intitulado: BadRAM no site da comunidade Ubuntu.
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 Grub2
O arquivo de configuração do GRUB2 no Natty tem uma linha para configurar exclusões de ram incorreta do kernel. Portanto, assumirei que essa é a maneira preferida de mapear uma seção da memória que está mostrando erros. A linha que estabeleci foi
GRUB_BADRAM = "0x7DDF0000,0xffffc000"
A maneira sugerida em todos os sites que pude encontrar foi definir isso: executar o memtest86 e mostrar as configurações do BadRAM. memtest86 me deu uma página de coisas que eu teria que entrar. 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 base da memória ruim. No meu caso, pude ver que todos os endereços incorretos eram maiores que 0x7DDF0000 e menores que 0x7DDF4000. Então, tomei o início do bloco 16K como meu endereço inicial.
O segundo parâmetro é uma máscara. Você coloca 1s em que o intervalo de endereços que você deseja compartilha os mesmos valores e 0s em que variará. Isso significa que você precisa escolher seu intervalo de endereços para que apenas os bits de ordem baixa variem. Olhando para o meu endereço, a primeira parte da máscara é fácil. Você quer começar com 0xffff. Para a próxima mordidinha, explicarei com mapas de bits. Eu quero variar de 0000 a 0011. Portanto, a máscara para o badram seria 1100 ou um hex c. Os últimos 3 petiscos devem ter todos os 0s na máscara, pois queremos que todo o intervalo seja mapeado. Portanto, obtemos um resultado total de 0xffffc000.
Depois de definir esta linha em / etc / default / grub, executei o sudo update-grub e reiniciei e minha memória ruim não estava mais sendo usada. Não são necessários patches do kernel para mapear memória ruim usando esse método.
Acompanhamento # 1
Olhando na página da wikipedia o memtest86 +, ele diz o seguinte:
trecho da página da Wikipédia Memtest86
A partir do Memtest86 2.3 e do Memtest86 + 1.60, o programa pode gerar uma lista de regiões com RAM ruim no formato esperado pelo patch BadRAM para o kernel do Linux; Usando essas informações, um sistema Linux pode usar com segurança um módulo de RAM, mesmo que tenha alguns bits ruins. O Grub2 é capaz de fornecer essas mesmas informações a um kernel sem patch, negando a necessidade do patch BadRAM.
Também me deparei com esta página do Gentoo que especificava o memmap=...
uso de um endereço hexadecimal, para que você pudesse especificá-lo assim:
memmap=5M$0x2f796c48
O 5M é apenas um palpite, obviamente, você pode ajustá-lo para mais ou para menos, dependendo da quantidade de RAM nessa região que você deseja / precisa omitir.
Finalmente, você também pode especificar o tamanho em hexadecimal:
memmap=0x10000$0x2f796c48
Ignoraria 64KB começando no endereço 0x2f796c48.
Referências