Quando a troca é retornada à memória física no Linux? É apenas sob demanda, ou seja. quando é necessário? Ou a troca é transferida lentamente para a memória física quando o computador não está com carga alta?
8
Sob demanda. De fato, o Linux transferirá lentamente a memória física para trocar quando estiver ociosa (consulte: "troca").
Durante a operação regular, os dados do swap são carregados na memória sob demanda, como outros responderam, mas há mais um caso quando isso acontece: é quando o espaço do swap é desativado, desde que haja memória física suficiente para carregar todo o conteúdo do swap.
Apenas faça:
… E todos os seus dados de troca voltarão à memória. O efeito colateral é que os buffers / caches de disco podem ser liberados.
Às vezes, pode ser desejável
swapoff -a ; swapon -a
, por exemplo, depois de algum processo de vazamento de memória com erros, antes de travar, varrer processos mais importantes - para garantir que qualquer processo em execução no sistema seja carregado na memória e não espere a troca no alguns minutos.fonte
swapoff
que não falhará, mas o sistema ficará sem memória logo após o processoswapoff
e o OOM interromperá o processo aleatório (no pior caso, o shell prestes a chamarswapon
ou oswapon
comando). Na prática, é muito improvável - muita memória é usada pelos caches antes deswapoff
ser chamada, portanto deve haver RAM suficiente para que ambos os comandos sejam executados.Como outros já apontaram, as páginas só serão copiadas de volta para a RAM quando necessário (sob demanda) em vez de ocupar a RAM que seria melhor deixar disponível para cache / buffers.
O fato de as páginas serem copiadas de volta para a RAM, não movidas, é importante e pode causar confusão se você não estiver ciente disso. A página não será desalocada do swap, a menos que não seja mais necessária (isto é, a página seja desalocada completamente), seja alterada na RAM (portanto, a cópia no swap não está mais correta) ou o swap estiver acabando (e o são necessários blocos de disco para trocar algumas outras páginas). Dessa forma, se a página precisar ser trocada novamente no futuro, nenhuma gravação no disco será necessária, pois o kernel sabe que já existe uma boa cópia no disco - isso pode reduzir muito o "thrashing" quando a RAM disponível fica criticamente baixa, mas o espaço de troca também não é necessário. congestionado.
Você pode ver quantas páginas estão atualmente na RAM e nas quais são trocadas
cat /proc/meminfo
- aSwapCached
linha é a quantidade de dados que estão nas páginas que estão atualmente na RAM e no disco. Se você acha que seu swap atual o usa mais do que o esperado, verifique o valor SwapCached, pois isso pode explicar a discrepância.fonte
Isso normalmente está vinculado ao hardware que você está usando. Na maioria dos hardwares (incluindo intel), a MMU controla todo o processo.
Quando um programa aloca memória, solicita-o à MMU e recupera um endereço virtual. Por sua vez, o MMU registrará essa página como "em uso" no mapa do espaço de endereço global.
Quando o programa realmente acessar esse espaço de memória, a MMU pesquisará a página no mapa de endereços. Se essa página estiver na memória "ao vivo", ela retornará um ponteiro "ao vivo" ao sistema operacional, que manipulará a leitura / gravação na memória em nome do programa. Se a memória não estiver alocada no momento, ela provocará uma falha na página. Essa exceção do processador é capturada pelo sistema operacional, que é responsável por descobrir onde os dados estão no arquivo de permuta, carregá-los na memória física e devolver a página à MMU para que o processo inicial possa continuar.
Isso significa que, a menos que a página de memória seja acessada, ela nunca voltará à memória "ao vivo" depois de trocada. É por isso que geralmente existe uma API do sistema operacional que permite aos programas especificar que um bloco de memória específico NÃO deve ser trocado para o disco e deve ser mantido na memória (não sei sobre o Linux, mas no Windows, é a função VirtualLock) .
fonte
mlock(2)
linux.die.net/man/2/mlock