Entendendo a vm.Swappiness

Entendendo a vm.Swappiness
O kernel Linux é um software bastante complexo, com uma longa lista de componentes como módulos, interfaces e arquivos de configuração [1]. Esses componentes podem ser configurados com valores específicos para alcançar um comportamento desejado ou modo de operação do componente [2,3,4]. Posteriormente, essa configuração influencia diretamente o comportamento e o desempenho do seu sistema Linux como um todo.

Os valores atuais do kernel Linux e seus componentes são acessíveis usando uma interface especial - o diretório /proc [5]. Este é um sistema de arquivos virtual no qual os arquivos únicos são preenchidos com valores em tempo real. Os valores representam o estado real que o kernel Linux está em. Você pode acessar os arquivos individuais no diretório /proc usando o comando CAT da seguinte forma:

$ cat/proc/sys/net/core/somaxconn
128
$

Um desses parâmetros do kernel é chamado de VM.Swappiness. Ele “controla o peso relativo dado à troca da memória de tempo de execução, em vez de soltar páginas de memória do cache da página do sistema” [6]. Começando com o Linux Kernel Lankeases 2.6 Este valor foi introduzido. É armazenado no arquivo/proc/sys/vm/swappiness .

Usando a troca

O uso de swap [6] foi uma parte essencial do uso de máquinas UNIX menores no início dos anos 90. Ainda é útil (como ter um pneu sobressalente no seu veículo) quando vazamentos desagradáveis ​​de memória interferem no seu trabalho. A máquina desacelerará, mas na maioria dos casos ainda será utilizável para concluir sua tarefa atribuída. Os desenvolvedores de software livre têm feito grandes progressos para reduzir e eliminar os erros do programa, portanto, antes de alterar os parâmetros do kernel, considere atualizar para uma versão mais recente do seu aplicativo e das bibliotecas relacionadas primeiro.

Se você executar inúmeras tarefas, as tarefas inativas serão trocadas para o disco, fazendo melhor uso da memória com suas tarefas ativas. Edição de vídeo e outros aplicativos de consumo de memória grandes geralmente têm quantidades recomendadas de memória e espaço em disco. Se você tem uma máquina mais antiga que não pode ter uma atualização de memória, disponibilizar mais troca pode ser uma boa solução temporária para você (consulte [6] sobre como aprender mais sobre isso).

A troca pode acontecer em uma partição separada ou em um arquivo de troca. A partição é mais rápida e favorecida por muitos aplicativos de banco de dados. A abordagem do arquivo é mais flexível (consulte o pacote DPHYS-SWAPFILE no Debian GNU/Linux [7]). Ter mais de um dispositivo físico para trocar permite que o kernel do Linux escolha o dispositivo mais rápido disponível (menor latência).

vm.Swappiness

O valor padrão da VM.Swappiness tem 60 anos e representa a porcentagem da memória livre antes de ativar a troca. Quanto menor o valor, menos troca é usada e mais páginas de memória são mantidas em memória física.

O valor de 60 é um compromisso que funciona bem para os modernos sistemas de desktop. Um valor menor é uma opção recomendada para um sistema de servidor, em vez. Como o Red Hat Performance Tuning Manual aponta [8], um valor menor de swappiness é recomendado para cargas de trabalho de banco de dados. Por exemplo, para bancos de dados Oracle, Red Hat recomenda um valor de swappiness de 10. Por outro lado, para os bancos de dados MARIADB, é recomendável definir o swappiness a um valor de 1 [9].

Alterar o valor influencia diretamente o desempenho do sistema Linux. Esses valores são definidos:

* 0: a troca é desativada
* 1: quantidade mínima de troca sem desativá -la inteiramente
* 10: Valor recomendado para melhorar o desempenho quando a memória suficiente existe em um sistema
* 100: troca agressiva

Como mostrado acima do comando CAT, ajuda a ler o valor. Além disso, o comando sysctl fornece o mesmo resultado:

# sysctl vm.Swappiness
vm.Swappiness = 60
#

