Como posso ajustar o kernel para a total troca?

5

Gostaria de implantar a seguinte política de troca:

  • Por padrão, todas as páginas na memória também devem estar no espaço de troca.
  • Quando uma página na memória é alterada (ou seja, suja), a página deve ser escrita o mais rápido possível, mas com menor prioridade que outros processos.
  • se uma determinada marca d'água configurável for atingida (digamos que 80% das páginas estejam sujas), a prioridade será igual a outros processos.

Esse tipo de política de troca é possível com o kernel do Linux? Se sim, como faço para definir as configurações do kernel para conseguir isso?

Editar:

Obviamente, a razão para isso é reduzir o número de páginas que precisam ser trocadas. Apenas páginas sujas precisam ser gravadas no disco, e isso acontece em segundo plano ao longo do tempo. Portanto, quando ocorrem erros de página (ou seja, a página não está na memória), não há necessidade de gravar páginas da memória em disco, mas apenas do disco para a memória. Por isso, reduziu a probabilidade de gargalos de entrada / saída porque ambos trocando e trocando tentam acessar o disco simultaneamente.

    
por txwikinger 13.08.2010 / 23:30

3 respostas

4

Você pode definir o valor de /proc/sys/vm/swappiness para controlar a proporção de segmentos de dados trocados para os segmentos de dados mantidos na memória. Um valor de 0 evita completamente a troca a todo custo.

Isso pode ser feito usando:

  • echo 0 > /proc/sys/vm/swappiness
  • sysctl -w vm.swappiness=0
  • Armazenando essa configuração em /etc/sysctl.conf

Geralmente, usar apenas uma pequena troca não é uma coisa ruim. A memória livre pode ser usada para armazenar em cache dados lidos do disco, e o sistema pode planejar com antecedência uma necessidade súbita de muita memória por um aplicativo.

Quando muitos programas são trocados, no entanto, há muita atividade relacionada ao disco durante cada mudança de programa, o que realmente torna tudo mais lento. Antes que algo possa ser usado, ele precisa ser carregado de volta na memória.

As leituras de discos são terrivelmente lentas em comparação com o acesso à memória, pois leva muito mais tempo para os dados chegarem. O sistema precisa agendar a leitura entre as outras solicitações de leitura / gravação, o inversor começa a tentar encontrar o cilindro certo e, finalmente, começa a fornecer dados lentamente.

Por isso, acho que sua lógica é falha. Geralmente, você deseja manter os programas em execução na memória, mantendo espaço suficiente para o crescimento repentino. Não use o swap com muita frequência para "gravar coisas no disco", porque não é um backup nem uma melhoria de desempenho.

Computadores mais antigos continham menos memória e sofriam com a troca de problemas como resultado. Quando muitos programas eram abertos ao mesmo tempo, o sistema ficava mais lento e você podia ouvir a leitura e a gravação do disco para o arquivo de troca.

    
por 20.08.2010 / 01:24
3

Só porque o seu sistema está trocando, não significa que você tenha um problema. Existem aplicativos que são ajustados para aproveitar o swap sem prejudicar o desempenho do sistema. A maioria dos sistemas de banco de dados relacionais é ajustada desta forma: IE: Oracle e Cache, provavelmente sendo os dois maiores.

Se você usar a hibernação, ele usa o espaço de troca para o armazenamento de RAM. Ao inicializar o sistema, tudo na troca é adicionado de volta à RAM. Dessa forma, você pode desligar seu sistema sem mastigar a bateria como espera, e ainda voltar para onde parou antes de desligar. Como resultado, sua bateria durará muito mais tempo.

Trocar pode ser uma ótima coisa, porque libera mais da sua RAM ativa, para manter o desempenho do seu sistema alto. Quando sua RAM ativa é preenchida E sua troca é preenchida, e você ainda precisa de mais espaço, então e só então, você tem um problema. Até esse ponto, a swap está aqui para ajudá-lo, não para machucá-lo.

    
por 19.08.2010 / 09:47
1

Adicionando a resposta do vdboor, eu acho que para conseguir o que você quer, você precisa modificar mais de swappiness . Existem mais sintetizadores de kernel disponíveis que controlam como a troca é usada. O usuário pode acessá-los em tempo de execução por meio de /proc/sys/vm/* arquivos ou defini-los permanentemente em /etc/sysctl.conf (isso pode ser necessário adicionar o script sysctl init à sua seqüência de inicialização para ter um efeito)

As configurações são bem abordadas na documentação do kernel do Linux. Você pode encontrá-lo em <your_kernel_sources_path>/Documentation/sysctl/vm.txt . Você também pode dar uma olhada em alguma documentação on-line como essa .

    
por 27.08.2011 / 14:31