PCOMMIT 指令有什么作用?
What does the PCOMMIT instruction do?
在英特尔 ISA 扩展手册中,pcommit
的描述有点含糊:
The PCOMMIT
instruction causes certain store-to-memory operations to persistent memory ranges to become persistent (power failure protected). Specifically, PCOMMIT
applies to those stores that have been accepted to memory.
[...]
If PCOMMIT
is executed after a store to a persistent memory range is accepted to memory, the store becomes
persistent when the PCOMMIT
becomes globally visible.
[...]
The data in a store to persistent memory becomes persistent (durable) only after it
has either been written to the targeted non-volatile device, or to some intermediate power-fail protected
storage/buffer.
它命名的概念如持久内存范围、存储被内存接受、存储成为持久 和 非易失性设备 1.
确切的上下文是什么?
1 这不能是经典的 NV 设备,如 NOR 闪存 ROM 或 NVMe 设备(读取:新的 SSD),因为它们位于可变数量的桥接器后面,包括减法解码那些,CPU 无法控制。
首先pcommit
has been deprecated before even shipping to an actual CPU.
这个答案大部分是基于上面link的内容。
Intel 与 Micron 合作开发了一种新形式的 Non-volatile memory (NVM) called 3D XPoint(来自其内部结构)。
作为磁盘缓存的 actual implementation 已经可用,英特尔不久前就开始准备更广泛地采用其 NVM 技术。
特别是英特尔设想,某些 DIMM 可以包含使用 3D XPoint 技术制成的部分,从而构成 non-volatile 设备 。
这将使一个或多个内存范围持久,这些持久范围的集合称为持久域。
持久域的主要特征之一是它能够 power-fail 安全。
商店建成后会经过:
- 存储缓冲区.
该商店在 completed/visible 本地,但不在全球范围内。
可以使用不同的指令刷新存储缓冲区(例如 sfence
)。
- 缓存层次.
商店是全局可见的(缓存一致性协议确保这一点)。
可以使用不同的指令刷新缓存(例如 clflush
、clflushopt
、clwb
等)。
- 内存控制器写入挂起队列 (WPQ)。
存储已接受内存,但尚未写入 DIMM。
WPQ 可以通过内存控制器的特定 PCIe 配置寄存器或 pcommit
. 刷新
- 记忆.
商店在内存中committed/written。
store 上面的数据路径在哪个点处在持久域中,因此在断电的情况下不会丢失?
某些内存控制器具有称为异步 DRAM 刷新的功能,可确保即使在 power-loss 的情况下也能正确刷新 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
在英特尔 ISA 扩展手册中,pcommit
的描述有点含糊:
The
PCOMMIT
instruction causes certain store-to-memory operations to persistent memory ranges to become persistent (power failure protected). Specifically,PCOMMIT
applies to those stores that have been accepted to memory.
[...]
IfPCOMMIT
is executed after a store to a persistent memory range is accepted to memory, the store becomes persistent when thePCOMMIT
becomes globally visible.
[...]
The data in a store to persistent memory becomes persistent (durable) only after it has either been written to the targeted non-volatile device, or to some intermediate power-fail protected storage/buffer.
它命名的概念如持久内存范围、存储被内存接受、存储成为持久 和 非易失性设备 1.
确切的上下文是什么?
1 这不能是经典的 NV 设备,如 NOR 闪存 ROM 或 NVMe 设备(读取:新的 SSD),因为它们位于可变数量的桥接器后面,包括减法解码那些,CPU 无法控制。
首先pcommit
has been deprecated before even shipping to an actual CPU.
这个答案大部分是基于上面link的内容。
Intel 与 Micron 合作开发了一种新形式的 Non-volatile memory (NVM) called 3D XPoint(来自其内部结构)。
作为磁盘缓存的 actual implementation 已经可用,英特尔不久前就开始准备更广泛地采用其 NVM 技术。
特别是英特尔设想,某些 DIMM 可以包含使用 3D XPoint 技术制成的部分,从而构成 non-volatile 设备 。
这将使一个或多个内存范围持久,这些持久范围的集合称为持久域。
持久域的主要特征之一是它能够 power-fail 安全。
商店建成后会经过:
- 存储缓冲区.
该商店在 completed/visible 本地,但不在全球范围内。
可以使用不同的指令刷新存储缓冲区(例如sfence
)。 - 缓存层次.
商店是全局可见的(缓存一致性协议确保这一点)。
可以使用不同的指令刷新缓存(例如clflush
、clflushopt
、clwb
等)。 - 内存控制器写入挂起队列 (WPQ)。
存储已接受内存,但尚未写入 DIMM。
WPQ 可以通过内存控制器的特定 PCIe 配置寄存器或pcommit
. 刷新
- 记忆.
商店在内存中committed/written。
store 上面的数据路径在哪个点处在持久域中,因此在断电的情况下不会丢失?
某些内存控制器具有称为异步 DRAM 刷新的功能,可确保即使在 power-loss 的情况下也能正确刷新 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