gpt4 book ai didi

caching - CPU如何通过TLB和缓存发出数据请求?

转载 作者:行者123 更新时间:2023-12-02 18:07:28 25 4
gpt4 key购买 nike

我正在观察最后几种英特尔微架构(Nehalem/SB/IB 和 Haswell)。我试图弄清楚当发出数据请求时会发生什么(在相当简单的水平上)。到目前为止我有一个粗略的想法:

  1. 执行引擎发出数据请求
  2. “内存控制”查询L1 DTLB
  3. 如果上述未命中,则立即查询 L2 TLB

此时可能会发生两种情况:未命中或命中:

  1. 如果命中,CPU 会按顺序尝试 L1D/L2/L3 缓存、页表,然后主内存/硬盘?

  2. 如果未命中,CPU 会请求(集成内存 Controller ?)检查 RAM 中保存的页表(我在那里得到的 IMC 角色正确吗?)。

    <

如果有人可以编辑/提供一组要点,这些要点提供 CPU 根据执行引擎数据请求执行的操作的基本“概述”,包括

  • L1 DTLB(数据 TLB)
  • L2 TLB(数据+指令TLB)
  • L1D 缓存(数据缓存)
  • 二级缓存(数据 + 指令缓存)
  • L3 缓存(数据 + 指令缓存)
  • CPU 中控制对主内存的访问的部分
  • 页表

我们将不胜感激。我确实找到了一些有用的图像:

但他们并没有真正分离 TLB 和缓存之间的交互。

更新:按照我认为我现在理解的方式更改了上述内容。 TLB只是从虚拟地址获取物理地址。如果有遗漏,我们就有麻烦了,需要检查页表。如果有命中,我们就从 L1D 缓存开始沿着内存层次结构向下进行。

最佳答案

页面映射仅适用于虚拟地址到物理地址的转换。但是,由于它驻留在内存中并且仅部分缓存在 TLB 中,因此您可能必须在转换过程中在那里访问它。

基本流程如下:

  1. 执行计算地址(实际上可以在内存单元中完成一些计算,例如缩放和偏移量)。
  2. 在 DTLB 中查找
    2.a.如果错过,则在二级TLB中查找。
    2.a.a.如果错过了 - 开始页面浏览。
    2.a.b.如果命中二级TLB,则填写DTLB并继续处理新的物理地址
    2.b.在 DTLB 中命中并继续使用物理地址
  3. 查找L1,如果错过了-查找L2,如果错过了再次查找L3,如果错过了-发送到内存 Controller ,等待DRAM访问。
  4. 当数据返回时(无论从哪个级别),都会一路填充到缓存中(取决于填充策略、缓存包容性、指令临时性规范、内存区域类型以及可能的其他因素)。

如果需要页面遍历,则停止主请求,并向页面映射发出物理负载(根据架构定义)。在 x86 中,它可能包括 CR3、PDPTR、PDP、PDE、PTE 等。具体取决于分页模式、页面大小等。请注意,在虚拟化下,VM 上的每个分页级别可能需要主机上的完整分页(所以你实际上是计算所需步骤数的平方)。

请注意,页面映射基本上是一个树结构,其中每次访问都取决于前一个访问的值(以及您转换的虚拟地址的一部分)。因此,这些访问是相关的,只有最后一次访问完成后,您才能获得物理地址并可以返回#3。一直以来,您想要的行可能就位于您的 L1 中,而您却无法知道(尽管说实话,如果您进行了页面漫游,您不太可能仍然在上层缓存中保留该行)。

其他重要说明 - 页面 map 位于物理空间中并以这种方式访问​​。您不想必须翻译翻译所需的访问权限,这可能会造成僵局:)
更重要的是,the pagemap data can be cached ,因此,虽然一个简单的内存访问可能会由于 TLB 未命中而扩展为多个内存访问,但页面遍历可能仍然相当便宜。

关于caching - CPU如何通过TLB和缓存发出数据请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22572316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com