Question

J'ai un programme qui nécessite beaucoup de mémoire, comme 2/3 de toute la RAM physique. Après un certain temps d'exécution mon système d'exploitation commence à échanger le programme hdd. Mais j'ai besoin du programme pour répondre très vite tout le temps, donc je dois éviter la pagination pour ce processus.

Comment pouvez-vous empêcher le système d'exploitation d'échanger un processus?

Merci pour toute aide!

Était-ce utile?

La solution

Au début du programme, appelez:

mlockall(MCL_CURRENT | MCL_FUTURE);

(Si vous ne possédez pas la source du programme, vous devrez debauch le processus avec ptrace de le faire).

Sachez que cela augmentera les chances des allocations de mémoire effectuées par l'échec du processus.

Autres conseils

Eh bien, il y a mlock pour la mémoire de verrouillage (dire le noyau, il ne peut pas être troqué), mais qui est destiné à des quantités relativement faibles de la mémoire, et nécessiterait une modification du programme.

L'autre option pourrait être d'ajuster « la swappiness » de Linux, à savoir sa tendance à échanger des pages. Voir pour une discussion intéressante. Ce n'est pas possible par processus, cependant.

Je ne suis pas au courant d'une solution par processus pour votre problème.

Utiliser mmap () au lieu de malloc et utiliser le drapeau "MAP_LOCKED". (Fonctionne sur Linux> 2.5.37)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top