Por que a maioria das pessoas recomenda reduzir o swap para 10-20?

49

Eu já vi em vários sites que recomendam reduzir o swap para 10-20 para melhor desempenho.

É um mito ou não? Esta é uma regra geral? Eu tenho um laptop com 4GB Ram e 128GB SSD rígido, que valor você recomenda para o meu swappiness?

Obrigado.

    
por Saeed Zarinfam 05.09.2012 / 07:02

6 respostas

78

Porque a maioria acredita que trocar = ruim e que, se você não reduzir o swappiness, o sistema irá trocar quando realmente não precisar. Nenhum desses é realmente verdade. As pessoas associam a troca com os horários em que o sistema está se atolando - no entanto, é principalmente trocar porque o sistema está se atolando, e não o contrário. Quando o sistema trocar, ele já terá fatorado o custo de desempenho em sua decisão de trocar, e decidiu que não fazer isso teria uma penalidade maior no desempenho do sistema ou na estabilidade que mais tarde se tornaria perceptível.

Em geral, as configurações padrão resultam em bom desempenho geral e estabilidade. Eu recomendaria deixá-lo no padrão. Existem melhorias que podem ser feitas em como a troca funciona em sistemas interativos / de desktop, mas em geral o controle de swappiness não é a melhor correção - ajuste-a em uma direção e você pode corrigir um problema e criar outros problemas. Ele empalidece em comparação com a simples instalação de mais RAM.

Como o Linux usa RAM

Qualquer RAM que não esteja sendo usada por aplicativos pode ser usada como "cache". O cache é importante para um sistema de execução rápido e suave, acelerando as leituras e gravações no disco.

Se seus aplicativos aumentarem o uso de memória até o ponto em que estão usando quase toda a sua RAM, o cache diminuirá e, em média, as operações de disco diminuirão como resultado.

Se os aplicativos aumentarem ainda mais o uso de memória - supondo que você não tenha espaço de troca -, eventualmente, ficará sem memória e seu sistema terá que eliminar processos. Processos de morte são piores que desacelerar, pois resulta em instabilidade.

Como o Linux usa swap

Para combater esses dois problemas, o sistema pode realocar algumas memórias de aplicativos raramente usadas no espaço de troca do disco, liberando mais memória RAM. Isso pode evitar que os processos acabem devido à falta de memória e pode recuperar um pouco de cache para que as operações do disco possam funcionar sem problemas.

Esta reatribuição não é feita de acordo com um corte definido. Você não alcança uma certa porcentagem de alocação, então o Linux começa a trocar. Tem um algoritmo "fuzzy". São necessárias muitas coisas, que podem ser melhor descritas por "quanta pressão existe para alocação de memória". Se houver muita "pressão" para alocar nova memória, aumentará as chances de que alguns sejam trocados para ganhar mais espaço. Se houver menos "pressão", diminuirá essas chances.

Seu sistema tem uma configuração "swappiness" que ajuda a ajustar como essa "pressão" é calculada. Normalmente não é recomendado alterar isso. A troca é, em geral, uma coisa muito boa - qualquer penalidade de desempenho ocasional deve ser compensada por um ganho na capacidade de resposta geral do sistema e estabilidade para uma ampla gama de tarefas. Se você reduzir o swappiness, você deixará a quantidade de memória cache encolher um pouco mais do que seria de outra forma, mesmo quando realmente for útil. Portanto, você corre o risco de desacelerar seu computador no geral. Se você for tão longe a ponto de desabilitar completamente a troca, você corre o risco de ser morto devido a não conseguir alocar memória.

O que está acontecendo quando o sistema está sobrecarregado e trocando muito?

A troca é uma operação lenta e dispendiosa, então o sistema evita isso, a menos que calcule que o trade-off no desempenho do cache irá compensá-la globalmente, ou se é necessário evitar o abate de processos.

Muitas das vezes as pessoas olham para o sistema que está sobrecarregando o disco pesadamente e usando muito espaço de swap e troca de culpa por ele. Essa é a abordagem errada a seguir. Se a troca chegar a esse extremo, isso significa que a troca é a tentativa do seu sistema de lidar com problemas de pouca memória, e não a causa do problema.

E os sistemas de desktop? Eles não exigem uma abordagem diferente?

Os usuários de um sistema de desktop realmente esperam que o sistema "sinta-se responsivo" em resposta a ações iniciadas pelo usuário, como abrir um aplicativo, que é o tipo de ação que pode disparar uma troca devido ao aumento de memória necessário .

Uma maneira de tentar e ajustar isso é reduzir o parâmetro swappiness, que pode aumentar a tolerância do sistema a aplicativos usando memória e com pouco espaço de cache.

