微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

对于:

  • 4 或 8 字节 movnti 哪个 x86 保证原子用于其他目的?
  • 16 字节 SSE movntdq / movntps 不能保证原子性,但实际上可能在支持持久内存的 cpu 上使用。
  • 32 字节 AVX vmovntdq / vmovntps
  • 64 字节 AVX512 vmovntdq / vmovntps 全线商店
  • 额外问题:MOVDIR64B支持它和 DC-PM 的未来 cpu 上保证了 64 字节写入原子性。例如Sapphire Rapids Xeon / Tiger Lake / Tremont

movntpd 被假定为与 movntps 相同。


相关问题:

解决方法

x86 上的全局可观察性和持久性的原子性保证是相同的。这意味着以下操作是持久原子的:

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

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

  • 缓存行刷新(CLFLUSHCLFLUSHOPT),
  • 缓存行写回 (CLWB) 和
  • 非架构缓存行逐出。
  • 英特尔处理器上的完整写入组合缓冲区刷新。 WCB 的存在和大小以及刷新的原因是特定于实现的。请参阅: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(英特尔)的私人通信。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。