2010-03-02 5 views
15

Ich habe ein Programm, das viel Speicher benötigt, wie 2/3 aller physischen RAM. Nach einiger Laufzeit beginnt mein Betriebssystem das Programm auf Festplatte zu tauschen. Aber ich brauche das Programm, um die ganze Zeit sehr schnell zu antworten, also muss ich das Paging für diesen Prozess verhindern.Wie verhindert man Paging für ein Programm/Prozess?

Wie können Sie verhindern, dass das Betriebssystem einen Prozess austauscht?

Danke für jede Hilfe!

Antwort

8

Zu Beginn des Programms nennen:

mlockall(MCL_CURRENT | MCL_FUTURE); 

(Wenn Sie nicht die Quelle für das Programm haben, werden Sie den Prozess mit ptrace müssen debauch dies zu tun).

Beachten Sie, dass dies die Wahrscheinlichkeit erhöht, dass Speicherzuweisungen durch den Prozess fehlschlagen.

+0

Ich glaube nicht, dass Sie * * den Prozess "debaunen" können. Es sei denn, Sie haben Zugriff auf die Technologie von Tron. :) –

+2

"debauch" in einem Prozess bedeutet, es betrunken zu machen, Party damit, etc ... :) – dicroce

+0

Ich denke, das ist eine faire Metapher :) – caf

4

Verwenden Sie mmap() anstelle von malloc und verwenden Sie das Flag "MAP_LOCKED". (funktioniert auf Linux> 2.5.37)

+0

Beachten Sie, dass dies den gleichen Effekt (in Bezug auf das Swapping) hat wie die Verwendung von * mlock *; also gelten die gleichen Vorbehalte. – sleske

+0

Hier ist ein Link zu einer Diskussion @ Kerneltrap in Bezug auf diese Technik: http://kerneltrap.org/node/7878 – dicroce

6

Nun, es gibt mlock zum Sperren von Speicher (sagt dem Kernel, es kann nicht ausgelagert werden), aber das ist für relativ kleine Mengen an Speicher gedacht, und würde eine Änderung des Programms erfordern.

Die andere Möglichkeit könnte sein, die "Swappiness" von Linux anzupassen, d. H. Die Tendenz, Seiten auszutauschen. Eine interessante Diskussion finden Sie unter here. Dies ist jedoch pro Prozess nicht möglich.

Mir ist keine Pro-Prozess-Lösung für Ihr Problem bekannt.