No entanto, até certo ponto, isso está apenas mudando as metas. O aplicativo agora pode ser carregado sem uma operação de troca, mas deixará menos folga para o próximo aplicativo que é carregado. A mesma troca pode ocorrer apenas mais tarde, quando você abrir um aplicativo em seguida. Enquanto isso, o desempenho do sistema é um pouco mais baixo devido ao tamanho reduzido do cache. Assim, qualquer benefício da configuração de swap reduzida pode ser difícil de medir, reduzindo o atraso de troca em alguns momentos, mas causando outro desempenho lento em outros momentos.Reduzir um pouco a permutabilidade pode ser justificado se você souber o que está fazendo, mas reduzi-lo para apenas 10% deve ser feito com cautela, pois isso pode deixar o sistema tolerante a tamanhos de cache muito baixos e deixar o sistema mais sujeito a tem que trocar a curto prazo.

Desabilitar completamente a troca deve ser evitada, pois você perde a proteção adicional contra condições de falta de memória que podem causar a falha ou a morte de processos.

O remédio mais eficaz, de longe, é instalar mais RAM, se puder pagar.

A troca pode ser desabilitada em um sistema com muita RAM?

Se você tiver muito mais memória RAM do que é provável que você precise para aplicativos, raramente precisará de swap. Desativar o swap provavelmente não fará diferença na maior parte do tempo. Mas se você tiver muita memória RAM, deixar a troca ativada também não terá nenhuma penalidade porque o sistema não troca quando não precisa.

As únicas situações em que seria fazer a diferença estariam na improvável situação em que o sistema está ficando sem memória e, consequentemente, o sistema de cache está ficando prejudicado, e é nesse tipo de situação onde você deseja trocar mais. Assim, você pode deixar a swap com segurança em suas configurações normais para ter mais tranquilidade sem ter um efeito negativo quando tiver bastante memória.

Mas como pode a troca acelerar o meu sistema? Não troca coisas lentas?

O ato de transferir dados da memória RAM para o swap é uma operação lenta, mas só é tomada quando o kernel tem certeza de que o benefício geral como resultado de manter um tamanho razoável de cache irá compensar isso.

Quando os dados estão em swap, quando são lançados novamente?

Qualquer parte da memória retornará do swap assim que for usada - lida ou gravada. No entanto, normalmente a memória que é trocada é a memória que não foi acessada há muito tempo e não é esperado que seja necessária em breve.

A transferência de dados para fora do swap é tão demorada quanto colocá-lo lá. Seu kernel não irá remover dados dele se não precisar. Enquanto os dados estão em swap e não estão sendo usados, ele deixa mais memória para outras coisas que estão sendo usadas, e mais cache do sistema.

    
por thomasrutter 05.09.2012 / 07:24
11

Em uma área de trabalho comum, você tem de quatro a cinco tarefas ativas que consomem de 50 a 60% da memória. Se você definir o swappiness para 60, cerca de 1 / 4-1 / 3 das páginas de tarefas ACTIVE serão trocadas. Isso significa que, para cada mudança de tarefa, para cada nova aba que você abriu, para cada execução de JS, haverá um processo de troca.

A solução é configurar o swappiness em 10. Por observações práticas, isso faz com que o sistema desista do cache de disco io (que desempenha pouca ou nenhuma função na área de trabalho, já que o cache de leitura / gravação não é usado de forma alguma. copiando arquivos LARGE constantemente) ao invés de empurrar qualquer coisa para swap. Na prática, isso significa que o sistema se recusará a trocar páginas, cortando o cache do io, a menos que ele atinja 90% da memória usada. E isso, por sua vez, significa uma experiência de área de trabalho suave, sem alças e rápida.

No servidor de arquivos, no entanto, eu configuraria o swappiness para 60 ou até mais, porque o servidor não possui grandes tarefas ativas em primeiro plano que devem ser mantidas na memória como um todo, mas sim vários processos menores que estão funcionando ou dormindo, e realmente não mudando seu estado imediatamente. Em vez disso, o servidor geralmente serve (perdão) exatamente os mesmos dados para os clientes, tornando os caches do disco io muito mais valiosos. Portanto, no servidor, é muito melhor trocar os processos de suspensão, liberando espaço de memória para solicitações de cache de disco.

Em desktops, no entanto, essa configuração exata leva à troca de blocos de memória de aplicativos REAL, que quase modificam ou acessam constantemente esses dados.

Curiosamente, os navegadores geralmente reservam grandes pedaços de memória, que eles modificam constantemente. Quando esses trechos são trocados, leva algum tempo se eles forem solicitados de volta - e, ao mesmo tempo, o navegador vai atualizar seus caches. O que causa latências enormes. Na prática, você ficará 2 minutos aguardando a página da web em uma nova guia para carregar.

