【发布时间】:2018-06-06 01:19:19
【问题描述】:
鉴于进程操作的虚拟地址和表示内存中实际位置的物理地址之间的分离,您可以玩一些有趣的技巧:例如创建一个@ 987654321@.
我想知道这种映射技巧是否会在这种情况下对数据读取或写入访问造成惩罚:
- 对物理页面的访问主要是通过相同的虚拟映射,但偶尔会通过其他映射。
- 对物理页面的访问或多或少平均分布在映射到同一物理地址的虚拟地址之间。
我对过去十年左右发布的 x86 芯片特别感兴趣,同时也对当代 ARM 和 POWER 芯片感兴趣。
【问题讨论】:
-
您只关心数据访问,而不关心代码获取,对吧?我认为英特尔的优化手册提到对相同的物理页面有多个映射,但我忘记了我读过的内容。我认为只有当其中一个映射是回写但另一个不是(例如 USWC)时才会受到惩罚。哦,存储/加载重叠检测可能会推测性地假设页面只映射一次,因此值得检查。
-
@PeterCordes 是的,我在考虑数据访问,虽然我想在代码方面也有很酷的技巧:)
-
IIRC,uop 缓存是虚拟寻址的,因此代码的多个映射可能效率较低。 JITing 到一个页面然后通过别名执行它可能也不是很好,我忘记了。
标签: performance memory-management x86 cpu-architecture mmap