Por que o swappiness está definido como 60 por padrão?

109

Acabei de ler algumas coisas sobre swappiness no Linux. Não entendo por que o padrão está definido como 60.

De acordo comigo, esse parâmetro deve ser definido como 10 para reduzir a troca. A troca está no meu disco rígido, por isso é muito mais lento que a minha memória.

Por que eles configuraram o kernel assim?

Hugo
fonte
2
@ Mat Veja isso para saber como fazer comparações de swappiness.
Geremia

Respostas:

133

Desde o kernel 2.6.28, o Linux usa uma estratégia de substituição de página LRU ( divisão menos usada recentemente ). As páginas com uma fonte do sistema de arquivos, como texto do programa ou bibliotecas compartilhadas, pertencem ao cache do arquivo. As páginas sem o apoio do sistema de arquivos são chamadas de páginas anônimas e consistem em dados de tempo de execução, como o espaço de pilha reservado para aplicativos etc. Normalmente, as páginas pertencentes ao cache de arquivos são mais baratas para serem expulsas da memória (pois elas podem ser lidas novamente a partir do disco, quando necessário) . Como as páginas anônimas não têm o apoio do sistema de arquivos, elas devem permanecer na memória enquanto forem necessárias por um programa, a menos que haja espaço de troca para armazená-las.

É um equívoco comum que uma partição de swap de alguma forma desacelere seu sistema. Não ter uma partição de swap não significa que o kernel não despeja páginas da memória, apenas significa que o kernel tem menos opções em relação a quais páginas despejar. A quantidade de swap disponível não afetará o quanto é usado.

O Linux pode lidar com a ausência de um espaço de troca porque, por padrão, a política de contabilidade da memória do kernel pode comprometer a memória . A desvantagem é que quando a memória física está esgotado, e o kernel não pode trocar páginas anônimas para disco, o out-of-memory-killer (OOM-killer) mecanismo de começará a matar memória hogging processos "párias" para liberar memória para outros processos.

A vm.swappinessopção é um modificador que altera o equilíbrio entre trocar páginas de cache de arquivos em favor de páginas anônimas. O cache do arquivo recebe um valor de prioridade arbitrário de 200, do qual o vm.swappinessmodificador é deduzido ( file_prio=200-vm.swappiness). As páginas anônimas, por padrão, começam com 60 ( anon_prio=vm.swappiness). Isso significa que, por padrão, os pesos de prioridade são moderadamente a favor de páginas anônimas ( anon_prio=60, file_prio=200-60=140). O comportamento é definido na mm/vmscan.cárvore de origem do kernel.

Dado um vm.swappinessde 100, as prioridades seriam iguais ( file_prio=200-100=100, anon_prio=100). Isso faria sentido para um sistema pesado de E / S, se não for desejado que as páginas do cache de arquivos sejam despejadas em favor de páginas anônimas.

Por outro lado, definir vm.swappinessto 0impedirá que o kernel despeje páginas anônimas em favor de páginas do cache de arquivos. Isso pode ser útil se os programas fizerem a maior parte do cache deles, o que pode ser o caso de alguns bancos de dados. Nos sistemas de desktop, isso pode melhorar a interatividade, mas a desvantagem é que o desempenho de E / S provavelmente será afetado.

O valor padrão provavelmente foi escolhido como um fundo intermediário aproximado entre esses dois extremos. Como em qualquer parâmetro de desempenho, o ajuste vm.swappinessdeve se basear em dados de benchmark comparáveis ​​às cargas de trabalho reais, não apenas um pressentimento.

Thomas Nyman
fonte
4
Como a instalação do sistema operacional em um dispositivo de estado sólido afeta a compensação?
Gerrit 01/07
3
@gerrit O tipo de mídia de armazenamento subjacente é irrelevante. Esse tipo de detalhe não é visível para o subsistema de gerenciamento de memória.
Thomas Nyman
O tipo de mídia de armazenamento subjacente é irrelevante da perspectiva do uso de memória. Você pode considerar diminuir o swappiness de que a mídia suporta uma quantidade limitada de leitura / gravação (por exemplo, memória flash) para aumentar sua longevidade.
MatrixManAtYrService
2
@MatrixManAtYrService Graças ao nivelamento de desgaste interno e redundância interna, os SSDs modernos (aos quais a pergunta no comentário anterior se refere) mostraram durar até 2 PB (!) De gravações antes de exibir erros. Mesmo as unidades mais baratas nessas experiências duravam 300 TB antes que ocorressem erros, muito além da classificação oficial de garantia de cerca de 100 TB. Pelo menos na minha opinião, ajustar a troca para acomodar um SSD em estações de trabalho ou laptops não é realmente necessário.
Thomas Nyman
2
@ThomasNyman você faz um bom argumento, para a maioria dos usuários não vale a pena se preocupar. O caso que me levou a este post envolveu troca de espaço em um cartão SD, que reconheço é um pouco complicado.
MatrixManAtYrService
9

