在 x86-64 上,系统崩溃时“movnti”或 "movntdq" 指令是原子的吗?

On x86-64, is the “movnti” or "movntdq" instruction atomic when system crash?

使用像Intel optane DCPMM这样的持久内存时,如果在执行movnt指令时系统崩溃(断电),重启后是否可以看到部分结果?

对于:

假定

movntpd 等同于 movntps.


相关问题:

以下操作保证是持久原子的:

  • 不跨越 8 字节边界到任何有效内存类型位置的存储 uop,并且
  • MOVDIR64B.

注意英特尔 SDM V3 第 8.1.1 节中提到的所有原子保证都适用于持久内存。

此外,以下操作是持久原子的:

  • 缓存行刷新(CLFLUSHCLFLUSHOPT),
  • 缓存行写回(CLWB),以及
  • 非架构缓存行逐出。
  • Intel 处理器上的完整写入组合缓冲区刷新。 WCB 的存在和大小以及刷新的原因是特定于实现的。参见:(Persistence) ordering of Intel non-temporal stores to the same cache line.

其他一切都没有架构持久原子性保证,包括 64 字节 AVX512 vmovntdq / vmovntps 全行存储。

这些保证适用于异步 DRAM 刷新 (ADR) 平台和增强型异步 DRAM 刷新 (eADR) 平台。 (在 eADR 上,缓存层次结构在持久域中。参见:Build Persistent Memory Applications with Reliability Availability and Serviceability.

此答案基于我与 Andy Rudoff(英特尔)的私人通信。