我启动了 4 个进程进行繁重的计算。该机器有 4 个完整的核心,每个进程都是单线程的,因此它们不会争用 CPU。但是我意识到它们需要的内存比这个系统中实际存在的内存(16GB)还要多。现在它们分配的地址空间加起来大约是 20GB,所以它们每个都有部分地址空间被换出。
因此,我决定暂停其中一个进程,并希望将其内存页面交换,这样物理内存将只为其他三个进程服务。我假设这最终会发生,而三个活动进程将尝试访问交换出的页面。但我想强制执行,这样计算就不必等待 IO。
我的问题:
是否可以强制暂停进程的内存进行交换?(这样当活动进程进行新的分配时就不会发生 IO)
是否可以强制将活动进程的内存返回到 RAM?
这是 Debian SID。
答案1
您可以暂停其中一个进程,例如将调试器附加到该进程。
gdb process_executable process_pid
让 Linux 调度程序完成剩下的工作。当前三个进程终止时,您可以分离调试器以恢复第四个进程。
您只需向进程发出 SIGSTOP 即可实现相同的目的:
kill -stop process_pid
和
kill -cont process_pid
当资源可用时恢复它。将来,您可能会考虑使用某些作业调度程序(例如 Torque)来半自动地根据进程的资源需求调度进程。
编辑:我没有注意到原始问题,没有注意到暂停该过程不是问题。问题是简单地将页面移动到交换并返回需要很长时间。