X86 (持久性)将Intel非临时存储排序到同一缓存线

X86 (持久性)将Intel非临时存储排序到同一缓存线,x86,cpu-architecture,memory-barriers,persistent-memory,X86,Cpu Architecture,Memory Barriers,Persistent Memory,同一线程向同一缓存线发出的非时态存储(如MOVTI)是否按程序顺序到达内存 因此,对于使用NVRAM的系统(如使用Intel 3D XPoint NVRAM的Intel Cascade Lake处理器),在发生崩溃时,缺少重新排序可确保写入同一缓存线的前缀占主导地位?假设非临时存储的已解析内存类型为WC(或WC+),我想这就是您要问的问题,答案大多不在英特尔和AMD处理器上 对于英特尔处理器,“英特尔SDM V2”第11.3.1节中的某些语句指定了在微体系结构上使用至少一个WC缓冲区进行写合并写

同一线程向同一缓存线发出的非时态存储(如MOVTI)是否按程序顺序到达内存


因此,对于使用NVRAM的系统(如使用Intel 3D XPoint NVRAM的Intel Cascade Lake处理器),在发生崩溃时,缺少重新排序可确保写入同一缓存线的前缀占主导地位?

假设非临时存储的已解析内存类型为WC(或WC+),我想这就是您要问的问题,答案大多不在英特尔和AMD处理器上

对于英特尔处理器,“英特尔SDM V2”第11.3.1节中的某些语句指定了在微体系结构上使用至少一个WC缓冲区进行写合并写入的行为

退出WC缓冲区的协议取决于实现 软件不应依赖它来实现系统内存一致性

这是一个一般性的陈述,指出WC收回的原因和为收回WC缓冲区而执行的事务取决于实现。但手册中不同的地方有具体的说明

类似地[像在P6上],对于以这些 基于英特尔NetBurst微体系结构,将提供完整的WC缓冲区 始终使用任何区块作为单个突发事务进行传播 交易中的订单

如果同一WC缓冲区中的所有字节都有效,意味着自分配缓冲区以来每个字节至少写入一次,则当出于任何原因逐出缓冲区时,将使用单个事务逐出缓冲区中的整个缓存线。如果缓冲区的目标是内存控制器,它是CLX上持久性域中的第一个单元,则事务的所有字节都将被持久化,或者没有任何字节。这意味着写入该行的写入指令的程序顺序将保持不变。这些特定写入与其他写入之间的顺序将在后面讨论

当事务的目标是内存控制器时,从软件的角度来看,此上下文中的“在事务中使用任何块顺序”部分并不重要,但对于其他目标很重要

英特尔已指定块大小在所有微体系结构上对齐8字节。该块大小仅适用于核心和非核心互连,但不超过实现其他协议的块大小。但对于针对IMC的写操作,持久化原子性在事务粒度上得到保证,事务粒度可能包含1到64字节(所有现代Intel和AMD处理器上的WC缓冲区大小为64字节),取决于移出缓冲区时同一WC缓冲区内有效字节的分布以及确切的移出协议。在英特尔处理器上,事务保证包含全部64个有效字节,以防WC缓冲区完全收回

AMD手册中只说,完整的WC缓冲区收回可以作为单个事务执行

以下引号指定了部分WC缓冲区收回(并非所有字节在缓冲区中都标记为有效)情况下的排序保证,以及不同WC缓冲区中写入之间的排序。它适用于英特尔和AMD处理器

一旦WC缓冲区的逐出开始,数据将受到 其定义的弱序语义

本段其余部分继续详细说明。可以使用一个或多个事务收回部分WC缓冲区,并且这些事务之间没有排序保证。一旦写入指令被提交到WC缓冲区,它在程序顺序中的位置就会完全丢失。如果这些事务的目标是IMC,则仅在单个事务的粒度上提供持久化原子性。这就是有效内存类型为WC的写操作如何在不持久化之前的WC写操作的情况下持久化。如果不同的写入指令在同一WC缓冲区内部分重叠,则一条写入指令可能会与同一WC缓冲区中的其他写入部分地保持无序。WC缓冲区中跨越块边界的写入操作在体系结构上不能保证是原子操作,除非在合并写入操作后(在英特尔处理器上)缓冲区已满

WC缓冲区可以按不同于缓冲区分配顺序的顺序逐出。围栏指令不能用于选择性刷新WC缓冲区。但是,除WC以外的任何类型的写入(其中存在重叠的已分配WC缓冲区)都会导致在执行写入之前逐出该缓冲区。在WCB中命中的加载可能不会导致移出缓冲区

刷新单个WC缓冲区时发生的事务不一定与刷新同一物理核心中的另一个WC缓冲区时发生的事务排序。即使WC逐出逻辑的实现使得WC缓冲区以串行方式逐出(这很可能),也不能保证来自不同WC缓冲区的事务不会最终在物理核心域之外交错

这都意味着,即使在同一物理核心中,也不能保证同一WC缓冲区和不同WC缓冲区的不同块之间的持久排序

导致WC缓冲区退出的事件可能因供应商和同一供应商的处理器而异。一些事件是体系结构的(记录在开发人员手册中),而其他事件是特定于实现的(记录在数据表中)。存储序列化指令是同步事件的一个示例,它保证刷新同一逻辑核上的所有WC缓冲区。发送到逻辑核心的硬件中断是异步事件的一个示例,该事件也会导致其所有WC缓冲区被逐出。此外,每个物理或逻辑核心的WC缓冲区数量非常简单