9

在英特尔 ISA 扩展手册中,描述pcommit有点神秘:

PCOMMIT指令导致对持久内存范围的某些存储到内存操作变为持久(电源故障保护)。具体来说,PCOMMIT适用于那些已经被内存接受的商店。
[...]
如果PCOMMIT在持久内存范围的存储被内存接受后执行,则存储在PCOMMIT全局可见时变为持久。
[...]
存储到持久内存中的数据只有在写入目标非易失性设备或某些中间断电保护存储/缓冲区后才会变为持久(持久)。

它命名了诸如持久内存范围内存接受的存储成为持久非易失性设备1的存储等概念。

确切的上下文是什么?


1这不可能是经典的 NV 设备,例如 NOR 闪存 ROM 或 NVMe 设备(阅读:新 SSD),因为它们位于可变数量的桥接器后面,包括减法解码桥接器,CPU 无法控制这些桥接器。

4

1 回答 1

12

首先,pcommit 在运送到实际 CPU 之前已被弃用
这个答案大部分是基于上面链接的内容。


英特尔与美光合作开发了一种新形式的非易失性存储器 (NVM) ,称为3D XPoint(来自其内部结构)。
作为磁盘缓存的实际实现已经可用,并且英特尔不久前开始准备更广泛地采用其 NVM 技术。

尤其是英特尔设想,某些 DIMM 可以包含部分采用 3D XPoint 技术制成的部分,从而构成非易失性设备

这将使一个或多个内存范围持久化,这些持久性范围的集合称为持久域
持久域的主要特征之一是它具有断电安全的能力。

建立商店时,它会经过:

  • 存储缓冲区
    商店在本地完成/可见,但不是全局。
    可以使用不同的指令(例如sfence)刷新存储缓冲区。
  • 缓存层次结构
    存储是全局可见的(缓存一致性协议确保这一点)。
    可以用不同的指令(例如,、、等)刷新clflush高速clflushopt缓存clwb
  • 内存控制器写入挂起队列(WPQ)
    存储已被内存接受,但尚未写入 DIMM。
    WPQ 可以通过内存控制器的特定 PCIe 配置寄存器或使用pcommit.
  • 记忆
    存储被提交/写入内存。

存储上方的数据路径的哪一点在持久域中,因此在电源故障的情况下不会丢失?
一些内存控制器具有称为异步 DRAM 刷新的功能,可确保即使在断电的情况下,WPQ 也能正确刷新(例如,由于电池)。
对于这些平台,持久域从 WPQ 开始。

然而,英特尔担心并非所有平台都具有 ADR 功能并创建pcommit指令以确保存储进入持久域(pcommit在用户模式下可执行)。

这就是商店的持久化方式

mov [X], rax     ;Store

;Here the store has started moving to the store buffer

clwb [X]

;Here the store has moved to the cache (CLWB is ordered with previous stores) 
;and then starting moving to the memory controller WPQ 
;(the line containing X has been written back)

sfence           ;Wait for CLWB to become globally visible

;Here the store is in the WPQ

pcommit         

;The store is being committed

sfence          ;Wait for pcommit to become globally visible

;The store is committed

事实证明,每个计划支持新英特尔 NVM 技术的平台也计划支持 ADR,因此英特尔不赞成使用pcommit 更简单的编程模型:

mov [X], rax
clwb [X]
sfence         

;Here the store is in the WPQ and that's enough
于 2017-01-26T16:22:30.230 回答