虚拟内存相对于直接映射内存的性能影响是什么?

Jef*_*ers 6 memory performance memory-management

虚拟内存是一种在进程之间隔离内存并为每个进程提供自己的地址空间的便捷方式。它的工作原理是将虚拟地址转换为物理地址。

我已经非常熟悉虚拟内存的工作原理和实现方式。我不知道的是虚拟内存相对于直接映射内存的性能影响,它不需要翻译开销。

请不要说没有开销。这显然是错误的,因为遍历页表需要多次内存访问。TLB 未命中的频率可能足够低,以至于对性能的影响可以忽略不计,但是,如果是这种情况,则应该有证据证明这一点。

我也意识到虚拟内存对于现代操作系统提供的许多功能的重要性,所以这个问题不是关于虚拟内存是好是坏(对于大多数用例来说这显然是一件好事),我纯粹是在问关于虚拟内存的性能影响。

我正在寻找的答案在理想情况下是这样的:虚拟内存比直接映射强加了 x% 的开销,这里有一篇论文表明了这一点。我试图寻找具有此类结果的论文,但找不到任何论文。

Gab*_*ern 5

这个问题很难明确回答,因为虚拟内存是现代系统的一个组成部分,旨在支持虚拟内存,并且大多数软件都是使用具有虚拟内存的系统编写和优化的。

\n\n

然而,在 2000 年代初,微软研究院开发了一种名为Signularity的研究操作系统,它不依赖虚拟内存来进行进程隔离。作为该项目的一部分,他们发表了一篇论文,分析了进程隔离的硬件支持的开销。该论文的标题是“解构进程隔离”(非付费专区链接请点击此处)。研究人员在论文中写道:

\n\n
\n

大多数操作系统使用 CPU\xe2\x80\x99s 内存管理硬件来提供进程隔离,并使用两种机制。首先,只允许进程访问物理内存的某些页面。其次,特权级别可防止不受信任的代码操纵实现进程的系统资源,例如内存管理单元 (MMU) 或中断控制器。这些机制\xe2\x80\x99 不平凡的\n 性能成本在很大程度上是隐藏的,因为没有广泛使用的\n 替代方法来比较它们。由于异常处理、内联 TLB 查找、TLB 重新加载以及页表等内核数据结构的维护,从虚拟地址映射到物理地址可能会产生高达 10\xe2\x80\x9330% 的开销 [29] 。此外,虚拟内存和特权级别会增加进程间通信的成本。

\n
\n\n

后来他们在论文中写道:

\n\n
\n

虚拟内存系统(纯软件系统除外,例如 SPUR [46])依赖地址转换的硬件缓存来避免在每次处理器缓存未命中时访问页表。管理 TLB 条目需要一定的成本,Jacob 和 Mudge 在模拟的类似 MIPS 的处理器上估计为 5\xe2\x80\x9310% [29]。虚拟内存系统还将其数据(在某些系统中还包括代码)放入处理器的缓存中,从而逐出用户代码和数据。Jacob 和 Mudge 估计,对于较小的缓存,这些引发的未命中会将开销增加到 10\xe2\x80\x9320%。此外,他们发现虚拟内存引起的中断会将开销增加到 10\xe2\x80\x9330%。其他研究发现了类似甚至更高的开销,尽管实际成本很大程度上取决于系统细节和基准 [3, 6, 10, 26, 36, 40, \n 41]。此外,TLB 访问是许多处理器设计的关键路径 [2, 30],因此可能会影响处理器时钟速度。

\n
\n\n

总的来说,我对这些结果持保留态度,因为这项研究正在推广一种替代系统。但显然存在与实现虚拟内存相关的一些开销,本文尝试量化其中一些开销(在评估可能的替代方案的背景下)。我建议阅读该论文以了解更多详细信息。

\n