Supondo que o kernel do Linux não troque as páginas de memória do meu processo, posso assumir que sua localização física na RAM não será alterada ou é possível que o kernel as mova?
A razão pela qual estou perguntando é que estou pensando em escrever memtester
do zero e queria saber se é possível que uma página recém-alocada esteja no mesmo local físico na RAM que o processo já testou antes.
Estou ciente de dois casos em que o endereço físico de uma página alocada pode mudar e, portanto, uma alocação subsequente pode reutilizar uma página física usada anteriormente:
O primeiro pode ser evitado em todos os casos bloqueando a memória com
mlock()
oumlockall()
. Para este último, ovm.compact_unevictable_allowed
sysctl
também precisa ser definido como 0 (é ativado por padrão se a compactação estiver ativada).A desfragmentação transparente de páginas enormes usa tanto swap-out quanto compactação, mas adiciona várias
sysctl
entradas próprias; Não sei se eles seriam necessários além de desabilitar a compactação globalmente e bloquear a memória que está sendo testada.