Estou usando o zram no meu computador como uma troca compactada suportada por RAM. Quando o sistema precisa trocar algo, trocá-lo para um arquivo de troca suportado por zram é mais ou menos equivalente a compactar esses dados na memória para liberar espaço. Isso torna a troca muito rápida na maioria das vezes, em relação à troca com suporte em disco. Por causa disso, pergunto-me se há algum desempenho a ser ganho, incentivando o sistema a trocar itens não utilizados de forma mais agressiva, pois isso pode ser feito sem atingir o disco?
Alguém já mexeu com, digamos, a configuração vm.swappiness
de 100 enquanto usava o zram? Isso seria desejável?
sysctl -w vm.swappiness=100
Respostas:
Eu realmente não recomendaria colocar o swappiness mais alto. Um mecanismo comum no kernel é que ele coloca páginas (partes da memória) no swap para liberar memória para outras tarefas em execução.
Primeiro "problema" quando o kernel deseja que n páginas sejam liberadas, m (com m <n, m é o número de páginas compactadas necessárias para conter n) são criadas recentemente na RAM, não tenho certeza se isso pode perturbar o kernel ou não.
De qualquer maneira, quando você tiver páginas na troca, é possível que você use o aplicativo posteriormente com algumas de suas páginas na troca. O que o kernel faz é trazer de volta essas páginas para a memória física, mas não as remove da troca (que com troca padrão pode ser vista como cache , portanto, quando o aplicativo volta em segundo plano, o kernel não precisa gravar essas páginas para a troca lenta). No entanto, com o zram, talvez não seja um truque sábio, porque você terá na memória as m páginas em zram + as n páginas que estão de volta na memória!
O kernel normalmente possui uma "memória total" que pode ser usada para fazer seus negócios. Quando você adiciona o zram, ele conta apenas na memória "swap", como seria com qualquer troca baseada em disco, mas reduziu a "memória total" real e isso não é esperado / antecipado pelo kernel. Às vezes, você pode ter um comportamento estranho e não desejado por causa disso!
Com o zram, seria bom que o kernel não troque muito nessa área quando estiver sob pressão de memória. E você sempre deve ter uma partição de troca de disco rígido real maior que o tamanho máximo do seu zram, para que o sistema não obtenha OOM, enquanto ao mesmo tempo você veria bastante espaço livre, conforme relatado por
free
!fonte
Resposta curta:
vm.swappiness=100
é o valor apropriado para zram (pelo menos no Debian Stretch com Linux 4.9, acredito que seja o melhor valor)Eu já testei
vm.swappiness=100
para mim.Eu acho que você pode fazer um teste simples para garantir que valor é melhor para você.
Também fiz outro programa simples para testar esta questão. x Na minha máquina, um
vm.swappiness
valor muito baixo (comovm.swappiness=1
) causará um problema óbvio de resposta.Sobre
SwapCached
em/proc/meminfo
:Primeiro, tente
vm.page-cluster=0
, isso talvez possa reduzir alguns inúteisSwapCached
da troca.O SwapCached pode acelerar o zram da mesma forma que o dispositivo de troca não-zram
SwapCached
pode reutilizar (gratuito) quando necessário:fonte
As páginas precisam ser trocadas (para o disco) quando a memória estiver cheia. Se você estiver usando a memória para criar um local para trocar as páginas quando a memória estiver cheia, seria de supor que isso supera o objetivo, exceto se a compactação fizer alguma diferença (e seria natural compactar a memória diretamente em vez de passar por ela troca). Acho que seria necessário avaliar isso, pois os computadores são cada vez mais rápidos na compactação e descompactação em comparação com a velocidade da memória.
fonte
vm.swappiness
valor está ajustado para a troca com suporte em disco e se devo alterá-lo, se eu usarei principalmente a troca com zram.