首先,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