Gerenciamento de Swap

Acha um absurdo usar Swap em 2022? Veja como gerenciar arquivos swap em seu sistema linux e entenda de uma vez por todas a sua utilidade!


| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. 
Mais detalhes clicando aqui.


1. Introdução

Quando um computador está em pleno funcionamento, a CPU cuida de processos e mantém boa parte do seu trabalho na memória RAM. A CPU jamais opera diretamente do disco rígido, primeiro colocando os arquivos do HDD ou SSD na RAM e só depois, de lá, lidará com eles.

Acontece que, em qualquer sistema operacional, caso ocorra da memória RAM atingir 100% de uso, ela vai travar o sistema por completo, a CPU não tem mais como processar informações e vai ficar num estado de congelamento total semelhante a um kernel panic! É uma situação conhecida também como inanição de recursos.

O Linux otimiza a ausência de RAM livre com um processo chamado OOM Reaper gerenciado pelo SystemD: Ele vai encerrar processos que julgar menos importantes para forçar a liberação de memória RAM caso o espaço livre restante beire os 1%. Porém não é um sistema muito inteligente e ele pode encerrar aplicações vitais, causando transtornos e perdas de dados.

As SWAPs – também conhecidas como áreas de troca -, existentes desde as origens dos sistemas UNIX®, existem com um simples propósito: Servirem como despejo do excesso de RAM, aliviando o sistema e permitindo que a CPU trabalhe.

Como a área de troca ocorre no disco rígido, ela pode ser um gargalo e tanto para um sistema, deixando-o lento pelo tempo que o disco rígido estiver despejando, e também pelo tempo que estiver recuperando dados despejados de volta para a RAM!

1.1 Partição Swap

As partições de troca quando criadas num sistema Linux são definidas como o ponto de montagem /swap e são normalmente criadas no momento em que um sistema é instalado.

Em sistemas como o Ubuntu 16.04, existe a inconveniente mensagem de instalação que te pede para criar uma partição Swap mesmo que ela não se faça necessária ou você não deseje.

1.2 Swap File

Introduzidos no Ubuntu 17.04 (começo de 2017) mas existentes a algum tempo, os Swap Files, ou ainda, arquivos de área de troca, são uma evolução natural para o arquivo de área de troca: Em vez de reservar uma partição dedicada a ele, o sistema cria um arquivo na raíz / com o nome de swapfile com X capacidade de armazenar despejo de memória.

A imensa vantagem do Swap File sobre a Partição Swap se encontra no fato de que:

  • Uma partição Swap deve ser gerida por um programa particionador estando sujeito á disponibilidade de espaço livre em partições vizinhas para ser aumentado depois de instalado; enquanto que o Swap File pode ser criado com qualquer tamanho e em qualquer partição e pode ser editado também para qualquer tamanho e partição a posteriori.
  • Consome 1 partição primária das 4 que o MBR fica limitado a criar, enquanto que o Swap File pode ser criado em qualquer partição das 4 primárias da MBR, desde que esta seja em EXT4.

2. Padrões

Arquivo de área de troca destacada na pasta raiz /

Em sistemas onde o Swap File vem por padrão, você não precisa criar partição /swap.

Basta criar uma partição com ponto de montagem / normalmente e o Swap File será gerado sob um pequeno calculo sobre a memória RAM disponível na máquina, podendo ser criado contendo entre 1 a x Gb’s.

Caso isso te desagrade, você poderá ajustar esse tamanho!

3. Instalação

Quem não possui uma Swap File configurada, e quiser criar uma, siga do passo 1 em diante.
Quem possui uma Swap File instalada e quiser apenas mudar o tamanho dela, continue do passo 5 em diante.

Independente do seu sistema, você pode criar um arquivo de área de troca e, mesmo aqueles que fazem uso de versões antigas do Ubuntu que requerem partição Swap, podem não instalar a partição /swap e criar um arquivo de área de troca seguindo estes passos:

  • 1) Crie um arquivo Swap File em sua raíz com o seguinte comando:
$ sudo dd if=/dev/zero of=/swapfile bs=1k count=1000000

