Existem alguns aspectos diferentes para a sua pergunta.
Em primeiro lugar, qual é a sua definição de "livre". Na verdade, não é tão simples quanto parece no Linux (ou em qualquer sistema operacional moderno).
Como o Linux usa RAM (muito simplificado)
Cada aplicativo pode usar parte de sua memória. O Linux usa todas as outras memórias não ocupadas (exceto nos últimos Mb) como "cache". Isso inclui o cache de páginas, caches de inode, etc. Isso é bom - ajuda a agilizar as coisas. Tanto a gravação em disco quanto a leitura em disco podem ser aceleradas imensamente pelo cache.
O ideal é que você tenha memória suficiente para todos os seus aplicativos e ainda tenha várias centenas de Mb restantes para o cache. Nessa situação, desde que seus aplicativos não aumentem o uso de memória e o sistema não esteja lutando para obter espaço suficiente para o cache, não há necessidade de qualquer troca.
Uma vez que os aplicativos reivindicam mais RAM, ele simplesmente entra em algum espaço usado pelo cache, encolhendo o cache. A alocação de cache é barata e fácil o bastante para ser feita em tempo real - tudo o que fica no cache é apenas uma segunda cópia de algo que já está no disco, então pode ser desalocada instantaneamente, ou é algo que gostaríamos tiveram que descarregar para o disco dentro dos próximos segundos de qualquer maneira .
Esta não é uma situação específica do Linux - todos os sistemas operacionais modernos funcionam dessa maneira. Os diferentes sistemas operacionais podem relatar a RAM livre de forma diferente: alguns incluem o cache como parte do que consideram "livre" e outros não.
Quando você fala sobre RAM livre, é muito mais significativo incluir o cache , porque é praticamente gratuito - ele está disponível em qualquer aplicativo que o solicite. No Linux, o comando free
relata as duas formas - a primeira linha inclui o cache na coluna RAM usada e a segunda linha inclui o cache (e os buffers) na coluna livre.
Como o Linux usa swap (ainda mais simplificado)
Depois de ter usado memória suficiente para que não haja espaço suficiente para um cache de execução suave, o Linux pode decidir realocar algumas memórias de aplicativos não utilizadas da RAM para trocar.
Não faz isso de acordo com um limite definido. Não é como se você alcançasse uma certa porcentagem de alocação, então o Linux começa a trocar. Tem um algoritmo bastante "fuzzy". São necessárias muitas coisas, que podem ser melhor descritas por "quanta pressão existe para alocação de memória". Se houver muita "pressão" para alocar nova memória, aumentará as chances de que alguns sejam trocados para ganhar mais espaço. Se houver menos "pressão", diminuirá essas chances.
Seu sistema tem uma configuração "swappiness" que ajuda a ajustar como essa "pressão" é calculada. Normalmente não é recomendado alterar isso, e eu não recomendaria que você alterasse isso. A troca é, em geral, uma coisa muito boa - embora existam alguns casos extremos em que isso prejudica o desempenho, se você observar o desempenho geral do sistema, isso é um benefício para uma ampla gama de tarefas. Se você reduzir o swappiness, você deixará a quantidade de memória cache encolher um pouco mais do que seria de outra forma, mesmo quando realmente for útil. Se esta é uma troca boa o suficiente para qualquer problema que você está tendo com a troca é com você. Você deveria saber o que está fazendo, só isso.
Existe uma situação bem conhecida em que o swap prejudica o desempenho percebido em um sistema de desktop, e está na rapidez com que aplicativos podem responder à entrada do usuário novamente depois de ficar ocioso por um longo tempo e ter processos em segundo plano pesados em IO ( como um backup noturno) executado. Esta é uma lentidão muito visível, mas não o suficiente para justificar a desativação do swap e a prevenção de qualquer sistema operacional. Desligue o swap e essa lentidão inicial após o backup / verificação de vírus pode não acontecer, mas o sistema pode ficar um pouco mais lento durante todo o dia. Esta não é uma situação limitada ao Linux.
Ao escolher o que deve ser trocado para o disco, o sistema tenta escolher a memória que não está sendo usada - ler ou gravar de. Tem um algoritmo bastante simples para calcular isso que escolhe bem na maioria das vezes.
Se você tem um sistema onde você tem uma quantidade enorme de RAM (no momento da escrita, 8GB é uma quantia enorme para uma distro típica do Linux), então você raramente atingirá uma situação em que a troca é necessária. Você pode até tentar desativar a troca. Eu nunca recomendo fazer isso, mas apenas porque você nunca sabe quando mais RAM pode salvá-lo de alguma falha do aplicativo. Mas se você sabe que não vai precisar, você pode fazer isso.
Mas como pode a troca acelerar o meu sistema? Não troca coisas lentas?
O ato de transferir dados da memória RAM para a troca é uma operação lenta, mas só é tomada quando o kernel tem certeza de que o benefício geral superará isso. Por exemplo, se a memória da sua aplicação subiu a tal ponto que você quase não tem cache e sua E / S é muito ineficiente por causa disso, você pode obter muito mais velocidade do seu sistema liberando alguma memória, mesmo após o gasto inicial de trocar dados para liberá-lo.
Também é um último recurso, caso seus aplicativos realmente solicitem mais memória do que você realmente tem. Nesse caso, a troca é necessária para evitar uma situação de falta de memória, que muitas vezes resultará na queda de um aplicativo ou na necessidade de ser morto à força.
Troca é apenas associada a momentos em que seu sistema está tendo um desempenho ruim, porque acontece quando você está ficando sem memória RAM utilizável, o que tornaria seu sistema mais lento (ou instável) mesmo se você não trocou. Então, para simplificar as coisas, a troca acontece porque o seu sistema está ficando sobrecarregado, e não o contrário.
Quando os dados estão em swap, quando são lançados novamente?
A transferência de dados para fora da troca é (pelo menos para discos rígidos tradicionais) tão demorada quanto colocá-lo lá. Então, compreensivelmente, seu kernel ficará relutante em remover dados de swap, especialmente se não estiver sendo usado (por exemplo, lido ou gravado). Se você tem dados em swap e não está sendo usado, então é realmente bom que ele permaneça em swap, já que ele deixa mais memória para outras coisas que estão sendo usadas, potencialmente acelerando seu sistema.