强制取消进程页面交换

强制取消进程页面交换

我启动了 4 个进程进行繁重的计算。该机器有 4 个完整的核心,每个进程都是单线程的,因此它们不会争用 CPU。但是我意识到它们需要的内存比这个系统中实际存在的内存(16GB)还要多。现在它们分配的地址空间加起来大约是 20GB,所以它们每个都有部分地址空间被换出。

因此,我决定暂停其中一个进程,并希望将其内存页面交换,这样物理内存将只为其他三个进程服务。我假设这最终会发生,而三个活动进程将尝试访问交换出的页面。但我想强制执行,这样计算就不必等待 IO。

我的问题:

  1. 是否可以强制暂停进程的内存进行交换?(这样当活动进程进行新的分配时就不会发生 IO)

  2. 是否可以强制将活动进程的内存返回到 RAM?

这是 Debian SID。

答案1

您可以暂停其中一个进程,例如将调试器附加到该进程。

 gdb process_executable process_pid

让 Linux 调度程序完成剩下的工作。当前三个进程终止时,您可以分离调试器以恢复第四个进程。

您只需向进程发出 SIGSTOP 即可实现相同的目的:

 kill -stop process_pid

 kill -cont process_pid

当资源可用时恢复它。将来,您可能会考虑使用某些作业调度程序(例如 Torque)来半自动地根据进程的资源需求调度进程。

编辑:我没有注意到原始问题,没有注意到暂停该过程不是问题。问题是简单地将页面移动到交换并返回需要很长时间。

相关内容