O parâmetro count define que o arquivo terá 1Gb.
Se quiser mais ou menos, basta editar esse parâmetro.
Sendo:

  • 1 000 000 = 1 Gb
  • 1 00 000 = 100 Mb
  • 1 0 000 = 10 Mb
  • 1 000 = 1 Mb

No exemplo, será 1 Gb!

Qual o tamanho ideal?
EU penso da seguinte forma: Tenha proporcionalmente um valor que permita despejo. Não há necessidade de ter sua RAM toda = SWAP, ou seja, se você tem 32Gb de RAM deve ter 32 Gb de SWAP? Não.
Tenha um valor proporcional para que ocorra despejo mas você também não fique totalmente sem nada, imagino que um valor próximo de 25% da RAM esteja adequado.
Se tem 2 Gb de RAM, 512 mb de área de troca…. Se for 32Gb de RAM, uns 8 Gb de SWAP será suficiente.

  • 2) Com o arquivo concluído, defina-o como Swap:
$ sudo mkswap /swapfile
  • 3) Ative o Swap com:
$ sudo swapon -a
  • 4) Para tornar a mudança permanente, edite seu /etc/fstab e adicione as seguintes linhas a ele:
# SwapFile
/swapfile none swap sw 0 0

Com o comando $ free -tm
Você já vai confirmar que o Swap está ativo e pronto pra usar!

  • 5) Caso queira editar o tamanho do seu arquivo Swap, você deve desativa-lo primeiro:
$ sudo swapoff -a

Redimensione o Swap File com o mesmo comando usado para criá-lo:

$ sudo dd if=/dev/zero of=/swapfile bs=1k count=1000000

Como o arquivo de área de troca é basicamente um arquivo cheio de Zeros, será um processo rápido.
Após isso, refaça os passos 2 e 3 acima para reativá-lo no sistema!
Não precisa fazer o passo 4, já que você já possuía um arquivo de área de troca ativa no sistema.

  • 6) Caso queira remover permanentemente o arquivo de área de troca de seu sistema, faça os seguintes comandos:
$ sudo swapoff -a

Edite o arquivo /etc/fstab e apague a linha:

/swapfile none swap sw 0 0

Observação:
Como explicado acima, o Swap, por mais que caia em desuso em sistemas modernos, funciona como uma medida de emergência para caso sua memória RAM venha a lotar por completo! Isso previne que o OOM Reaper entre em ação encerrando aplicações abertas e causando prejuízos, principalmente se você usa Ubuntu ou algum de seus sabores.

Mesmo que você tenha 16Gb ou 32Gb de RAM, nada impede que você a esgote com máquinas virtuais, games e editores de vídeo sendo que o melhor dos computadores pode precisar de Swap para evitar que congele por completo.

Em hipótese alguma defendo e/ou recomendo a extinção do arquivo Swap!

4. Controlando o Uso da Swap!

O sistema Linux nos permite ter um controle granular de tudo o que acontece nele.
E isso inclui o momento em que o sistema vai usar o despejo de Swap.

O Swappiness define quando o sistema vai fazer uso do arquivo de área de troca. Esse valor é definido de forma simples baseado na % de uso da RAM.

Por padrão, a maioria dos sistemas define o uso em 60%. Ou seja, quando sua memória RAM está com 40% de uso, tudo que entrar na RAM após isso fará o sistema despejar os dados mais antigos no disco.

Na prática isso deixa o sistema mais estável e fluido, já que o uso de Swap será sutil com poucos problemas de desempenho na máquina. Mas pra quem usa SSD, ou discos em RAID 0, poderá mudar o valor do Swap para algo mais baixo, como por exemplo 10%. Ou seja, com 90% de uso, antes do OOM Reaper entrar em ação, a CPU começará o despejo de Swap.

Para verificar o valor do swappiness atual do seu sistema:

$ cat /proc/sys/vm/swappiness

Para mudá-lo, edite o arquivo /etc/sysctl.conf e adicione estas linhas no final dele:

# Swappiness
vm.swappiness=10

Este caso em específico, você precisa reiniciar seu computador para que o Swappiness tenha efeito!

