2010-03-02 23 views
15

我有一個需要大量內存的程序,比如所有物理內存的2/3。運行一段時間後,我的操作系統開始將程序交換到硬盤。但是我需要程序非常快速地響應,所以我需要防止對該進程進行分頁。如何防止一個程序/進程分頁?

如何防止操作系統交換一個進程?

感謝您的幫助!

回答

8

在節目開始時,撥打電話:

mlockall(MCL_CURRENT | MCL_FUTURE); 

(如果你沒有來源的程序,你必須放蕩的過程與ptrace做到這一點)。

請注意,這會增加進程發生內存分配失敗的機會。

+0

我不認爲你*會「放棄」這個過程。除非你有機會接觸到Tron的技術。 :) –

+2

「debauch」一個過程意味着它醉了,與它的黨,等等...... :) – dicroce

+0

我認爲這是一個公平的比喻:) – caf

4

使用mmap()而不是malloc,並使用「MAP_LOCKED」標誌。 (在Linux上工作> 2.5.37)

+0

請注意,這將具有與使用* mlock *相同的效果(相對於交換);所以同樣的注意事項適用。 – sleske

+0

這裏有一個關於這個技巧的關於@ kerneltrap的討論鏈接:http://kerneltrap.org/node/7878 – dicroce

6

嗯,有鎖定內存(告訴內核它可能不會被換出)mlock,但這意味着相對少量的內存,並需要修改程序。

另一種選擇可能是調整Linux的「swappiness」,即它換出頁面的傾向。請參閱here進行有趣的討論。但是,每個流程都不可能。

我不知道任何針對您問題的進程解決方案。