Como evitar a paginação para um programa / processo?
Pergunta
Eu tenho um programa que requer muita memória, como 2/3 de toda a RAM física. Depois de algum tempo de execução, meu sistema operacional começa a trocar o programa para HDD. Mas preciso que o programa responda muito rápido o tempo todo, então preciso evitar a paginação para esse processo.
Como você pode impedir que o sistema operacional trocasse um processo?
Obrigado por qualquer ajuda!
Solução
No início do programa, ligue:
mlockall(MCL_CURRENT | MCL_FUTURE);
(Se você não tiver a fonte do programa, terá que debaugar o processo com ptrace
para fazer isso).
Esteja ciente de que isso aumentará as chances de alocações de memória feitas pelo processo falhando.
Outras dicas
Bem, há mlock Para bloquear a memória (informando ao kernel que não pode ser trocada), mas isso é para quantidades relativamente pequenas de memória e exigiria a modificação do programa.
A outra opção pode ser ajustar o "Swappiness" do Linux, ou seja, sua tendência a trocar as páginas. Ver aqui Para uma discussão interessante. Isso não é possível por processo, no entanto.
Não estou ciente de nenhuma solução por processo para o seu problema.
Use Mmap () em vez de Malloc e use o sinalizador "map_locked". (funciona no Linux> 2.5.37)