Os valores são inversamente proporcionais:
Swappiness 10 = 90% de Uso até o despejo ocorrer.
Swappiness 60 = 40% de Uso até o despejo ocorrer.

Se seu sistema for o ArchLinux, o arquivo mudou de lugar, fica lá em:

/etc/sysctl.d/99-sysctl.conf

5. SSD!

Uma pergunta surge: Usar ou não usar Swap com SSD? Eis a questão.

Eu vejo os usuários evitando usar Swap em SSD porque isso “degrada a mídia” diminuindo sua vida útil.
Em termos isso é verdade.

Porém lembre-se que o SWAP trabalha de algumas formas:

  • O sistema não despeja sempre. Normalmente um usuário vai trabalhar por semanas antes de o sistema despejar algo na área de troca e, quando isso ocorrer, vai ser na faixa das dezenas de Mb. Não é uma constante.
  • O SWAP é uma via de mão única: O que é despejado ficará lá até o sistema ser desligado.
    Quando o sistema coleta algo do Swap, não vai apagar o que foi despejado para agilizar! O que está despejado será apenas lido e processado ficando a cópia original no disco. Portanto no processo de despejo para a área de troca, os dados são gravados 1x, e lidos depois. Isso evita desgaste desnecessário das mídias de armazenamento em uso.

É por isso que eu pessoalmente uso áreas de troca em NVME M2 e incentivo seu uso.
É ágil, não haverá tantos gargalos e não haverá uma perda de vida útil do equipamento substancial.

Para o Swap ser prejudicial, o usuário vai precisar despejar vários Gb por dia, enquanto reinicia o computador várias vezes por dia também para ter várias leituras e gravações!

Para efeito, seria o mesmo que não ter nenhuma swap e o usuário simplesmente baixar e apagar várias .ISOs de jogos, filmes e séries em HD ao longo de todo um dia, por vários dias seguidos.

6. Conclusão

Querendo ou não, mesmo que hoje os computadores mais modernos tenham 16Gb, 32Gb, até 64Gb de RAM, é pertinente ter uma quantidade de SWAP por questão preventiva: Evitar corromper aplicações e perder dados por falta de memória!

Pode ser improvável? Inimaginável? Mas pode acontecer.

#UrbanCompassPony

Fontes:
linuxdicasesuporte
professor-falken

8 comentários em “Gerenciamento de Swap”

  1. Para quem tem SSD, fica recomendo dedicar o dobro da capacidade da RAM numa partição SWAP e uma placa mãe com arquitetura de Dual ou Triple Channel, fica muito rápido somar essas duas tecnologia numa plataforma Linux.

    Responder
    • Pode-se tambem adicionar a Swap inteiramente no SSD. A velocidade do despejo permite que se tenha o desempenho de uma memória RAM de fato e, por mais que nào seja recomendado, mesmo que você use 3Gb do SSD pra Swap todo dia ele estará longe do fim de sua vida útil.

      Responder
  2. Uma dúvida:
    Em relação à velocidade de leitura/escrita, qual dos dois (arquivo ou partição) leva vantagem, ainda que pequena, tratando-se de um HD convencional?

    Responder
    • O SwapFile supera a partição Swap, porque o sistema vai ler apenas 1 índice de partição (a que contem o swapfile, seja ela de sistema ou de usuário), em vez de 2, como ocorreria em ter uma partição dedicada. Para SSDs é irrelevante mas num HDD faz muita diferença.

      Responder
  3. Seria interessante informar que para alteração do swappiness ter efeito é preciso reiniciar ou digitar o comando sudo “sysctl vm.swappiness=10” no terminal. Pelo menos no meu Kubuntu, não surtiu mudanças somente mudando o arquivo “/etc/sysctl.conf”.

    Responder
  4. Não consegui ativar a swap, deu o erro abaixo:

    alexandre@Sputnik-3:~$ sudo swapon -a
    swapon: não foi possível localizar o dispositivo para UUID=bb604f70-9ea4-4119-bf52-4af435971ec4

    Responder

Deixe um comentário