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?
Respostas:
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.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 do arquivo recebe um valor de prioridade arbitrário de 200, do qual ovm.swappiness
modificador é 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 namm/vmscan.c
árvore de origem do kernel.Dado um
vm.swappiness
de100
, 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.swappiness
to0
impedirá 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.swappiness
deve se basear em dados de benchmark comparáveis às cargas de trabalho reais, não apenas um pressentimento.fonte
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.
fonte
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
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.
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,
fonte