强制进程仅使用交换内存?

Ale*_*llo 5 memory linux performance swap

我有一个自定义程序,可以对某些数据进行分析。这是一个非常消耗内存的操作,可能会使用数千 GB 的 RAM。我的电脑只有 16GB RAM,所以我唯一的解决方案是在大硬盘上使用交换内存。

我已经成功地做到了这一点,并且效果很好,但是在开始使用交换空间之前,该过程首先耗尽了我所有的真实 RAM。这使得我的计算机在执行该操作所需的很长一段时间内完全无法使用。这也使得监控​​操作变得困难,因为一切都变得极其缓慢且无响应。

那么Linux中有没有办法强制单个进程只使用交换空间中的内存呢?(无需实现自定义分配器)

理想情况下,我可以让程序在后台运行(可能持续几天或几周),同时仍然可以访问计算机。为程序增加约 16GB RAM 的好处似乎不值得损失一台计算机多天。

Tom*_*mas 6

那么Linux中有没有办法强制单个进程只使用交换空间中的内存呢?(无需实现自定义分配器)

不,这是不可能的。该进程无法在交换区上运行;它必须始终首先将内存页面从交换区加载到物理内存,然后进程才能继续运行。

所以你需要的是告诉系统限制进程的资源,例如通过cgroups,如卡米尔的评论所建议的,或者我会尝试prlimit (1),设置这两个限制中的第一个或两个:

  • 最大驻留集大小 (RSS) - 总进程在物理 RAM 中拥有多少内存
  • 最大锁定内存地址空间 - RAM 中可以固定多少内存而不被换出。