弃用 PCOMMIT 指令

要点综述

PCOMMIT 指令已被弃用。 尽管早已记录在案,英特尔将不会在未来的产品中使用 PCOMMIT 指令。 本文详细介绍了此决策的深层原因。

支持持久性内存编程                               

在准备新兴的持久性内存技术期间,如基于 3D XPoint™ 技术的英特尔 DIMM,英特尔定义了一些新指令,以支持持久性内存编程模型。 首先推出了两个全新的优化型高速缓存刷新指令,CLWB 和 CLFLUSHOPT。 关于这些指令的具体描述详见《英特尔架构扩展指令集编程参考》,据称它们将在各种平台上出现,包括支持英特尔 DIMM 的平台。 它们可以通过高性能方法将存储从 CPU 高速缓存刷新至持久域,持久域表示存储受断电保护的平台数据路径部分。

最初,新指令集包含 PCOMMIT,如果从 CPU 高速缓存刷新已不足以到达持久域,将在平台上使用 PCOMMIT。 在这些平台上,只需执行一个使用 PCOMMIT 的额外步骤,便可确保存储已经从内存控制器写入挂起队列传输至 DIMM,后者是这些平台的持久域。

下图展示了存储 (MOV) 到达持久域所采用的数据路径。

mov flow

如上所示,应用执行 MOV 指令时,存储通常进入 CPU 高速缓存。 可以使用 CLWB 等指令从 CPU 高速缓存刷新存储。 此时,存储可能在内存控制器中的写入挂起队列 (WPQ) 上停留一段时间。 如上所示,较大的虚线框表示断电或关闭时自动刷新 WPQ 的平台上的断电保护持久域。 异步 DRAM 刷新 (ADR) 是执行此刷新的一个平台级特性。

最早设计持久性内存编程模型时,开发人员担心 ADR 是一个难以获得的平台特性,因此添加了 PCOMMIT 指令,以确保在未配备 ADR(上图中持久域为较小虚线框的平台)的设备上实现持久性。 最终,计划支持英特尔 DIMM 的平台也计划支持 ADR,便不再需要 PCOMMIT。 因此,推出了更简单的单个编程模型,应用不需要添加相应的逻辑,以检测是否需要 PCOMMIT。 出于上述原因,PCOMMIT 未在 CPU 上部署,便已被弃用,从此无需在旧版软件上支持该指令,因为不会再有软件支持它(opcode 总是生成无效的 opcode 异常,将一直持续下去)。

如上图所示,平台仍可能刷新 WPQ(显示为 WPQ Flush)。 不同于 PCOMMIT 指令,这是一个仅限于内核的设施,用于刷新写入 DIMM 命令寄存器的命令,在极少数情况下,内核使用该命令确保快速刷新至 DIMM。 应用通常不知道 WPQ 刷新机制的存在。

更简单的编程模型

上图显示的示例指令序列能够将值(10 和 20)存储于持久性内存位置。

example

左侧的序列适用于未配备 ADR 特性的平台,这些平台无法在断电或关闭时刷新 WPQ。 由于目前所有持久性内存支持均要求 ADR,右侧的简化序列可适用于所有平台。

操作系统与工具链调整   

为了支持持久性内存编程,调整了某些操作系统、编译器、汇编器和库,以使用 PCOMMIT 指令。 由于不能保证指令继续存在于特定平台,如果相应的 CPUID 标记显示支持 PCOMMIT(具体的标记为 CPUID.(EAX=07H, ECX=0H):EBX, bit 22),使用 PCOMMIT 的软件只能这样做。 由于 PCOMMIT 已被弃用,CPUID 标记现已被永久保存为 0,将使用 PCOMMIT 的任何代码渲染为永不执行的死码。

无害的死码将在一段时间内删除,但是截至本文撰写之日,http://pmem.io 上支持持久性内存和非易失性内存库 (NVML) 的所有已知操作系统均已升级,以删除所有 PCOMMIT 使用。

总结

在首次实施之前弃用 PCOMMIT 指令简化了英特尔 CPU 上的持久性内存编程模型。对  http://pmem.io 上的多数软件(包括非易失性内存库)进行升级,以反应此修改。

术语表

断电保护域

持久域

表示存储至 pmem 时,存储所采用的部分路径,该部分存储为持久性存储

ADR

(异步 DRAM 刷新)

一种平台级特性,借助该特性,电源能够通知其他系统组件即将断电,从而刷新内存子系统中的写入挂起队列

PCOMMIT

支持应用按需刷新内存子系统写入挂起队列的指令。 由于 ADR 成为必要特性,该指令已无存在的必要,因而被弃用。

WPQ

(有时被称为 TPQ)

内存子系统内的写入挂起队列

CLFLUSH

CLWB

CLFLUSHOPT

刷新 CPU 高速缓存行的指令。 最近添加了 CLWB 和 CLFLUSHOPT,以提升 pmem 的性能

CPUID

帮助软件检测受 CPU 支持的特性的机制

有关编译器优化的更完整信息,请参阅优化通知