Quando a troca é movida de volta para a memória física?

7

Quando a troca é movida de volta para a memória física no Linux? É apenas sob demanda, ou seja. quando é necessário? Ou a troca é lentamente transferida para a memória física quando o computador não está com carga alta?

    
por Ztyx 23.06.2010 / 11:08

4 respostas

8

A pedido Na verdade, o Linux irá transferir lentamente a memória física para trocar quando ocioso (veja: "swappiness").

    
por 23.06.2010 / 11:10
7

Durante a operação regular, os dados de swap são carregados na memória sob demanda, como outros respondidos, mas há mais um caso quando isso acontece: é quando o espaço de troca está desabilitado, desde que haja memória física suficiente para carregar todo o conteúdo de troca.

Basta fazer:

swapoff -a

... e todos os seus dados de troca "voltarão" à memória. O efeito colateral é que buffers / caches de disco podem ser liberados.

Por vezes, pode ser desejável fazer swapoff -a ; swapon -a , por ex. depois de algum processo de vazamento de memória com bugs, antes de deixar de funcionar, fez com que processos mais importantes fossem eliminados - para garantir que qualquer processo em execução no sistema fosse carregado na memória e não esperasse a troca em poucos minutos.

    
por 23.06.2010 / 14:10
5

Como outros apontaram, as páginas só serão copiadas de volta na RAM quando necessário (sob demanda), em vez de ocupar a RAM, que pode ser melhor deixada disponível para cache / buffers.

O fato de as páginas serem copiadas de volta para a RAM, não serem movidas, é importante e pode causar confusão se você não estiver ciente disso. A página não será desalocada a partir da troca, a menos que ela não seja mais necessária (isto é, a página seja desalocada completamente), seja alterada na RAM (assim a cópia na troca não esteja mais correta), ou a troca está baixa (e Blocos de disco são necessários para trocar algumas outras páginas). Desta forma, se a página precisar ser trocada novamente no futuro, nenhuma gravação em disco é necessária, pois o kernel sabe que já existe uma boa cópia no disco - isso pode reduzir bastante a "debulha" quando a RAM disponível se torna criticamente baixa, mas o espaço swap também não é congestionada.

Você pode ver quantas páginas estão atualmente na RAM e trocar de cat /proc/meminfo - a linha SwapCached é a quantidade de dados que estão nas páginas que estão atualmente na RAM e no disco. Se você acha que sua troca atual a usa mais do que o esperado, verifique o valor de SwapCached, pois isso pode explicar a discrepância.

    
por 23.06.2010 / 14:57
0

Isso geralmente está ligado ao hardware que você está usando. Na maioria dos hardwares (incluindo intel), a MMU controla todo o processo.

Quando um programa aloca memória, ele solicitará a MMU e recuperará um endereço virtual. Por sua vez, a MMU registrará essa página como "em uso" no mapa do espaço de endereçamento global.

Quando o programa realmente acessa esse espaço de memória, a MMU procurará a página no mapa de endereços. Se essa página estiver na memória "ao vivo", ela retornará um ponteiro "ao vivo" para o sistema operacional que manipulará a memória de leitura / gravação em nome do programa. Se a memória não estiver atualmente alocada, ela acionará uma falha de página. Essa exceção do processador é então capturada pelo sistema operacional, que é responsável por descobrir onde os dados estão no arquivo de troca, 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 "viva" quando for colocada em swap. É por isso que normalmente há uma API do sistema operacional que permite que os programas especifiquem que um determinado bloco de memória 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) .

    
por 23.06.2010 / 11:41