告诉 Linux 使用交换区做什么

告诉 Linux 使用交换区做什么

我使用的是 Ubuntu 20.04 服务器版。

我有 512GB 的 RAM,其中大约 130GB 通常用于计算机上运行的进程。我还有两个 ramdisk (tmpfs),均配置为 500GB。

随着 tmpfs 磁盘扩展和收缩它们使用的 RAM 量(具体取决于它们的满载程度),通常 ramdisk 使用的 RAM 量很少,总共可能为 200GB。

我更换了一个快速 NVMe 驱动器,大约 1000GB。有时,RAM 使用量会在短时间内出现峰值(仅几秒钟)。

在这些时刻,我如何告诉 Linux 它应该始终将内存提供给进程并使用驱动器的交换空间?

答案1

据我所知(FelixJN 的链接似乎也同意),RAM 中的所有内容都是同样可交换的,并且交换内容的决定取决于新鲜度,而不是数据类型。我的猜测是,即使对于您的用例来说,这也是一个很好的启发式方法!

不过,你至少可以做一点欺骗。

假设您的 512GB RAM 机器是一台 NUMA 机器:您可以将 tmpfs 分配(参见man tmpfs: mpol)到特定节点的内存,并且至少将所有内存集中在一个节点上。

但老实说:不是将 200 GB(!)的数据直接放在 SSD 上,而是使用非常大的文件系统缓冲区和非常低的压力将这些数据刷新到存储工作?当您的进程耗尽内存时,内核将开始将缓冲区刷新到 SSD,并限制对您之前放入 tmpfs 的文件的访问,这实现了您想要的:当内存压力较高时,您的临时文件将存储到 SSD 上,如果有足够的可用内存,则在 RAM 中处理。

相关内容