RTFM & Aleatoriedades - Swap file
Um arquivo de swap é um arquivo no sistema de arquivos que funciona como uma extensão da memória virtual do sistema operacional. Ele é usado para armazenar temporariamente dados da memória RAM quando esta está quase cheia. Em outras palavras, ele permite que o sistema continue funcionando, movendo dados menos usados da RAM para o disco, liberando espaço na memória principal para processos mais ativos.
Características de um Arquivo de Swap
-
Memória Virtual:
- Swap é parte do mecanismo de memória virtual do sistema operacional.
- Quando a RAM está cheia, o sistema utiliza o espaço de swap para armazenar dados que não precisam estar imediatamente disponíveis.
-
Formato:
- É apenas um arquivo comum no sistema de arquivos, mas configurado para ser usado como swap.
- Funciona de maneira semelhante a uma partição de swap, mas tem mais flexibilidade porque não precisa de uma partição dedicada.
-
Usado Principalmente em Sistemas Unix/Linux:
- Em sistemas Linux, você pode configurar um arquivo de swap além da partição de swap padrão.
- Ele é útil em situações onde não foi planejada uma partição de swap durante a instalação, ou quando você precisa de mais espaço de swap sem reorganizar partições.
Vantagens de um Arquivo de Swap
-
Flexibilidade:
- É fácil ajustar o tamanho do arquivo de swap, criando um novo ou redimensionando o existente.
-
Não Requer Reparticionamento:
- Diferente de uma partição de swap, um arquivo de swap pode ser criado no sistema de arquivos sem precisar modificar as partições do disco.
-
Fácil de Configurar e Remover:
- Pode ser ativado ou desativado facilmente usando ferramentas do sistema, como
swapon
eswapoff
no Linux.
- Pode ser ativado ou desativado facilmente usando ferramentas do sistema, como
Desvantagens de um Arquivo de Swap
-
Desempenho:
- Como está localizado em um sistema de arquivos, ele pode ser um pouco mais lento do que uma partição de swap dedicada.
- Isso ocorre porque operações de leitura/gravação no arquivo de swap passam pelo sistema de arquivos.
-
Fragmentação:
- Se o disco estiver fragmentado, o desempenho do swap pode ser afetado.
-
Verificando se há algum swap
sudo swapon --show
- Criando arquivo de swap de 2GiB
sudo dd if=/dev/zero of=/swapfile count=2192 bs=1MiB
- Alterando permissão do arquivo
sudo chmod 600 /swapfile
- Marcando o arquivo como um espaço de swap
sudo mkswap /swapfile
- Verificando se está tudo ok
sudo swapon /swapfile --show
- Adicionando a linha no etc/fstab para montagem automática
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
- Ajustando a configuração de Swap
O parâmetro /proc/sys/vmwappiness
configura a frequência com que o sistema transfere dados da RAM para o espaço de swap. Sendo um valor entre 0 e 100 que representa uma porcentagem!
- Com valores próximos de zero, o kernel não irá transferir dados para o disco a menos que seja absolutamente necessário.
- Lembre-se, as interações com o arquivo de swap são “dispendiosas”! Pois são mais lentas que as interações com a RAM.
- Valores que estão mais próximos de 100 irão tentar colocar mais dados no swap em um esforço para manter mais espaço da RAM livre.
- Dependendo do perfil de memória de seus aplicativos ou do motivo pelo qual você está usando o seu servidor, isso pode ser melhor em alguns casos.
Para um desktop, um valor de swappiness de 60 não é um valor ruim e normalmente é o valor dfault em uma distro Linux. Mas para um servidor, podemos deixá-lo mais próximo de 0, para fazer uso somente quando realmente necessário
Como exemplo podemos setar para '10' para que o swap seja utilizado após 90% de RAM ocupada
sudo sysctl vm.swappiness=10
Para garantir que esse valor irá se manter após um boot
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
- Ajustando a confiuração do vfs_cache_pressure
Esta opção controla a tendência do kernel de recuperar a memória que é usada para cache de diretórios e objetos inode.
- No valor padrão de vfs_cache_pressure=100, o kernel tentará recuperar dentries e inodes a uma taxa "justa" em relação ao pagecache e à recuperação do swapcache.
- Diminuir vfs_cache_pressure faz com que o kernel prefira manter os caches dentry e inode.
- Quando vfs_cache_pressure=0, o kernel nunca recuperará dentries e inodes devido à pressão de memória e isso pode levar facilmente a condições de falta de memória.
- Aumentar vfs_cache_pressure além de 100 faz com que o kernel prefira recuperar dentries e inodes.
Podemos definir isso em um valor mais conservador como 50
sudo sysctl vm.vfs_cache_pressure=50
Vamos garantir que após um boot o valor permaneça
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.conf