【问题标题】:Hyper-Threading data cache context aliasing超线程数据缓存上下文别名
【发布时间】:2021-02-13 17:26:14
【问题描述】:

在英特尔的手册中,以下部分让我感到困惑:

11.5.6.2 共享模式 在共享模式下,L1 数据缓存在逻辑处理器之间竞争共享。这是真的,即使 逻辑处理器使用相同的 CR3 寄存器和分页模式。 在共享模式下,L1 数据缓存中的线性地址可以使用别名, 这意味着缓存中的一个线性地址可以指向不同的 物理位置。解决混叠的机制可能导致 颠簸。因此,IA32_MISC_ENABLE[bit 24] = 0 是 基于 Intel NetBurst 的处理器的首选配置 支持英特尔超线程技术的微架构。

intel 使用 VIPT(等于 PIPT)访问缓存。

缓存别名是如何发生的?

【问题讨论】:

标签: caching cpu-cache


【解决方案1】:

基于英特尔® 64 和 IA-32 架构优化参考手册,2009 年 11 月 (248966-020),第 2.6.1.3 节:

物理处理器中的大部分资源都是完全共享的,以提高 资源的动态利用,包括缓存和所有 执行单元。一些线性寻址的共享资源, 像 DTLB 一样,包括一个逻辑处理器 ID 位来区分 条目是属于一个逻辑处理器还是另一个。

一级缓存可以根据上下文 ID 在两种模式下运行 位:

  • 共享模式:L1 数据缓存由两个逻辑缓存完全共享 处理器。
  • 自适应模式:在自适应模式下,内存访问使用页面 目录在共享该目录的逻辑处理器之间映射相同 L1 数据缓存。

别名是可能的,因为处理器 ID/上下文 ID 位(它只是指示内存访问来自哪个虚拟处理器的位)对于不同的线程会有所不同,并且共享模式使用该位。自适应模式只是像人们通常期望的那样简单地寻址缓存,仅使用内存地址。

在共享模式下索引缓存时如何使用处理器 ID 似乎没有具体记录。 (与几个地址位进行异或会提供索引的分散,这样一个硬件线程的相邻索引将映射到另一个线程的更多分离索引。为不同线程选择不同的位顺序不太可能,因为这样会增加延迟。分散在给定空间局部性高于高速缓存行粒度但小于路大小粒度的情况下,降低冲突频率。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-09
    • 2013-04-22
    • 1970-01-01
    • 2015-08-30
    • 2015-02-28
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    相关资源
    最近更新 更多