O desktop não se importa com o disco io, porque a área de trabalho raramente lê e grava grandes partes de dados armazenáveis em cache. O corte no disco io para evitar apenas a troca o máximo possível é muito mais favorável para a área de trabalho do que ter 30% da memória reservada para o cache de disco, com 30% da RAM (cheia de blocos pertencentes a aplicativos usados ativamente) removidos.

Basta iniciar o htop, abrir um navegador, o GIMP e o LibreOffice. Carregue alguns documentos e navegue por várias horas. É realmente assim tão fácil.

    
por Linux dude 02.06.2014 / 00:10
9

Se você executar um servidor Java em seu sistema Linux, você deve considerar reduzir o swap do valor padrão de 60. Então, 20 é realmente um bom começo. Trocar é um matador para um processo de coleta de lixo porque as coleções precisam tocar partes grandes da memória do processo. O sistema operacional não tem os meios para detectar tais processos e fazer as coisas certas para eles. É uma boa prática evitar a troca o máximo possível para servidores de aplicativos produtivos.

    
por Andreas 25.02.2014 / 13:22
4

Eu sugeriria fazer alguns experimentos com o monitor do sistema aberto para ver exatamente a carga da sua máquina, eu também estou rodando com 4GB de memória e um SSD de 128GB então alterei o valor do swappiness para 10, o que não só melhorou o desempenho sob carga, mas como um bônus também aumentará a vida útil da unidade SSD, uma vez que sofrerá menos gravações.

Para um tutorial em vídeo simples sobre como fazer isso com uma explicação completa veja o vídeo do YouTube abaixo

link

    
por Tech-Compass 07.06.2014 / 18:20
1

Pode ser que muito do comportamento de troca percebido na inicialização ou na abertura de programas seja o Linux lendo arquivos de configuração, etc. do disco. Portanto, talvez seja melhor procurar usando o programa de monitoramento do sistema antes de assumir que o acesso ao disco rígido é devido à troca.

    
por user1740850 24.04.2013 / 19:57
1

Eu quero adicionar algumas perspectivas de um engenheiro de Big Data Performance para dar aos outros mais informações sobre a tecnologia de 2017.

Minha experiência pessoal é que, embora eu tenha desativado a troca para garantir que meus sistemas estejam funcionando na velocidade máxima, na minha estação de trabalho para um problema específico, descobri que o swap de 1 e 10 leva ao congelamento (para sempre) e longo pausas. A trepidação de 80 para esse aplicativo em particular leva a um desempenho muito melhor e a pausas mais curtas do que o padrão (60). Note que eu tinha 8GB de RAM e 4x 256GB de swap apoiados por 1 HDD. Eu normalmente diria estatísticas precisas vistas em meus benchmarks e as especificações completas de hardware, mas ainda não fiz nada e é um desktop de baixo custo recente que não é importante aqui.

De volta à minha antiga empresa, a razão pela qual não habilitamos swappiness nos servidores Spark com [500GB a 4TB] x [10-100] nós é que vimos um desempenho ruim como um sinal para redesenhar o pipeline de dados e estruturas de dados em de uma maneira mais eficiente. Nós também não queríamos comparar os HDDs / SSDs. Além disso, a troca de muita RAM precisaria de 10 a 30 discos por nó com gravações paralelas para minimizar o tempo de acesso ao disco.

Hoje, 20 anos atrás e 20 anos no futuro, o caso ainda será de que alguns problemas são grandes demais para a RAM. Com tempo e dinheiro infinitos, podemos comprar / alugar mais hardware ou redesenhar qualquer processo para obter o desempenho a um nível desejável. Trocar é apenas um hack para nos permitir ignorar o problema real (não temos carneiro suficiente e não queremos gastar mais).

Para aqueles que acham que maior swappiness é um mau conselho, aqui está uma pequena perspectiva. No passado, os HDs tinham apenas alguns kb de cache, se algum. A interface foi IDE / Parallel ATA. O barramento da CPU também foi muito mais lento junto com a RAM e muitas outras coisas. Em suma, os sistemas eram muito lentos (em relação aos dias de hoje) em todos os sentidos. Há alguns anos, os HDDs usavam o SATA3. Hoje, eles usam o protocolo NVMe, que possui melhorias significativas de latência. Os HDs têm muitos MB de cache. E a parte mais interessante é quando você usa um SSD moderno (resistência e desempenho de leitura / gravação muito mais estável) com NVMe ou PCIe como seu armazenamento de swap. É o melhor compromisso entre custo e desempenho. Por favor, não tente isso com SSDs baratos ou antigos.

Troque + SSDs! Com o armazenamento volátil de alto desempenho, recomendo strongmente que você experimente um alto valor de swappiness. Depende principalmente dos padrões de acesso à memória (acessando aleatoriamente toda a memória versus raramente acessando a maioria), uso da memória, se a largura de banda do disco já estiver saturada e o custo real da surra.

    
por ldmtwo 25.04.2018 / 22:21