Existem alguns aspectos diferentes para 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 da sua memória. O Linux usa toda a memória desocupada (exceto os últimos Mb) como "cache". Isso inclui o cache da página, caches de inode, etc. Isso é uma coisa boa - ajuda a acelerar as coisas. Tanto a gravação no disco quanto a leitura do disco podem ser aceleradas imensamente pelo cache.
Idealmente, você tem memória suficiente para todos os seus aplicativos e ainda tem várias centenas de Mb restantes para 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 troca.
Depois que os aplicativos reivindicam mais RAM, eles simplesmente entram em parte do espaço usado pelo cache, diminuindo o cache. A desalocação do cache é barata e fácil o suficiente para ser feita em tempo real - tudo o que fica no cache é apenas uma segunda cópia de algo que já está no disco, para que possa ser desalocado instantaneamente ou é algo que gostaríamos teve que liberar para o disco nos 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 apenas relatar RAM livre de maneira diferente: alguns incluem o cache como parte do que consideram "livre" e outros podem não.
Quando você fala sobre RAM livre, é muito mais significativo incluir cache, porque é praticamente gratuito - está disponível caso algum aplicativo solicite. No Linux, o free
comando relata nos dois sentidos - a primeira linha inclui cache na coluna RAM usada e a segunda linha inclui cache (e buffers) na coluna livre.
Como o Linux usa swap (ainda mais simplificado)
Depois de usar a memória suficiente para que não haja um cache de bom funcionamento, o Linux pode decidir realocar uma memória de aplicativo não utilizada da RAM para trocar.
Isso não é feito 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. Ele tem um algoritmo bastante "confuso". Isso leva em consideração muitas coisas, que podem ser melhor descritas por "quanta pressão existe para a alocação de memória". Se houver muita "pressão" para alocar nova memória, aumentará as chances de que algumas sejam trocadas para criar mais espaço. Se houver menos "pressão", isso diminuirá essas chances.
Seu sistema possui uma configuração de "troca" que ajuda a ajustar como essa "pressão" é calculada. Normalmente, não é recomendável alterar isso, e eu não recomendaria que você o alterasse. A troca é geralmente uma coisa muito boa - embora haja alguns casos extremos em que prejudica o desempenho, se você observar o desempenho geral do sistema, é um benefício líquido para uma ampla gama de tarefas. Se você reduzir o swappiness, deixe a quantidade de memória cache diminuir um pouco mais do que seria de outra forma, mesmo quando for realmente útil. Se isso é uma troca suficientemente boa para qualquer problema que você esteja tendo com a troca, é com você. Você deveria saber o que está fazendo, só isso.
Existe uma situação bem conhecida na qual a troca realmente prejudica o desempenho percebido em um sistema de desktop e é a rapidez com que os aplicativos podem responder à entrada do usuário novamente depois de ficarem ociosos por um longo tempo e com processos em segundo plano pesados em E / S (como um backup noturno). Essa é uma lentidão muito visível, mas não o suficiente para justificar a desativação da troca e é muito difícil de impedir em qualquer sistema operacional. Desative a troca e essa lentidão inicial após a verificação de backup / vírus pode não ocorrer, mas o sistema pode ficar um pouco mais lento o dia todo. Essa também não é uma situação limitada ao Linux.
Ao escolher o que deve ser trocado no disco, o sistema tenta coletar memória que não está sendo realmente usada - leitura ou gravação. Ele tem um algoritmo bastante simples para calcular isso, que escolhe bem a maior parte do tempo.
Se você possui um sistema em que possui uma quantidade enorme de RAM (no momento da escrita, 8 GB é uma quantidade enorme para uma distribuição Linux típica), raramente encontrará 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 algumas falhas de aplicativos. Mas se você sabe que não vai precisar, pode fazê-lo.
Mas como a troca pode acelerar meu sistema? Não trocar as coisas devagar?
O ato de transferir dados da RAM para a troca é uma operação lenta, mas só é usada quando o kernel tem certeza de que o benefício geral superará isso. Por exemplo, se a memória do aplicativo aumentou a ponto de quase não haver cache e a sua E / S é muito ineficiente por causa disso, é possível obter muito mais velocidade do sistema liberando alguma memória, mesmo após a despesa inicial de trocar dados para liberá-los.
É também o último recurso caso seus aplicativos solicitem mais memória do que você realmente possui. Nesse caso, a troca é necessária para evitar uma situação de falta de memória que geralmente resulta em um aplicativo travando ou precisando ser forçado a matar.
A troca é associada apenas a momentos em que o sistema está com desempenho ruim porque ocorre quando a RAM utilizável está acabando, o que tornaria o sistema mais lento (ou instável), mesmo que não houvesse troca. Então, para simplificar as coisas, a troca acontece porque o sistema está ficando atolado, e não o contrário.
Depois que os dados são trocados, quando são lançados novamente?
A transferência de dados fora do swap é (pelo menos para os discos rígidos tradicionais), tão demorada quanto colocar lá. Então, é compreensível que o seu kernel seja tão relutante em remover dados do swap, especialmente se não estiver sendo realmente usado (por exemplo, lido ou gravado). Se você possui dados em swap e eles não estão sendo usados, é realmente bom que eles permaneçam em swap, pois deixa mais memória para outras coisas que estão sendo usadas, potencialmente acelerando o sistema.
free -m
,top -b 1