将应用程序显式移动到交换区

将应用程序显式移动到交换区

在 Linux/Unix 系统中是否可以将进程显式移动到内存交换?我研究过swap*工具,kill但它们不能做我想做的任何事情。

例子:进程FOO当前正在运行,我想启动另一个进程BAR,该进程不适合 RAM,因此将被交换。我BAR现在希望运行得更快,所以我FOO想先移动到交换空间,然后运行BAR。退出后BAR,我想取消交换FOO

答案1

我不知道有什么方法可以请求在 Linux 上将内存的特定部分移动到交换区。然而,相反的情况也是可能的。您只需运行 即可显式预加载 BAR 用于缓存的文件cat /path/to/file >/dev/null

如果 BAR 已经在运行并且部分被换出,在 Linux 上,您可以安排通过读取来加载其页面。看/proc/BAR_PID/memLinux下如何读取/proc/$pid/mem?

另外,如果您想让一些内存可供 BAR 快速消耗,您可以启动一个分配大量内存的程序。这并不理想,因为内核可能决定换出其他一些进程,或者从磁盘缓存中删除有用的文件。为了获得最佳结果,请在换入任何您想要显式换入的内容之前执行此操作,并暂停 FOO ( )。分配大约 2×1234567 字节的内存加上变化。kill -STOP FOO_PIDperl -e '$a = "a" x 1234567'

相关内容