当内存被交换到磁盘,并且随后 RAM 被释放时,内存会被交换回 RAM 吗?

当内存被交换到磁盘,并且随后 RAM 被释放时,内存会被交换回 RAM 吗?

我猜答案取决于操作系统。在本例中,它是 VMware ESXi。我通过将多个虚拟机迁移到内存过量使用的主机来创建低内存条件。一旦页面共享和膨胀开始,就会有足够的 RAM 而无需任何页面,但是,这些过程需要时间。在此期间,ESXi 将内存交换到磁盘。

因此,我面临的情况是,我最终拥有大量可用的主机内存,但仍有大量内存被交换到磁盘。

什么时候会将该内存交换回 RAM?只有当它被访问时才会交换?这也意味着,当它被访问时,会有延迟?这可以避免吗?

答案1

仅在被访问时。所有现代虚拟内存操作系统都是“按需分页”的,这意味着由于页面错误而将内容调入页面,当引用“无效”页面时会发生这种情况。

(“无效”页面只是在引用时会引发页面错误的页面。它实际上可能位于 RAM 中的页面缓存中。该名称来自 x86/x64 页表条目中的“有效”位。它的另一个名称是“常驻”,但这个名称有点误导,因为“无效”页面实际上可能位于 RAM 中的页面缓存中。)

这在某种程度上可以通过预取和预读等进行修改,但从根本上来说,事情仍然是按需分页的。

原因是,当程序空闲了一段时间(并且“交换到磁盘”时),下次执行某些操作时其内存访问模式不一定与之前的相似。因此,仅将之前在内存中的内容分页有点过于简单。

相关内容