O problema é que não existe um valor padrão que atenda a todas as necessidades. Definir a opção de troca como 10 pode ser uma configuração apropriada para áreas de trabalho, mas o valor padrão de 60 pode ser mais adequado para servidores. Em outras palavras, a troca precisa ser ajustada de acordo com o caso de uso - área de trabalho x servidor, tipo de aplicativo e assim por diante.

Além disso, o kernel Linux usa memória para cache de disco, caso contrário, a RAM não seria usada e isso não é eficiente e planejado. Ter dados de disco no cache significa que, se algo precisar dos mesmos dados novamente, provavelmente os obterá da memória. Buscar os dados de lá é muito mais rápido do que obtê-los do disco novamente. E a opção swappiness é um mecanismo que o kernel do Linux prefere trocar para o disco para diminuir o cache do disco. Ele deveria remover os dados mais antigos do cache ou trocar algumas páginas do programa?

Este artigo também pode esclarecer o assunto. Especialmente, como a tendência de troca é estimada.

dsmsk80
fonte
Não entendo por que 60 é mais adequado para servidores. Eu tenho servidores e alguns processos são trocados, mesmo que tenhamos 40% de RAM freem. não faz sentido para mim.
23413 Hugo Hugo
7
Faz sentido mover partes da memória para troca se for muito improvável que elas sejam acessadas, dessa forma o Linux mantém o máximo possível de RAM disponível para estar pronto para situações em que realmente precisa.
replay
2
Por favor evitar URLs encurtadas
drs
O link para o artigo está morto, mas você ainda pode visualizá-lo na Wayback Machine
drs
O artigo vinculado é informativo. Obrigado por compartilhar.
Pistos
5

Adicionando mais detalhes às respostas acima.
Como estamos usando cada vez mais as VMs, um host Linux pode ser um VM em um desses ambientes de nuvem. Nos dois exemplos 1 e 2, temos uma boa idéia dos aplicativos em execução e quanto de RAM eles consomem. Em 3, nem tanto

  • Exemplo 1
    Uma nuvem privada de alto desempenho (pense no tipo pelo qual os bancos pagariam milhões), em que o disco é fornecido por uma matriz de armazenamento muito cara com MUITO bom IO. Parte desse armazenamento pode estar na RAM (na matriz de discos) suportada por discos SSD, suportada por discos regulares com eixos. Nessa situação, o disco que a VM vê pode ser apenas um pouco mais lento que a RAM que pode acessar. Para uma única VM, não há muita diferença entre swap e ram.
  • Exemplo 2
    O mesmo do exemplo 1, mas em vez de uma única vm você tem centenas, milhares ou mais. Nessa situação, descobrimos que a RAM do servidor (hypervisor) é barata e abundante, onde a RAM de armazenamento é cara (relativamente falando). Se dividirmos os requisitos de RAM entre o Hypervisor RAM e o SWAP fornecidos por nossa matriz de armazenamento muito cara, descobrimos que usamos rapidamente toda a RAM na matriz de armazenamento, os blocos são atendidos pelos SSDs e, finalmente, pelos eixos-árvore. De repente, tudo começa a ficar muito lento. Nesse caso, provavelmente queremos atribuir muita RAM (do hipervisor) à VM e definir o swappiness como 0 (somente trocar para evitar condições de falta de memória), pois o efeito cumulativo de todas essas VMs afetará o desempenho de o armazenamento,
  • Exemplo 3 Um laptop ou desktop moderno, provavelmente com um SSD. Os requisitos de memória são considerados desconhecidos. Qual navegador o usuário usará, quantas guias eles abrirão, também editarão um documento, uma imagem RAW ou, possivelmente, um vídeo, todos consumirão RAM. Definir o swappiness como um valor baixo e executar outros ajustes no sistema de arquivos significará que há menos gravações no SSD e, portanto, durará mais.
Timothy c
fonte
3
As preocupações de resistência de gravação do SSD para um sistema de usuário final são superestimadas. Os SSDs modernos geralmente sobrevivem a volumes de gravação de muitas centenas de terabytes. É improvável que um sistema de desktop típico, mesmo com uso pesado de troca, use muito por muitos anos de operação.
Jules