Respostas:
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:
swapoff -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.
swapoff
que não falhará, mas o sistema ficará sem memória logo após o processo swapoff
e o OOM interromperá o processo aleatório (no pior caso, o shell prestes a chamar swapon
ou o swapon
comando). Na prática, é muito improvável - muita memória é usada pelos caches antes de swapoff
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
- a SwapCached
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.
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) .
mlock(2)
linux.die.net/man/2/mlock