17

我有一个程序需要很多内存,比如所有物理内存的 2/3。运行一段时间后,我的操作系统开始将程序交换到硬盘。但是我需要程序一直响应非常快,所以我需要防止该进程的分页。

如何防止操作系统交换一个进程?

谢谢你的帮助!

4

3 回答 3

8

在程序开始时,调用:

mlockall(MCL_CURRENT | MCL_FUTURE);

(如果您没有该程序的源代码,则必须破坏该过程ptrace才能执行此操作)。

请注意,这将增加进程失败进行内存分配的机会。

于 2010-03-02T00:43:06.647 回答
6

好吧,有mlock用于锁定内存(告诉内核它可能不会被换出),但这意味着相对少量的内存,并且需要修改程序。

另一个选项可能是调整 Linux 的“swappiness”,即换出页面的倾向。请参阅此处进行有趣的讨论。但是,每个进程不可能做到这一点。

我不知道您的问题有任何按流程解决的方案。

于 2010-03-02T00:24:15.297 回答
4

使用 mmap() 代替 malloc,并使用“MAP_LOCKED”标志。(适用于 linux > 2.5.37)

于 2010-03-02T00:23:29.807 回答