访问虚拟地址是否有罚款,该虚拟地址映射到相同的物理地址



给定 virtual 之间的分隔地址是处理操纵的处理和代表内存中实际位置的 hyphys 地址,您可以播放一些有趣的技巧:例如在分配空间的开头/结束时创建一个没有不连续性的圆形缓冲区。

我想知道此类映射技巧在情况下是否对数据读取或写入访问受惩罚:

  • 对物理页面的访问主要是通过相同的虚拟映射,但偶尔通过其他映射(S)。
  • 对物理页面的访问或多或少在映射到同一物理地址的虚拟地址之间或多或少均匀分布。

我特别对过去十年左右发布的X86芯片感兴趣,但也对当代的手臂和动力芯片感兴趣。

for 80x86(我不知道其他体系结构):

a)正常的指令/数据/统一的缓存是物理索引的(因此不受分页技巧的影响)

b)TLB实际上是索引的。这意味着(取决于很多事情),对于您的循环缓冲措施,您可能会期望没有圆形缓冲技巧的TLB错过。可能重要的事情包括面积的大小和所使用的TLB条目的类型数量(4 KIB,2 MIB/1 GIB);如果CPU预购TLB条目(最近的CPU DO),并且花费了足够的时间进行其他工作,以确保预取的TLB在需要之前到达;并且,如果CPU缓存了更高级别的分页结构(例如页面目录),以免在TLB失误上获取每个级别(例如,单独使用页面表条目,因为页面目录已被缓存;或PML4输入;然后PDPT条目,然后pdpt entry tht ppd entry tht page表格,然后页面表条目)。

c)任何UOP缓存(例如,作为环路检测器的一部分,或旧的pentium 4" Trace Cache")实际上是索引或根本没有索引的(例如,CPU仅记住"从环的开始中的UOPS")。除非您有多个代码副本,否则这没关系;而且,如果您确实有多个代码副本,则会变得复杂(例如,如果复制导致UOP的数量超过UOP缓存的大小)。

d)分支预测实际上是索引的。这意味着,如果您有多个相同代码的副本,它再次变得复杂(例如,它将增加未正确预测的分支机构的"训练时间";重复可能会导致分支机构数量超过分支机构预测的数量。插槽和导致较差的分支预测)。

e)返回缓冲区实际上是索引的,但是我想不出它可能有什么关系(重复代码不会增加呼叫图的深度)。

f)用于商店缓冲区(用于存储转发);如果商店在不同的虚拟页面上,那么他们必须假设商店可能会被别名。因此没关系。

g)用于写组合缓冲液;老实说,我不确定它们是实际上是索引还是物理索引。很有可能,如果可能重要的话,您就会用完"编写组合插槽",然后才真正重要。

如果您正在寻找可能的罚款,我将从负载商店转发逻辑开始。如果您有一个用于Virtual Addr A的商店,以及B的后来负载,并且两个地址映射到同一物理上,您将使CPU的地狱混淆。

主要问题是,必须尽早解决这些冲突,以使负载快速(通常为大多数微观结构都可以优化),因此某些设计可能与虚拟地址(或部分)相匹配,如果您知道它们随着时间的流逝,您可以使用内存歧义,但这是另一回事)。请记住,L1设置映射通常会查看12个较低的ADDR位,这使您的L1查找和TLB查找可以并行执行 - 如果您还必须等待与任何较早的商店的完整匹配,那将是不可能的在系统中。幸运的是,如果您像您想要的虚拟页面相似,那么由于最小的4K粒度,您仍然可以获得相同的12位,因此此匹配仍然可以起作用。

然而,要在功能上进行功能,必须在以后进行完整的物理匹配(一旦您拥有负载的完整翻译,并且 all ),因此设计可能会决定无论是基于部分匹配(以及必须冲洗所有内容)还是要等待完整匹配的情况。无论哪种方式都可能会产生一些延迟,但是我认为除非您打破较早的部分检查,否则混蛋会导致它。

最新更新