PCOMMIT指令有什么作用?

时间:2017-01-26 16:22:30

标签: memory x86 non-volatile

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

  

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

它命名持久内存范围,存储接受内存,存储成为持久性非易失性设备<< EM> 1

具体情况是什么?

1 这不是像NOR闪存或NVMe设备(读取:新SSD)这样的传统NV设备,因为它们位于可变数量的桥之后,包括减法解码,即CPU无法控制。

1 个答案:

答案 0 :(得分:8)

首先pcommit has been deprecated before even shipping to an actual CPU
大部分答案都是基于上述链接的内容。

英特尔与Micron合作开发了一种名为Non-volatile memory (NVM) 3D XPoint的新形式(来自其内部结构)。
作为磁盘缓存的actual implementation已经可用,英特尔不久前开始准备更广泛地采用其NVM技术。

特别是英特尔想象一些DIMM可能包含使用3D XPoint技术制作的部分,因此构成非易失性设备

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

当商店出现时,它会通过:

  • 商店缓冲区
    商店在本地完成/可见,但不是全球性的 可以使用不同的指令(例如sfence)刷新存储缓冲区。
  • 缓存层次结构
    商店是全局可见的(缓存一致性协议确保这一点) 可以使用不同的指令刷新缓存(例如clflushclflushoptclwb等。
  • 内存控制器写入待处理队列(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