【发布时间】:2014-04-29 14:53:39
【问题描述】:
我正在观察最后几个英特尔微架构(Nehalem/SB/IB 和 Haswell)。我正在尝试弄清楚发出数据请求时会发生什么(在相当简化的层面上)。到目前为止,我有一个粗略的想法:
- 执行引擎发出数据请求
- “内存控制”查询 L1 DTLB
- 如果上述未命中,则现在查询 L2 TLB
此时可能会发生两件事,未命中或命中:
如果命中,CPU 会依次尝试 L1D/L2/L3 缓存、页表和主内存/硬盘?
-
如果未命中 - CPU 请求(集成内存控制器?)请求检查 RAM 中保存的页表(我在那里得到了正确的 IMC 角色吗?)。
李>
如果有人可以编辑/提供一组要点,这些要点提供 CPU 从执行引擎数据请求中所做的基本“概述”,包括
- L1 DTLB(数据 TLB)
- L2 TLB(数据+指令TLB)
- L1D 缓存(数据缓存)
- 二级缓存(数据+指令缓存)
- L3 缓存(数据 + 指令缓存)
- 控制对主存访问的 CPU 部分
- 页表
将不胜感激。我确实找到了一些有用的图片:
- http://www.realworldtech.com/wp-content/uploads/2012/10/haswell-41.png
- http://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Intel_Core2_arch.svg/1052px-Intel_Core2_arch.svg.png
但它们并没有真正分离 TLB 和缓存之间的交互。
更新:按照我现在理解的认为更改了上述内容。 TLB 只是从虚拟地址获取物理地址。如果有遗漏——我们就有麻烦了,需要检查页表。如果有命中,我们只需从 L1D 缓存开始向下遍历内存层次结构。
【问题讨论】:
-
另见关于whether the page-walk loads to resolve a TLB miss come from cache or not 的问题(来自同一用户)。我挖了一些有趣的东西。
标签: caching cpu intel cpu-architecture tlb