Lembre -se de que o comando sysctl está disponível apenas para um usuário administrativo. Para definir o valor, defina temporariamente o valor no sistema de arquivos /proc de seguinte:

# eco 10>/proc/sys/vm/swappiness

Como alternativa, você pode usar o comando sysctl da seguinte maneira:

# sysctl -w vm.Swappiness = 10

Para definir o valor permanentemente, abra o arquivo /etc /sysctl.conf como usuário administrativo e adicione a seguinte linha:

vm.Swappiness = 10

Conclusão

Cada vez mais usuários do Linux estão executando máquinas virtuais. Cada um tem seu próprio kernel, além do hipervisor que realmente controla o hardware. As máquinas virtuais têm discos virtuais criados para elas; portanto, alterar a configuração dentro da máquina virtual terá resultados indeterminados. Experimente primeiro a alteração dos valores do kernel do hipervisor, pois ele realmente controla o hardware em sua máquina.

Para máquinas mais antigas que não podem mais ser atualizadas (já possuem memória máxima suportada), você pode considerar colocar um pequeno disco de estado sólido na máquina para usá -lo como um dispositivo de swap adicional. Isso obviamente se tornará um consumível à medida que as células de memória falham em muitas gravações, mas podem prolongar a vida útil de uma máquina por um ano ou mais por um custo muito baixo. A baixa latência e leituras rápidas fornecerão um desempenho muito melhor do que trocar de um disco comum, dando resultados intermediários para RAM. Isso deve permitir que você use uma VM um pouco mais baixa.Valores de swappiness para desempenho ideal. Você terá que experimentar. Os dispositivos SSD estão mudando rapidamente.

Se você tiver mais de um dispositivo de troca, considere torná -lo um dispositivo RAID para faixas de dados nos dispositivos disponíveis.

Você pode fazer alterações no swappiness sem reiniciar a máquina, uma grande vantagem sobre outros sistemas operacionais.

Tente incluir apenas os serviços necessários para o seu negócio. Isso reduzirá os requisitos de memória, melhorará o desempenho e manterá tudo mais simples.

Uma nota final: você estará adicionando carga aos seus dispositivos de troca. Você vai querer monitorar as temperaturas deles. Um sistema superaquecido diminuirá sua frequência da CPU e desacelerará.

Reconhecimentos

O autor gostaria de agradecer a Gerold Ruprecht e Zoleka Hatitongwe por suas observações e comentários críticos ao preparar este artigo.

Links e referências

* [1] Linux Kernel Tutorial para iniciantes, https: // linuxhint.com/linux-kernel-tutorial-beginners/

* [2] Derek Molloy: escrevendo um módulo Linux Kernel - Parte 1: Introdução, http: // Derekmolloy.IE/Writing-A-Linux-Kernel-Module-Part-1-Introduction/

* [3] Derek Molloy: escrevendo um módulo Linux Kernel - Parte 2: Um dispositivo de caractere, http: // Derekmolloy.IE/Writing-A-Linux-Kernel-Module-Part-2-A-Caracter-Device/

* [4] Derek Molloy: escrevendo um módulo Linux Kernel - Parte 3: Botões e LEDs, http: // Derekmolloy.ie/kernel-gpio-programação-buttons-and-leds/

* [5] Frank Hofmann: Comandos para gerenciar a memória Linux, https: // linuxhint.com/comandos-to-manage-linux-memory/

* [6] Frank Hofmann: Linux Kernel Memory Management: Swap Space, https: // Linuxhint.Com/Linux-Memory-Management-Swap-Space/

* [7] Pacote DPHYS-SWAPFILE para Debian GNU/Linux, https: // pacotes.Debian.org/alongamento/dphys-swapfile

* [8] Guia de ajuste de desempenho do Red Hat, https: // acesso.chapéu vermelho.com/documentação/en-us/red_hat_enterprise_linux/6/html/performance_tuning_guide/s-meseio-tunables

* [9] Configurando Mariaadb, https: // mariadb.com/kb/en/biblioteca/configuração-swappiness/