Swap (Português)
Essa página fornece uma introdução a espaço swap e paginação no GNU/Linux. Ele cobre a criação e ativação de partições swap e arquivos swap.
Do All about Linux swap space:
- O Linux divide sua RAM física (memória de acesso aleatório) em pedaços de memória chamados páginas. Swapping, ou troca, é o processo pelo qual uma página de memória é copiada para o espaço pré-configurado no disco rígido, chamado espaço swap ou espaço de troca ou swap space, para liberar essa página de memória. Os tamanhos combinados da memória física e do espaço swap são a quantidade de memória virtual disponível.
Suporte para swap é fornecido pelo kernel Linux e utilitários de espaço de usuário do pacote util-linux.
Espaço swap
O espaço swap pode assumir a forma de uma partição de disco ou de um arquivo. Os usuários podem criar um espaço swap durante a instalação ou em qualquer momento posterior, conforme desejado. O espaço swap pode ser usado para duas finalidades, estender a memória virtual além da memória física instalada (RAM), também conhecido como "ativar swap", e também para suporte de suspensão para disco.
Se for benéfico ativar o swap, depende da quantidade de memória física instalada e da quantidade de memória necessária para executar todos os programas desejados. Se a quantidade de memória física for menor que a quantidade necessária, é benéfico ativar a troca. Isso evita condições de falta de memória, onde o mecanismo matador de OOM do kernel do Linux tentará automaticamente liberar memória matando processos. Para aumentar a quantidade de memória virtual para o valor necessário, adicione a diferença necessária como espaço swap. Por exemplo, se os seus programas precisarem de 7,5 GB de memória para serem executados e houver 4 GB de memória física instalada, adicione a diferença de 3,5 GB no espaço swap. Adicione mais espaço swap para atender aos requisitos futuros. É uma questão de preferência pessoal se você preferir que os programas sejam eliminados ao ativar swap. A maior desvantagem de ativar o swap é seu desempenho inferior, consulte a seção #Desempenho.
Para verificar o estado do swap, use:
$ swapon --show
Ou
$ free -h
free também indica se a memória está em falta, o que pode ser remediado habilitando swap ou aumentando swap.
Partição swap
Uma partição swap pode ser criada com a maioria das ferramentas de particionamento do GNU/Linux. Partições swap são tipicamente designadas como tipo 82
. Mesmo que seja possível usar qualquer tipo de partição como swap, é recomendado usar o tipo 82
na maioria dos casos, já que o systemd detectará e montará automaticamente (veja abaixo).
Para configurar uma partição como área swap do Linux, o comando mkswap
é usado. Por exemplo:
# mkswap /dev/sdxy
Para habilitar o dispositivo para paginação:
# swapon /dev/sdxy
Para habilitar essa partição swap na inicialização, adicione uma entrada ao /etc/fstab
:
UUID=UUID_dispositivo none swap defaults 0 0
sendo que UUID_dispositivo
é o UUID do espaço swap.
Veja: fstab para a sintaxe do arquivo
- A entrada fstab é opcional se a partição swap estiver localizada em um dispositivo usando o GPT. Veja a próxima subseção.
- Se estiver usando um SSD com suporte a TRIM, considere usar
defaults,discard
na linha de swap no fstab. Se estiver ativando o swap manualmente com swapon, o parâmetro-d
/--discard
atinge o mesmo objetivo. Veja swapon(8) para detalhes.
Ativação por systemd
O systemd ativa partições swap com base em dois mecanismos diferentes. Ambos são executáveis em /usr/lib/systemd/system-generators
. Os geradores são executados na inicialização e criam unidades systemd nativas para montagens. O primeiro, systemd-fstab-generator
, lê o fstab para gerar unidades, incluindo uma unidade para swap. O segundo, systemd-gpt-auto-generator
inspeciona o disco raiz para gerar unidades. Ele opera somente nos discos GPT e pode identificar as partições swap pelo tipo GUID, consulte systemd (Português)#Montagem automática de partição GPT para obter mais informações.
Desabilitando swap
Para desabilitar um espaço swap específico:
# swapoff /dev/sdxy
Alternativamente, use a opção -a
para desabilitar todos os espaços swap.
Como o swap é gerenciado pelo systemd, ele será ativado novamente na próxima inicialização do sistema. Para desabilitar a ativação automática do espaço de swap detectado permanentemente, execute systemctl --type swap
para encontrar a unit responsável .swap e aplique mask.
Arquivo swap
Como uma alternativa para criar uma partição inteira, um arquivo swap oferece a capacidade de variar seu tamanho em execução, e é mais facilmente removido completamente. Isto pode ser especialmente desejável se o espaço em disco for precioso (por exemplo, um SSD de tamanho modesto).
Manualmente
Criação de arquivo swap
Para sistemas de arquivos "copy-on-write", como o Btrfs, primeiro crie um arquivo de tamanho zero, defina o atributo No_COW
nele com chattr e certifique-se que a compressão está desabilitada:
# truncate -s 0 /swapfile # chattr +C /swapfile # btrfs property set /swapfile compression none
Veja Btrfs#Arquivo swap para mais informações.
Use fallocate
para criar um arquivo swap com o tamanho de sua escolha (M = Mebibytes, G = Gibibytes). Por exemplo, para criar um arquivo swap de 512 MiB:
# fallocate -l 512M /swapfile
# dd if=/dev/zero of=/swapfile bs=1M count=512 status=progress
Defina as permissões certas (um arquivo swap legível por todos é uma imensa vulnerabilidade local):
# chmod 600 /swapfile
Após criar o arquivo no tamanho correto, formate-o para swap:
# mkswap /swapfile
Ative o arquivo swap:
# swapon /swapfile
Finalmente, edite a configuração do fstab para adicionar uma entrada para o arquivo swap:
/etc/fstab
/swapfile none swap defaults 0 0
Para informações adicionais, veja fstab#Uso.
Remover arquivo swap
Para remover um arquivo swap, ele deve primeiro ser desligado:
# swapoff /swapfile # rm -f /swapfile
Por fim, remova a entrada relevante do /etc/fstab
.
Automatizado
systemd-swap
systemd-swap é um script para criar um espaço de swap híbrido a partir de swaps de zram, arquivos swap e partições swap. Não é um afiliado com o projeto systemd.
Instale o pacote systemd-swap. Defina swapfc_enabled=1
NA seção Swap File Chunked do /etc/systemd/swap.conf
. Inicie/habilite o serviço systemd-swap
.
Visite a página do autor no GitHub para mais informações e instalação da configuração recomendada.
systemd-swap[..]: WARN: swapFC: ENOSPC
e nenhum arquivo swap está sendo criado, você precisa definir swapfc_force_preallocated=1
no /etc/systemd/swap.conf
.Criptografia swap
Veja dm-crypt/Swap criptografada.
Desempenho
As operações de swap geralmente são significativamente mais lentas do que acessar diretamente os dados na RAM. A desativação total da swap para melhorar o desempenho pode levar a uma degradação, pois diminui a memória disponível para caches VFS, causando E/S de disco mais frequente e dispendiosa.
Os valores de swap podem ser ajustados para ajudar no desempenho:
Swappiness
O parâmetro de sysctl para swappiness (isto é, a capacidade de realizar swap) representa a preferência (ou evitação) do kernel a cerca do espaço de swap. Swappiness pode ter um valor entre 0 e 100, o valor padrão é 60. Um valor baixo faz com que o kernel evite swap, um valor mais alto faz com que o kernel tente usar o espaço de swap. Sabe-se que usar um valor baixo em memória suficiente melhora a capacidade de resposta em muitos sistemas.
Para verificar o valor atual de swappiness:
$ sysctl vm.swappiness
Alternativamente, os arquivos /sys/fs/cgroup/memory/memory.swappiness
ou /proc/sys/vm/swappiness
podem ser lido para obter o valor inteiro não tratado.
/proc
é muito menos organizado e é mantido apenas para propósitos de compatibilidade, você é encorajado a usar /sys
.Para definir temporariamente o valor do swappiness:
# sysctl -w vm.swappiness=10
Para definir permanentemente o valor de swappiness, crie um arquivo de configuração sysctl.d(5). Por exemplo:
/etc/sysctl.d/99-swappiness.conf
vm.swappiness=10
Para testar e mais sobre por que isso pode funcionar, dê uma olhada neste artigo.
Pressão de cache VFS
Outro parâmetro sysctl que afeta o desempenho da swap é vm.vfs_cache_pressure
, que controla a tendência do kernel para recuperar a memória que é usada para armazenamento em cache de caches VFS, versus cache de páginas e swap. Aumentar esse valor aumenta a taxa na qual os caches VFS são recuperados [2]. Para mais informações, consulte a documentação do kernel Linux.
Prioridade
Se você tiver mais de um arquivo de swap ou partição de swap, considere atribuir um valor de prioridade (0 a 32767) para cada área de swap. O sistema usará áreas de swap de prioridade mais alta antes de usar áreas de swap de menor prioridade. Por exemplo, se você tiver um disco mais rápido (/dev/sda
) e um disco mais lento (/dev/sdb
), atribua uma prioridade mais alta à área de troca localizada no mais rápido dispositivo. Prioridades podem ser atribuídas em fstab através do parâmetro pri
:
/dev/sda1 none swap defaults,pri=100 0 0 /dev/sdb2 none swap defaults,pri=10 0 0
Ou por meio do parâmetro --priority
de swapon:
# swapon --priority 100 /dev/sda1
Se duas ou mais áreas tiverem a mesma prioridade e for a prioridade mais alta disponível, as páginas serão alocadas em uma base round-robin entre elas.
Usando zswap ou zram
O zswap é um recurso de kernel do Linux que fornece um cache de write-back compactado para páginas do swap. Isso aumenta o desempenho e diminui o operações de E/S. ZRAM cria um arquivo swap compactado virtual na memória como alternativa a um arquivo swap no disco.
Distribuição
Não há necessidade de usar RAID por motivos de desempenho de swap. O kernel em si pode distribuir a troca em vários dispositivos, se você apenas der a mesma prioridade no arquivo /etc/fstab
. Consulte o The Software-RAID HOWTO para obter detalhes.