【问题标题】:Does the address translation of paging decrease memory access performance?分页的地址转换会降低内存访问性能吗?
【发布时间】:2015-12-24 15:45:12
【问题描述】:

启用分页后,某些硬件负责将虚拟内存地址转换为物理地址。已知的翻译通常保存在某种缓存中,即翻译后备缓冲区 (TLB)。

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

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

(为了清楚起见,我的问题不是关于 TLB 的页面错误或缓存未命中)

【问题讨论】:

    标签: cpu paging computer-architecture virtual-memory mmu


    【解决方案1】:

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

    为了简单起见,我们假设 (a) 我们谈论的是数据而不是指令 (b) 所有数据内存访问都命中一级缓存 (c) 一级数据缓存是典型的集合关联缓存。

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

    虚拟寻址缓存听起来更划算,对吧?不幸的是,这是一把双刃剑。问题是虚拟内存通常允许多个虚拟地址映射到同一个物理地址。如果在我们的缓存中有两个虚拟地址映射到一个物理地址,那么修改一个不会反映到另一个。

    所以,在这两个极端之间有一个选择。仍然假设一组关联缓存,我们可以使用虚拟地址作为索引,同时将地址转换为物理地址。之后,我们使用物理地址作为标签来访问数据。通过这种方式,我们将 TLB 转换从关键路径中移除,从而实现与虚拟寻址缓存类似的性能。它还允许我们避免这种虚拟/物理别名问题,尽管它通常需要操作系统提供一些额外的帮助。

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

    【讨论】:

    • 太棒了。你知道它是如何在“普通”CPU 中实现的,比如最近的一些 Intel 或 AMD 桌面处理器吗?
    • @DanielJour 根据 Hennessy & Patterson 的第 5 版,英特尔 i7(在 2011 年应该是 Nehalem/Westmere)一级缓存实际上是索引物理标记,而一级缓存2 级和 3 级缓存是物理标记的。我在网上找到了一些其他参考资料,表明英特尔的 Sandy Bridge 也被虚拟索引物理标记。我想 Haswell 和 Skylake 仍然如此。
    • 完美。我实际上有那本书(嗯,第 4 版,其中包含一些 AMD 芯片的案例研究):)
    猜你喜欢
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 2011-04-26
    • 1970-01-01
    • 2014-02-08
    • 2012-02-08
    相关资源
    最近更新 更多