Swap (Português)

Status de tradução:
Esse artigo é uma tradução de
Swap
. Data da última tradução: 2020-04-09. Você pode ajudar a sincronizar a tradução, se houver
alterações
na versão em inglês.
Artigos relacionados
fstab
Hibernação
Zswap
Swap on video ram
ZFS#Swap volume
dm-crypt/Swap criptografada
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.
Nota
Não há vantagem de desempenho para um arquivo de swap contíguo ou uma partição, ambos são tratados da mesma maneira.
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/sd
xy
Atenção
todos os dados na partição especificada serão perdidos.
Para habilitar o dispositivo para paginação:
# swapon /dev/sd
xy
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
Nota
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.
Atenção
Habilitar descarte em configurações de RAID usando mdadm vai causar um travamento do sistema na inicialização e durante o tempo de execução, se estiver usando swapon.
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/sd
xy
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).
Atenção
Btrfs
possui suporte a arquivo swap com limitações desde a versão 5.0 do kernel Linux. Veja
Btrfs#Arquivo swap
para mais informações.
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
Nota
fallocate
pode causar problemas com alguns sistemas de arquivos tal como
F2FS
.
[1]
Como uma alternativa, usar
dd
é mais confiável, mas mais lento:
# 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
.
Nota
O arquivo swap deve ser especificado por sua localização no sistema de arquivos, e não por seu UUID ou LABEL.
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
AUR
. 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
.
Nota
Se o journal fica mostrando o aviso a seguir
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.
Nota
Como
/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.