2015-09-27 25 views
2

当启用分页时,某些硬件负责将虚拟内存地址转换为物理地址。已知的翻译通常保存在某种缓存中,即翻译缓存(TLB)。分页的地址转换是否会降低内存访问性能?

假设缓存地址转换的内存访问,是否比没有启用分页直接访问内存慢?

我很想知道该翻译的开销,即使它被缓存了,因为对该缓存的访问可能也需要一些(尽管很短)的时间。还是那个时间计划作为时钟周期的一部分?

(要清楚,我的问题不是缺页故障或TLB的高速缓存未命中)

回答

2

就像生活中的一切,这取决于! :-)

为了简单起见,我们假设(a)我们正在讨论的是数据而不是指令(b)所有数据存储器访问都碰到了1级缓存(c)1级数据缓存是一个典型的组关联缓存。

数据高速缓存的每个块都必须用一个地址(小于偏移量)来标识。如果缓存使用虚拟地址,则不需要进行翻译并且没有开销。如果缓存使用物理地址,则必须在数据访问之前转换地址,从而为请求增加额外的延迟。即使对于一个小的TLB,我也不认为一个高性能的处理器既不能转换地址,也不能在同一个周期内完成缓存请求。因此,假定物理地址高速缓存确实具有地址转换开销是公平的。

因此,虚拟缓存听起来像更好的交易,对吗?不幸的是,这是一把双刃剑。问题是虚拟内存通常允许多个虚拟地址映射到相同的物理地址。如果在我们的缓存中存在映射到单个物理地址的两个虚拟地址,则修改一个不会反映在另一个物理地址中。

因此,这两个极端之间有一个选项。仍然假定一组关联缓存,我们可以使用虚拟地址作为索引,同时将地址转换为物理地址。之后,我们使用物理地址作为标签来访问数据。通过这种方式,我们将TLB转换从关键路径转移出去,从而实现与虚拟缓存相似的性能。它还使我们能够避免这种虚拟/物理混叠问题,尽管它通常需要来自操作系统的一点额外帮助。

因此,您可以看到它可以相同或更慢,具体取决于缓存的配置方式。

+0

太棒了。你知道它是如何在像最近的英特尔或AMD台式机处理器那样的“普通”CPU中实现的吗? –

+0

@DanielJour根据Hennessy&Patterson的第5版,英特尔i7(在2011年应该是Nehalem/Westmere),一级缓存实际上是索引物理标记的,而二级和三级缓存是物理标记。我在网上发现了一些其他的参考文献,表明英特尔的Sandy Bridge也实际上是索引物理标记的。我可以想象,Haswell和Skylake仍然如此。 – hayesti

+0

完美。我真的有这本书(好吧,第4版,其中包含一些AMD芯片的案例研究):) –

相关问题