Virtual memory是一种在进程间隔离内存并为每个进程提供自己的地址空间的便捷方法。它的工作原理是将虚拟地址转换为物理地址。
我已经非常熟悉虚拟内存的工作原理和实现方式。我不知道的是虚拟内存相对于直接映射内存的性能影响,这不需要翻译开销。
请不要说没有开销。这显然是错误的,因为遍历页表需要多次内存访问。 TLB未命中的可能性很小,以至于性能影响可以忽略不计,但是,如果是这种情况,则应该有证据。
我也意识到虚拟内存对于现代操作系统提供的许多功能的重要性,所以这个问题并不是关于虚拟内存是好还是坏(对于大多数用例来说这显然是件好事),我纯粹是在询问虚拟内存的性能影响。
我正在寻找的答案理想情况如下:虚拟内存对直接映射施加了x%的开销,这里有一篇论文显示。我试图找到有这样结果的论文,但却找不到。
答案 0 :(得分:2)
这个问题很难明确回答,因为虚拟内存是现代系统不可或缺的一部分,旨在支持虚拟内存,大多数软件都是使用具有虚拟内存的系统编写和优化的。
然而,在21世纪初,微软研究院开发了一个名为Signularity的研究操作系统,除其他外,它不依赖于虚拟内存进行进程隔离。作为该项目的一部分,他们发表了一篇论文,分析了过程隔离的硬件支持的开销。该文件的标题为Deconstructing Process Isolation(非付费专区链接here)。在论文中,研究人员写道:
大多数操作系统都使用CPU的内存管理硬件 使用两种机制提供进程隔离。首先,流程是 只允许访问某些物理内存页面。第二, 权限级别可防止不受信任的代码操纵系统 实现进程的资源,例如内存管理 单元(MMU)或中断控制器。这些机制非常重要 性能成本在很大程度上是隐藏的,因为没有广泛使用 比较它们的替代方法。从虚拟映射到 由于异常,物理地址可能会产生高达10-30%的开销 处理,内联TLB查找,TLB重新加载和内核维护 数据结构,如页表[29]。另外,虚拟内存 和权限级别会增加进程间通信的成本。
他们在论文的后面写道:
虚拟内存系统(纯软件系统除外) 例如SPUR [46])依赖于地址转换的硬件缓存 避免在每次处理器缓存未命中时访问页表。管理的 TLB条目有成本,Jacob和Mudge估计成本为5-10% 模拟MIPS类处理器[29]。虚拟内存系统也 将其数据以及某些系统中的代码也带入处理器中 缓存,它驱逐用户代码和数据。 Jacob和Mudge估计 通过小缓存,这些诱导的错误可以增加 开销达到10-20%。而且,他们发现了虚拟内存 诱导中断可以将开销增加到10-30%。其他研究 发现类似甚至更高的管理费用,但实际成本是 非常依赖于系统细节和基准[3,6,10,26,36,40, 41。此外,TLB访问是许多处理器的关键路径 设计[2,30]可能会影响处理器时钟速度。
总的来说,由于该研究正在推广替代系统,因此我将把这些结果与盐分结合起来。但显然有一些与实现虚拟内存相关的开销,本文尝试量化其中一些开销(在评估可能的替代方案的上下文中)。我建议阅读论文以获取更多细节。