Por que o swappiness está configurado para 60 por padrão?

99

Acabei de ler algumas coisas sobre o swappiness no Linux. Eu não entendo porque o padrão está definido para 60.

De acordo comigo, esse parâmetro deve ser definido como 10 para reduzir o swap. O swap está nos meus discos rígidos, então é muito mais lento que a minha memória.

Por que eles configuraram o kernel assim?

    
por Hugo 29.08.2013 / 15:06

3 respostas

123

Desde o kernel 2.6.28, o Linux usa um substituto de página Split Least Recently Used (LRU) estratégia. Páginas com uma origem de sistema de arquivos, como texto de programa ou bibliotecas compartilhadas, pertencem ao cache de arquivos. Páginas sem suporte a sistemas 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. Geralmente, as páginas pertencentes ao cache de arquivos são mais baratas para serem removidas da memória (pois podem ser lidas do disco quando necessário) . Como as páginas anônimas não têm backup do sistema de arquivos, elas devem permanecer na memória, desde que sejam 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 swap de alguma forma atrapalha seu sistema. Não ter uma partição swap não significa que o kernel não irá remover páginas da memória, apenas significa que o kernel tem menos opções em relação a quais páginas remover. A quantidade de troca disponível não afetará o quanto ela é usada.

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

A vm.swappiness opçã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 de arquivos recebe um valor de prioridade arbitrário de 200, do qual o modificador vm.swappiness é deduzido ( file_prio=200-vm.swappiness ). 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 em mm/vmscan.c na árvore de origem do kernel.

Dado um vm.swappiness de 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 fosse desejado que as páginas do cache de arquivos fossem removidas em favor de páginas anônimas.

Ao contrário, definir o vm.swappiness para 0 impedirá que o kernel libere páginas anônimas em favor de páginas do cache de arquivos. Isso pode ser útil se os programas realizarem a maior parte do armazenamento em cache, o que pode acontecer com 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 meio-termo aproximado entre esses dois extremos. Como em qualquer parâmetro de desempenho, o ajuste de vm.swappiness deve ser baseado em dados comparativos comparados a cargas de trabalho reais, e não apenas a um pressentimento.

    
por 30.08.2013 / 09:06
9

O problema é que não há um valor padrão que atenda a todas as necessidades. Definir a opção swappiness como 10 pode ser uma configuração apropriada para desktops, mas o valor padrão de 60 pode ser mais adequado para servidores. Em outras palavras, o swappiness precisa ser ajustado de acordo com o caso de uso - desktop versus servidor, tipo de aplicativo e assim por diante.

Além disso, o kernel do Linux usa memória para cache de disco, caso contrário a RAM não seria usada e isso não é eficiente e intencional. Ter dados de disco no cache significa que, se algo precisar dos mesmos dados novamente, provavelmente será obtido 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 de disco. Deveria preferir remover dados antigos do cache ou trocar algumas páginas do programa?

Este artigo pode lançar alguma luz sobre o tema também. Especialmente, como a tendência de troca é estimada.

    
por 29.08.2013 / 15:21
4

Adicionando mais detalhes às respostas acima.
Como estamos usando cada vez mais o VM, um host linux pode ser um vm em um desses ambientes de nuvem. Nos dois exemplos 1 & 2 temos uma boa idéia dos aplicativos em execução e da quantidade de memória RAM que eles consomem. Em 3, não tanto

  • Exemplo 1
    Uma nuvem privada de alto desempenho (pense no tipo em que a maioria dos bancos pagaria milhões) em que o disco é fornecido por um storage array muito caro com IO muito bom. Parte desse armazenamento pode estar na RAM (na matriz de disco) respaldada por discos SSD, respaldados 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 ele pode acessar. Para uma única vm, não há muita diferença entre swap e ram.
  • Exemplo 2
    O mesmo que no 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 memória RAM de armazenamento é cara (relativamente falando). Se dividirmos os requisitos de RAM entre o Hypervisor RAM e o SWAP fornecidos pelo nosso array de armazenamento muito caro, descobrimos que usamos rapidamente toda a RAM no storage array, depois os blocos são servidos pelos SSDs e finalmente pelos spindles. De repente, todo mundo começa a ficar muito lento. Nesse caso, provavelmente queremos atribuir muita RAM (do hipervisor) à VM e definir o swappiness como 0 (trocar apenas para evitar condições de falta de memória), pois o efeito cumulativo de todas as VMs afetará o desempenho de um hipervisor. o armazenamento, em que a configuração do swappiness pode aumentar o desempenho, já que haverá mais memória RAM não utilizada, porque os aplicativos que não estão sendo atualmente interagidos foram (na maioria) trocados.
  • Exemplo 3 Um laptop ou desktop moderno, provavelmente com um SSD. Os requisitos de memória são considerados desconhecidos. Qual navegador será usado pelo usuário, quantas abas eles terão aberto, se também editarão um documento, uma imagem RAW ou possivelmente um vídeo, todos consumirão RAM. Definir a seriedade para um valor baixo e realizar outros ajustes no sistema de arquivos significará que há menos gravações no SSD e, portanto, durará mais.
por 29.04.2016 / 14:05