当前位置:  开发笔记 > 程序员 > 正文

PCOMMIT指令有什么作用?

如何解决《PCOMMIT指令有什么作用?》经验,为你挑选了1个好方法。

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

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

它将持久存储器范围,存储器接受的存储,存储成为持久存储器非易失性设备1等概念命名.

确切的背景是什么?


1这不是传统的NV设备,如NOR Flash ROM或NVMe设备(读取:新的SSD),因为它们位于可控数量的桥之后,包括减法解码,这是CPU无法控制的.



1> Margaret Blo..:

首先,pcommit 在发送到实际CPU之前已经弃用了.
大部分答案都是基于上述链接的内容.


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

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

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

当商店成立时,它通过:

商店缓冲区.
商店在本地完成/可见,但不是全球性的.
可以使用不同的指令(例如sfence)刷新存储缓冲区.

缓存层次结构.
存储是全局可见的(缓存一致性协议确保这一点).
高速缓存可以用不同的指令被刷新(例如clflush,clflushopt,clwb,等人).

内存控制器Write Pending Queue(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

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有