Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有一个程序需要很多内存,比如所有物理内存的 2/3。运行一段时间后,我的操作系统开始将程序交换到硬盘。但是我需要程序一直响应非常快,所以我需要防止该进程的分页。
如何防止操作系统交换一个进程?
谢谢你的帮助!
在程序开始时,调用:
mlockall(MCL_CURRENT | MCL_FUTURE);
(如果您没有该程序的源代码,则必须破坏该过程ptrace才能执行此操作)。
ptrace
请注意,这将增加进程失败进行内存分配的机会。
好吧,有mlock用于锁定内存(告诉内核它可能不会被换出),但这意味着相对少量的内存,并且需要修改程序。
另一个选项可能是调整 Linux 的“swappiness”,即换出页面的倾向。请参阅此处进行有趣的讨论。但是,每个进程不可能做到这一点。
我不知道您的问题有任何按流程解决的方案。
使用 mmap() 代替 malloc,并使用“MAP_LOCKED”标志。(适用于 linux > 2.5.37)