Todas as distribuições GNU / Linux que testei até agora têm o problema de que, sempre que a memória RAM é preenchida e o sistema começa a ser trocado, toda a interface gráfica do usuário e da área de trabalho fica sem resposta, como um inferno, a tal ponto que às vezes eu tenho que esperar cerca de 5 a 10 segundos depois tendo movido o mouse físico até que o ponteiro do mouse esteja realmente se movendo.
Esse é um tipo de comportamento irritante, especialmente em sistemas com pouca memória RAM.
Existe alguma maneira de dar a alguns aplicativos / trabalhos, como o ambiente de desktop, etc., uma prioridade mais alta para permanecer no RAM do que outros aplicativos, para que o aplicativo que realmente monopoliza toda a memória seja trocado antes do ambiente de desktop etc.?
EDIT: Estou falando do caso em que toda a RAM é usada, portanto ela sempre começará a trocar se não estiver desativada (não quero que os processos sejam mortos aleatoriamente). Eu tive esse problema não apenas em ambientes com pouca RAM, mas também com 8GiB de RAM na minha máquina desktop, em parte devido a muitas VMs, em parte por causa de vazamento de memória. O ZRAM também não é uma solução, pois está apenas atrasando o problema. A única solução em que posso pensar para esse problema é algum utilitário de espaço do usuário ou API do kernel que permite impedir a troca de determinados trabalhos ou, pelo menos, torná-lo muito improvável. Alguém conhece outra solução ou sabe alguma coisa sobre essa ferramenta ou API existente ou sendo planejada?
2ª EDIT: ulatencyd parece não funcionar com versões mais recentes do systemd, de acordo com https://aur.archlinux.org/packages/ulatencyd-git/ e https://wiki.archlinux.org/index.php/Ulatencyd . Isso pode ocorrer porque o systemd assumiu o controle total dos cgroups da perspectiva do espaço do usuário, se eu entendi corretamente.
cgroup_enable=memory swapaccount=1
na linha de comando do kernel; observe que isso tem um custo menor de desempenho). Exemplo de implementação: ulatencyd .Respostas:
Até onde eu sei, esse não é um problema específico do Linux, é o modo como o SWAP (ou memória virtual) funciona. Se o sistema operacional precisar procurar dados no disco rígido, em oposição à RAM, ele diminuirá a velocidade. Nada que você possa fazer sobre isso, acessar o disco é muito mais lento que acessar a RAM.
Você não poderá definir a prioridade com a qual os processos são trocados, isso é determinado pelo kernel que tentará maximizar a eficiência; você não poderá fazê-lo melhor. O que você pode fazer é definir a prioridade da CPU de um processo e isso pode ajudar. Seu sistema está sendo desativado devido ao tempo necessário para ler de / para SWAP, isso significa que a CPU terá que aguardar a recuperação dos dados relevantes pelo processo solicitando-os antes que possa continuar. Se você definir seu DE para ter uma prioridade mais alta para acesso à CPU, isso deve levar suas operações ao topo e acelerar um pouco as coisas.
Portanto, a prioridade da CPU é definida com os comandos
nice
erenice
:As prioridades vão de -20 (prioridade mais alta) a 20 (prioridade mais baixa). Para alterar a prioridade de um processo em execução, você pode:
onde
$PID
está o PID do processo cuja prioridade você deseja aumentar. Você pode usarpgrep
para descobrir qual é. Por exemplo:A outra opção seria definir a ' troca ' do sistema, que determina quando iniciará a troca. Um valor de troca de 1 significa que ele será trocado apenas para evitar erros de falta de memória. Valores mais altos significam que ele começará a trocar mesmo quando ainda houver memória física disponível. Você pode definir isso como um valor relativamente baixo para fazer o sistema trocar o mínimo possível. Adicione esta linha a
/etc/sysctl.conf
:CUIDADO: Isso não é uma boa ideia, se você não tem muita RAM, o swap é uma coisa boa em geral, você precisará brincar um pouco com os valores para encontrar o equilíbrio certo para o seu sistema.
fonte