Wie um zu verhindern für ein Programm / Prozess Paging?
Frage
Ich habe ein Programm, das viel Speicher benötigt, wie 2/3 aller physischen RAM. Nach einiger Laufzeit beginnt mein Betriebssystem das Programm auf der Festplatte zu tauschen. Aber ich brauche das Programm zu reagieren sehr schnell die ganze Zeit, so dass ich Paging für diesen Prozess verhindern müssen.
Wie können Sie das Betriebssystem Swap einen Prozess verhindern?
Vielen Dank für jede Hilfe!
Lösung
Zu Beginn des Programms Aufruf:
mlockall(MCL_CURRENT | MCL_FUTURE);
(Wenn Sie die Quelle nicht auf das Programm haben, werden Sie den Prozess mit ptrace
müssen debauch dies zu tun).
Bitte beachten Sie, dass dies die Chancen der Speicherzuweisungen durch den Prozess erhöht versagen.
Andere Tipps
Nun, es gibt mlock für Speicher Sperren (den Kernel sagen, es nicht sein kann, ausgelagert), aber das ist für relativ kleine Mengen an Speicher gemeint, und würde eine Modifikation des Programms erforderlich ist.
Die andere Option könnte sein, Linux „swappiness“, das heißt seine Tendenz zu tauschen Seiten einzustellen. Siehe hier für eine interessante Diskussion. Das ist nicht möglich, pro Prozess jedoch.
Ich bin nicht bekannt, dass Pro-Prozess-Lösung für Ihr Problem.
Mit mmap () anstelle von malloc, und verwenden Sie die "MAP_LOCKED" Flagge. (Arbeiten unter Linux> 2.5.37)