Eu tenho um dispositivo com RAM ruim. A execução do memtest durante a noite mostra que todos os endereços com falha estão no 0x7d0000000 - 0x7f0000000
intervalo. Pretendo substituir a RAM, mas até então desativei um pedaço de 2 GB com memmap=
:
# cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-6.5.0-25-generic root=UUID=5277c53f-b2cd-4301-8fdf-0b2119430870 ro memmap=2G$0x0000000790000000 quiet splash vt.handoff=7
Essas opções de cmdline parecem ser reconhecidas pelo kernel:
[ 0.000000] user-defined physical RAM map:
[ 0.000000] user: [mem 0x0000000000000000-0x000000000009efff] usable
[ 0.000000] user: [mem 0x000000000009f000-0x00000000000fffff] reserved
[ 0.000000] user: [mem 0x0000000000100000-0x0000000019e6a017] usable
[ 0.000000] user: [mem 0x0000000019e6a018-0x0000000019e7ae57] usable
[ 0.000000] user: [mem 0x0000000019e7ae58-0x000000002cb82fff] usable
[ 0.000000] user: [mem 0x000000002cb83000-0x000000002ed2ffff] reserved
[ 0.000000] user: [mem 0x000000002ed30000-0x000000002edacfff] ACPI data
[ 0.000000] user: [mem 0x000000002edad000-0x000000002f29bfff] ACPI NVS
[ 0.000000] user: [mem 0x000000002f29c000-0x000000002fd0efff] reserved
[ 0.000000] user: [mem 0x000000002fd0f000-0x000000002fd0ffff] usable
[ 0.000000] user: [mem 0x000000002fd10000-0x000000003cffffff] reserved
[ 0.000000] user: [mem 0x00000000e0000000-0x00000000efffffff] reserved
[ 0.000000] user: [mem 0x00000000fe000000-0x00000000fe010fff] reserved
[ 0.000000] user: [mem 0x00000000fec00000-0x00000000fec00fff] reserved
[ 0.000000] user: [mem 0x00000000fed00000-0x00000000fed03fff] reserved
[ 0.000000] user: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[ 0.000000] user: [mem 0x00000000ff000000-0x00000000ffffffff] reserved
[ 0.000000] user: [mem 0x0000000100000000-0x000000078fffffff] usable
[ 0.000000] user: [mem 0x0000000790000000-0x000000080fffffff] reserved
[ 0.000000] user: [mem 0x0000000810000000-0x00000008beffffff] usable
No entanto, ainda recebo segfaults, aparentemente no intervalo de endereços reservados:
Mar 09 20:47:40 srv0 kernel: udisksd[656]: segfault at 7fe974786218 ip 00007fe974786218 sp 00007ffcd10d1848 error 7 in libbd_swap.so.3.0.0[7fe974785000+2000] likely on CPU 7 (core 3, socket 0)
De acordo com esta página , devo interpretar isso como udiskd tentando escrever no endereço reservado 0x7fe974786218
(erro 7). À primeira vista, o 0x7f
endereço parece corresponder ao que o memtest descobriu ser RAM ruim, mas está errado em ordens de magnitude, pois aponta para um valor de 140 TB. Minha máquina tem 32 GB.
O que, senão um endereço de memória, o segfault at X
valor representa?
Você está confundindo espaços de endereço aqui; esta é a memória virtual do espaço de endereço do
udisks
processo . Você reservou espaços de endereço físico .Uma falha de segurança ocorre quando um processo tenta acessar um endereço de memória virtual que não está mapeado para nenhuma página física ou cujo acesso não tem permissão.
Endereços físicos e virtuais não têm nada a ver um com o outro, manter uma tabela para mapear endereços virtuais para endereços físicos é o motivo pelo qual seu processador possui uma unidade de gerenciamento de memória . Portanto, o problema aqui é o software acessando o endereço de memória errado – um bug.
Claro, esse bug pode não ser um bug de software, mas causado por RAM danificada que você não reservou; ninguém pode saber disso! Não há garantia de que o memtest de ontem à noite ainda seja relevante hoje, especialmente se houver problemas em mais de um intervalo de endereços físicos. Honestamente, o que você está fazendo é bastante perigoso – você sabe que tem memória que pode corromper dados aleatoriamente, você espera o melhor que tenha capturado toda a memória ofensiva e bloqueado seu uso. Se as coisas que você faz com seu computador fossem importantes , eu não faria isso. Já que você disse que está planejando substituir essa memória, remova todo o módulo de RAM agora e retome o trabalho, se possível, ou apresse-se em obter a RAM de reposição.