Quais são as condições exatas com base em qual processo Linux swaps (s) de memória RAM para um arquivo de swap?

StackOverflow https://stackoverflow.com/questions/2029015

Pergunta

O meu servidor tem 8Gigs de RAM e 8Gigs configurado para arquivo de troca. Eu tenho aplicativos que usam muita memória em execução. Esses aplicativos têm picos de carga durante o qual encontramos aumento do uso swap. Cerca de 1 GIG de swap é utilizado.

Eu tenho um outro servidor com 4gigs de RAM e 8 GB de swap e aplicativos que consomem muita memória semelhantes que funcionam nele. Mas aqui a utilização de swap é muito insignificante. Cerca de 100 MB.

Eu queria saber quais são as exata condições ou um fórmula áspero com base no qual o Linux vai fazer um swapout de uma memória processo na RAM para o arquivo de swap. Eu sei que é fator swapiness baseado. O que mais é que se baseia? Trocar o tamanho do arquivo? Os ponteiros para Linux kernel do código de documentação / fonte explicando isso vai ser ótimo.

Foi útil?

Solução

Eu vi um monte de pessoas postando explicações subjetivas de que este faz. Aqui está esperamos uma resposta mais completa.

No LRU dividida em pós 2.6.28 Linux swappiness é um multiplicador usado para arbitrariamente modificar a fração que é calculado determinando a pressão acumulada, tanto LRUs.

Assim, por exemplo em um sistema sem memória livre à esquerda - o valor da memória existente você tem é medido com base off da taxa de quanta memória está listada como 'ativo' e a taxa de quantas vezes as páginas são promovidos a ativa depois de cair para a lista de inativos.

Uma LRU com muitas promoções / despromoções de páginas entre ativos e inativos está em um monte de utilização.

armazenamento

Normalmente arquivo copiado é mais barato e mais seguro para despejar quando a sua falta de memória e automaticamente recebe um modificador de 200 (isto faz com que ficheiro de cópia de memória 200 vezes mais inútil do que troca apoiado memória (que tem um valor de 0), quando multiplica essa fração.

O que swappiness faz é modificar esse valor, deduzindo o número swappiness lhe deu (padrão 60) para a memória de arquivo e adicionando o valor swappiness lhe deu como um multiplicador para a memória Anon. Assim, o padrão swappiness deixa você com memória anônima sendo 80 vezes mais valioso do que a memória de arquivo (200-60 para o arquivo, 0 + 60 para Anon). Assim, em um sistema Linux típico que usou-se toda a sua memória, cache de página teria que ser 80 vezes mais ativo do que a memória anônimo para memória anônima para ser trocada em favor de cache de página.

Se você definir swappiness a 100 isso dá Anon um modificador de 100 e memória do arquivo de um modificador de 100 (200 - 100) deixando ambos LRUs mesmo peso. Assim, em um sistema pesado arquivo que quer cache de página que fornece a memória Anon não é tão ativa como cache de página, em seguida, Anon memória será trocado para o disco ao espaço make para cache de página extra.

Outras dicas

Linux (ou qualquer outro sistema operacional) divide a memória em páginas (normalmente 4KB). Cada uma dessas páginas representam um pedaço de memória. informações de uso para estas páginas é mantida, o que basicamente contém informações sobre se a página está livre ou está em uso (parte de algum processo), se foi acessada recentemente, que tipo de dados que ele contém (dados do processo, o código executável etc. ), proprietária da página, etc. Estas páginas também pode ser dividido em duas categorias - páginas do sistema de arquivos ou o cache de página (em que ler todos os dados / escrita aos seus reside sistema de arquivos) e páginas pertencentes a processos.

Quando o sistema estiver com pouca memória, o kernel inicia trocar páginas com base em seu uso. Usando uma lista de páginas ordenadas recência w.r.t de acesso é comum para determinar quais as páginas que podem ser trocados (linux kernel tem essa lista um também).

Durante a troca, as necessidades do Linux kernel para decidir o que trade-off quando nuking páginas na memória e enviá-los para swap. Se ele troca páginas do sistema de arquivos de forma muito agressiva, mais leituras são necessárias do sistema de arquivos para ler essas páginas de volta quando eles são necessários. No entanto, se troca de páginas de processo de forma mais agressiva pode ferir interatividade, porque quando o usuário tenta usar os processos trocados, eles terão de ser lido de volta a partir do disco. Veja uma discussão agradável aqui sobre isso.

Ao definir swappiness = 0, você está dizendo que o kernel Linux não para trocar páginas pertencentes a processos. Ao definir swappiness = 100 em vez disso, você dizer ao kernel para trocar páginas pertencentes a processos de forma mais agressiva. Para sintonizar o seu sistema, tente alterar o parâmetro swappiness em passos de 10, monitorar o desempenho e páginas que estão sendo trocados in / out em cada configuração usando o comando "vmstat". Mantenha a configuração que lhe dá os melhores resultados. Lembre-se de fazer este teste durante o horário de pico de uso. :)

Para aplicações de banco de dados, swappiness = 0 é geralmente recomendado. (Mesmo assim, testar configurações diferentes em seus sistemas para chegar a um valor bom).

Referências:
http: //www.linuxvox. COM / 2009/10 / o que-é-o-linux-kernel-parâmetro-vm-swappiness /
http://www.pythian.com/news/1913/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top