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!

Foi útil?

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)

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