amo*_*kov 6 x86 intel cpu-architecture micro-architecture
在题为“数据操作数独立时序指令集架构 (ISA) 指南”的文档中,英特尔推出了一种新的IA32_UARCH_MISC_CTLMSR,其中切换位 0 可启用“数据操作数独立时序模式”(DOITM)。此 MSR 可在代号为 Ice Lake 的 Intel Core、代号为 Gracemont 的 Atom 以及较新的 CPU(即撰写本文时的 Alder Lake)上使用。Ice Lake 和 Gracemont 之前的处理器的行为就像始终启用 DOIT 模式一样。
在 Intel Core CPU 上,不涉及复杂微代码的整数指令通常被理解为对于数据操作数具有固定延迟,但对于地址操作数则不然(自 Ice Lake 以来,整数除法似乎以固定延迟运行,并且在此之前进行了微编码[uops .info])。当涉及次正规时,浮点指令可能会有所不同。这看起来很自然,因为 CPU 后端需要提前计算结果的可用性。
在 DOIT 文档中,英特尔似乎表示他们正在设想进一步的 CPU 优化,其中某些指令可能具有更短的延迟,具体取决于其数据操作数。除了令人困惑的短语外,优化的确切性质并未公开:
例如,启用数据操作数独立计时可能会禁用数据相关预取
这很难解释为适用于数据操作数,但不适用于地址操作数。
根据数据操作数的不同,可以有意义地具有不同延迟的指令的一个具体示例是指令IMUL:当乘以在寄存器重命名时已知为零的操作数时(因为它之前在重命名阶段按照习惯用法被归零xor same, same),则结果也可以在重命名阶段解析为零,以实现零执行延迟而不是三或四个周期。类似的技术可以应用于许多基本的单周期 ALU 操作(例如,将重命名为 0 的操作数的ADD/ OR/的结果解析为第二个操作数)。XOR
在 DOIT 模式下,某些(但不是全部)指令保证相对于数据操作数具有固定延迟,就像在 Ice Lake 之前的 CPU 上一样。标题为“数据操作数独立时序指令”的随附文档中列举了此类指令。有点令人困惑的是,该列表包括类似LDDQU和的指令POP,但没有任何数据操作数。
切换 DOIT 模式位实际上会改变当今 CPU 上的任何内容吗?第二个文档中列出的指令中是否有任何指令已经根据数据操作数的内容(或者是否被重命名为零寄存器)而表现出不同的行为?
当前 Intel CPU 上没有任何指令的 DOIT 模式位会影响数据操作数的执行延迟。
在给 LKML 的消息中,英特尔员工 Dave Hansen 提供了此功能的额外背景信息:
DOIT 指令[1] 的执行延迟并不取决于所有当前支持的 Intel 处理器上的数据操作数的值。这包括枚举 DOITM 支持的所有处理器。尽管 DOITM 架构理论上允许这样做,但目前还没有计划改变任何处理器的这种行为。
那么,DOITM 的初衷是什么?固定执行延迟并不意味着程序作为一个整体将具有恒定的总体延迟。DOITM 目前影响的功能不会影响执行延迟,但可能会因缓存预取的副作用而影响整体程序延迟。即使指令执行延迟固定,这些副作用对于偏执狂来说尤其重要。
今天,受影响的功能包括:
本质上,这意味着 DOIT 模式与其名称和文档相反,目前通过地址操作数影响内存依赖性,但对数据操作数没有影响。但内存依赖性的延迟从一开始就没有得到修复(并且在实践中也没有修复),因此英特尔的消息在这里似乎真的很混乱。
对于打开侧通道的优化(例如“数据相关预取”)来说,重要的不是时间,而是它们是否发生。在 DDP 情况下,对攻击者来说重要的是对缓存的可观察到的影响。
| 归档时间: |
|
| 查看次数: |
140 次 |
| 最近记录: |