6

我是一名最近在研究超线程的学生。我对这个特性有点困惑——L1 数据缓存上下文模式。

架构优化手册中,描述了 L1 缓存可以在两种模式下运行:

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

    1. 共享模式:L1 数据缓存由两个逻辑处理器完全共享。

    2. 自适应模式:在自适应模式下,使用页目录的内存访问在共享 L1 数据缓存的逻辑处理器之间进行相同的映射。

但是,我很好奇缓存如何根据描述在自适应模式下进行分区。

4

3 回答 3

4

在 Intel arch 上,值为 1L1 Context ID表示 L1 数据缓存模式可以设置为自适应模式或共享模式,而值为 0 表示不支持此功能。详情请查看IA32_MISC_ENABLE MSR Bit 24(L1 数据缓存上下文模式)的定义。

根据英特尔® 64 和 IA-32 架构开发人员手册:卷。3A(第 11 章/缓存控制),我在下面引用:

  • 分享模式

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

  • 自适应模式

自适应模式有助于逻辑处理器之间的 L1 数据高速缓存共享。在自适应模式下运行时,如果出现以下情况,L1 数据缓存将在同一内核中的逻辑处理器之间共享:

• 共享高速缓存的逻辑处理器的CR3 控制寄存器是相同的。

• 共享高速缓存的逻辑处理器使用相同的分页模式。

在这种情况下,每个逻辑处理器都可以使用整个 L1 数据缓存(而不是竞争共享)。如果共享 L1 数据缓存的逻辑处理器的 CR3 值不同,或者逻辑处理器使用不同的分页模式,则处理器会竞争缓存资源。这减少了每个逻辑处理器的高速缓存的有效大小。不允许缓存的别名(这可以防止数据抖动)。

我只是猜想没有明确的方法来划分 L1 数据缓存。

于 2012-09-04T06:01:33.543 回答
2

该文档只是指出,如果您使用自适应模式并且如果核心之间的 CR3 或分页模式不同,则缓存不会共享,并且核心会“竞争”缓存。它没有说明分区是如何工作的。

实现这一点的最直接方式是将数据缓存的一半路径静态保留给每个处理器。这实际上会将一半的数据缓存静态分配给每个处理器。

或者,他们可以在每个高速缓存行的虚拟标记中添加一个额外的位,以区分该行属于哪个处理器。这将允许缓存的动态分区。这比静态分区更适合缓存“竞争”的描述。

如果你真的需要知道,你可以设计一些微基准来验证这些方案是否被实际使用。

于 2012-09-05T15:27:23.547 回答
2

L1 数据缓存在任何一种模式下都没有分区,并且总是竞争共享。

注意,手册中有一个明显的错误,模式不是由 context-ID 位决定的,而是由IA32_MISC_ENABLE[24]. 具有 HT 的 Northwood 和所有具有 HT 的 Prescott 处理器的后续步骤都支持此增强功能。默认值为零,表示自适应模式。但是,在某些处理器中,更新的 BIOS 可能会通过设置切换到共享模式,IA32_MISC_ENABLE[24]因为这些处理器中存在仅在自适应模式下发生的错误。

在使用 HT 的 Northwood 的早期步骤中,仅支持共享模式。在共享模式下,当向 L1 数据缓存发出加载请求时,该请求首先在“快速路径”上进行处理,这涉及根据线性地址的第 11-15 位进行路径预测并产生推测命中/结果错过信号。在具有 HT 的处理器中,还会比较逻辑内核 ID。部分标记和逻辑核心 ID 必须匹配才能获得推测性命中。一般来说,这有助于提高正确的投机命中率。

如果两个同级逻辑核心以相同的分页模式运行并且具有相同的 CR3 值,这表明来自两个核心的访问使用相同的页表(如果启用了分页),那么即使逻辑核心 ID 与缓存的快速路径不匹配。

在自适应模式下,每当分页模式或其中一个内核的 CR3 寄存器发生变化时,都会计算上下文 ID 值。如果寻呼模式和 CR3 值匹配,则上下文 ID 位设置为两个可能值之一。否则,将其设置为其他值。当向缓存发出加载请求时,会检查上下文 ID。如果指示内核具有相同的地址转换结构,则忽略逻辑内核ID比较结果,如果部分虚拟标签匹配,则产生推测命中。否则,逻辑核ID比较在共享模式下生效。

于 2020-12-01T13:51:14.547 回答