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



它命名了一些概念,例如持久性内存范围,被存储器接受的存储,成为持久性和非 volatile 设备的存储1。

确切的背景是什么?

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

最佳答案

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

英特尔与美光一起开发了一种新的Non-volatile memory (NVM)形式(称为3D XPoint)(从其内部结构开始)。
作为磁盘缓存的actual implementation已经面世了,不久前英特尔开始为更广泛地采用其NVM技术做准备。

尤其是Intel认为某些DIMM可能包含使用3D XPoint技术制成的一部分,因此构成了非 volatile 设备。

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

制作商店时,它会经历:

  • 存储缓冲区
    商店在本地已完成/可见,但不在全局范围内可见。
    可以使用不同的指令(例如sfence)清除存储缓冲区。
  • 缓存层次结构
    该存储是全局可见的(缓存一致性协议(protocol)确保了这一点)。
    可以使用不同的指令(例如clflushclflushoptclwb等)刷新缓存。
  • 内存 Controller 写入待处理队列(WPQ)
    存储已接受到内存,但尚未写入DIMM。
    可以通过内存 Controller 的特定PCIe配置寄存器或pcommit刷新WPQ。
  • 内存
    存储已提交/写入存储器。

  • 存储上方的数据路径的哪个点位于持久域中,因此在电源故障的情况下不会丢失?
    某些内存 Controller 具有称为“异步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
    

    事实证明,每个计划支持新的Intel NVM技术的平台也都计划支持ADR,因此,英特尔不赞成使用pcommit,而希望使用更简单的编程模型:
    mov [X], rax
    clwb [X]
    sfence
    
    ;Here the store is in the WPQ and that's enough
    

    关于memory - PCOMMIT指令有什么作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41878147/

    10-11 16:20