用于对远程节点的许多存储操作的原子写入的结构弹性支持的制作方法

文档序号:15739127发布日期:2018-10-23 21:59阅读:160来源:国知局
用于对远程节点的许多存储操作的原子写入的结构弹性支持的制作方法
本公开一般涉及电子领域。更具体地,一些实施例一般涉及用于对远程节点的许多存储操作的原子写入的结构弹性支持。
背景技术
:通常,用于在计算系统中存储数据的存储器可以是易失性的(用于存储易失性信息)或非易失性的(用于存储持久性信息)。存储在易失性存储器中的易失性数据结构通常用于在程序的运行时期间支持程序功能所需的临时或中间信息。另一方面,存储在非易失性(或永久性存储器)中的持久数据结构在程序的运行时之外可用并且可以重用。随着处理器中计算能力的增强,一个问题是处理器可以存取存储器的速度。例如,为了处理数据,处理器可能需要首先从存储器中获取数据。在完成数据处理之后,可能需要将结果存储在存储器中。因此,存储器存取速度可以直接影响整体系统性能。另一个重要的考虑因素是功耗。例如,在依赖于电池电力的移动计算设备中,降低功耗以允许设备在移动时操作是非常重要的。功耗对于非移动计算设备(例如,计算机服务器,例如,在数据中心中使用的等)也是重要的,因为过多的功耗可能增加成本(例如,由于额外的电力使用,增加的冷却要求等)、缩短部件寿命,或限制可以使用设备的位置。附图说明参考附图提供详细描述。在附图中,附图标记的最左边的数字标识首次出现附图标记的图。在不同附图中使用相同的附图标记表示相似或相同的项目。图1和图3-图5示出了计算系统的实施例的框图,其可用于实现本文所讨论的各种实施例。图2A示出了根据实施例的两级系统主存储器的框图。图2B示出了根据实施例的具有多个节点的数据中心或HPC架构的框图。图2C、图2D和图2E示出了根据一些实施例的流程图。具体实施方式在以下描述中,阐述了许多具体细节以便提供对各种实施例的透彻理解。然而,可以在没有具体细节的情况下实践各种实施例。在其他实例中,没有详细描述众所周知的方法、过程、组件和电路,以免模糊特定实施例。此外,可以使用各种手段来执行实施例的各个方面,所述手段诸如集成半导体电路(“硬件”)、组织成一个或多个程序的计算机可读指令(“软件”),或硬件和软件的某种组合。出于本公开的目的,对“逻辑”的引用应表示硬件、软件、固件或其某种组合。在当今的系统中,应用可能拥有存储器中数据的工作副本以及磁盘(或其他一些非易失性存储器)上数据的长久副本。使用持久性存储器(PM),一个承诺是应用可以使数据的工作副本也是长久副本。但是,采用这种方法,要求工作副本处于恒定的一致状态,即使在电力故障的情况下,也是这样。此外,在许多场景中,需要原子地对一组物理地址进行更改。不幸的是,使用当前技术,人们不能总是保证一组存储器写操作的原子性(其中原子性通常是指全部被写入持久性存储器或均不写入持久性存储器),如下面将进一步讨论的。一些实施例涉及用于对远程节点的许多存储操作的原子写入的结构弹性支持。如本文所讨论的,远程节点通常是指通过网络链路(或甚至跨网络交换机或集线器)可到达的节点。而且,节点通常是指计算设备(例如,包括存储设备或存储器)。在实施例中,逻辑(例如,硬件逻辑)能够帮助软件将一组写操作原子地(全部或全都不)提交给持久性存储器。更具体地,至少一些实施例提供新的硬件和新的软件接口,其允许在没有存储的情况下在多个域和/或系统(例如,非统一存储器存取(NUMA)系统)中公平和/或灵活地提供存储器带宽。此外,即使一般参考非易失性存储器(NVM)讨论一些实施例,实施例不限于单一类型的NVM,并且可以使用任何类型的非易失性存储器或不同NVM类型的组合(例如,包括NAND和/或NOR类型的存储器单元)或可用于存储器的其他格式)。存储器介质(无论是以DIMM(双列直插存储器模块)格式还是以其他方式使用)可以是任何类型的存储器介质,包括例如以下中的一个或多个:纳米线存储器、铁电晶体管随机存取存储器(FeTRAM)、磁阻随机存取存储器(MRAM)、多阈值电平NAND闪存、NOR闪存、自旋转矩传输随机存取存储器(STTRAM)、电阻式随机存取存储器、字节可寻址三维交叉点存储器、单级或多级PCM(相变存储器)、使用硫族化物相变材料(例如,硫属化物玻璃)的存储器设备或“就地写入”非易失性存储器。此外,任何类型的随机存取存储器(RAM)(例如,动态RAM(DRAM),由动力储备(例如电池或电容)支持以保留数据)可以提供NV存储器解决方案。易失性存储器可以包括同步DRAM(SDRAM)。因此,在各种实施例中,甚至能够在电力故障或电力中断期间保留数据的易失性存储器也可用于存储器。这里讨论的技术可以在各种计算系统中提供,所述计算系统例如,包括诸如台式机、工作站、服务器、机架系统等的非移动计算设备和诸如智能电话、平板电脑、UMPC(超移动个人计算机)、膝上型计算机、UltrabookTM计算设备、智能手表、智能眼镜、智能手镯等之类的移动计算设备),包括参考图1-5讨论的那些。更具体地,图1示出了根据实施例的计算系统100的框图。系统100可以包括一个或多个处理器102-1到102-N(这里通常称为“各处理器102”或“处理器102”)。处理器102可以经由互连或总线104进行通信。每个处理器可以包括各种组件,为清楚起见,组件中的一些仅参考处理器102-1进行讨论。因此,剩余处理器102-2到102-N中的每一个可以包括参考处理器102-1讨论的相同或相似的组件。在实施例中,处理器102-1可以包括一个或多个处理器核106-1到106-M(这里称为“核106”,或者更一般地称为“核心106”)、处理器高速缓存108(在各种实施例中,可以是共享高速缓存或私有高速缓存)、和/或路由器110。处理器核106可以在单个集成电路(IC)芯片上实现。此外,芯片可以包括一个或多个共享和/或私有高速缓存(诸如处理器高速缓存108)、总线或互连(诸如总线或互连112)、逻辑120、存储器控制器(诸如参考图3-5所讨论的那些)或其他组件。在一个实施例中,路由器110可以用于在处理器102-1和/或系统100的各种组件之间进行通信。此外,处理器102-1可以包括多于一个路由器110。此外,多个路由器110可以通信以实现处理器102-1内部或外部的各种组件之间的数据路由。处理器高速缓存108可以存储由处理器102-1的一个或多个组件(诸如核106)使用的数据(例如,包括指令)。例如,处理器高速缓存108可以对存储在存储器114中的数据本地缓存,以便处理器102的组件更快地存取。如图1所示,存储器114可以通过互连104与处理器102通信。在实施例中,处理器高速缓存108(可以是共享的)可以具有例如,各种级别,处理器高速缓存108可以是中级高速缓存和/或最后级高速缓存(LLC)。而且,每个核106可以包括级别1(L1)处理器高速缓存(116-1)(这里通常称为“L1处理器高速缓存116”)。处理器102-1的各种组件可以通过总线(例如,总线112)和/或存储器控制器或集线器直接与处理器高速缓存108进行通信。如图1所示,存储器114可以通过存储器控制器120耦合到系统100的其他组件。存储器114包括易失性存储器,并且可以互换地称为主存储器。即使存储器控制器120被示出为耦合在互连104和存储器114之间,存储器控制器120也可以位于系统100中的其他位置。例如,在一些实施例中,存储器控制器120或其一部分可以在处理器102中的一个内提供。系统100还包括经由NV控制器逻辑125耦合到互连104的NV存储器130(或非易失性存储器(NVM),例如,符合NVMe(快速NVM))。因此,逻辑125可以控制系统的各种组件对NVM130的存取。此外,即使逻辑125被示出为直接耦合到图1中的互连104,逻辑125也可以经由存储总线/互连(例如SATA(串行高级技术附件)总线、外围组件互连(PCI)(或快速PCI(PCIe)接口)等)与系统100的一个或多个其他组件(例如,存储总线经由如总线桥、芯片组(例如参考图3、图4和/或图5讨论的)等某种其他逻辑耦合到互连104)进行通信。另外,逻辑125可以合并到存储器控制器逻辑(诸如参考图3-图5所讨论的那些)中或者在各种实施例中提供在相同的集成电路(IC)设备上(例如,在与NVM130相同的IC设备上或在与NVM130相同的外壳中)。系统100还可以包括其他类型的非易失性存储器,例如参考图3-图5讨论的那些,包括例如硬盘驱动器等。图2A示出了根据实施例的两级系统主存储器的框图。一些实施例涉及包括两级存储器(在本文中可选地称为“2LM”)的系统主存储器200,其包括系统磁盘级存储的高速缓存子集(除了例如运行时数据之外)。该主存储器包括:第一级存储器210(在本文中可选地称为“近存储器”),其包括由例如易失性存储器114(例如,包括DRAM(动态随机存取存储器)),NVM130等构成的较小的较快存储器;以及第二级存储器208(在本文中可选地称为“远存储器”),其包括更大且更慢(相对于近存储器)的易失性存储器(例如,存储器114)或非易失性存储器存储(例如,NVM130)。在实施例中,远存储器被表示为主机操作系统(OS)的“主存储器”,而近存储器是远程存储器的高速缓存,其对OS是透明的,因此使得下面描述的实施例看起来像与一般主存储器解决方案相同。可以通过经由主机中央处理单元(CPU)102(在此可互换地称为“处理器”)执行的逻辑和模块的组合来完成对两级存储器的管理。近存储器可以经由一个或多个高带宽、低延迟链路、总线或互连耦合到主机系统CPU,以进行高效处理。远存储器可以经由一个或多个低带宽、高延迟链路、总线或互连(与近存储器的那些相比)耦合到CPU。参考图2A,主存储器200运行时数据存储和对系统盘存储存储器(例如图3的磁盘驱动器328或图4的数据存储设备448)的内容的存取提供给CPU102。CPU可以包括高速缓冲存储器,其将存储主存储器200的内容的子集。远存储器可以包括如本文所讨论的易失性或非易失性存储器。在这样的实施例中,近存储器210服务于远存储器208的低延迟和高带宽(即,针对CPU102存取)高速缓存,其可具有相当低的带宽和更高的延迟(即,针对CPU102存取)。在实施例中,近存储器210由近存储器控制器(NMC)204管理,而远存储器208由远存储器控制器(FMC)206管理。FMC206将远存储器208报告给系统OS作为主存储器(即,系统OS将远存储器208的大小识别为系统主存储器200的大小)。系统OS和系统应用“不知道”近存储器210的存在,因为它是远存储器208的“透明”高速缓存。CPU102还包括2LM引擎模块/逻辑202。“2LM引擎”是逻辑构造,其可以包括支持两级主存储器200的硬件和/或微代码扩展。例如,2LM引擎202可以保持完整标记表,其跟踪远存储器208的所有架构上可见元素的状态。例如,当CPU102试图存取主存储器200中的特定数据段时,2LM引擎202确定数据段是否包括在近存储器210中;如果不是,则2LM引擎202取出远存储器208中的数据段,并随后将数据段写入近存储器210(类似于高速缓存未命中)。应当理解,因为近存储器210充当远存储器208的“高速缓存”,所以2LM引擎202可以进一步执行数据完善或类似的高速缓存效率过程。此外,2LM引擎202可以管理远存储器208的其他方面。例如,在远存储器208包括非易失性存储器(例如,NVM130)的实施例中,应当理解,诸如闪存之类的非易失性存储器容易由于大量的读/写而受到存储器段的降级的影响。因此,2LM引擎202可以以对系统软件透明的方式执行包括损耗均衡、坏块避免等的功能。例如,执行耗损均衡逻辑可以包括从远存储器208中具有相对低擦除周期计数的清空未映射段的空闲池中选择段。在一些实施例中,近存储器210的尺寸可以比远存储器208小,但是精确的比率可以基于例如预期的系统使用而变化。在这样的实施例中,应当理解,因为远存储器208可以包括更密集和/或更便宜的非易失性存储器,所以主存储器200的大小可以廉价且高效地增加并且独立于系统中的DRAM的量(即,近存储器210)。在一个实施例中,远存储器208以压缩形式存储数据,并且近存储器210包括对应的未压缩版本。因此,当近存储器210请求远存储器208的内容(在实施例中其可以是非易失性DIMM)时,FMC206取回内容并以固定的有效载荷大小返回它,该有效载荷大小被定制以匹配使用中的压缩算法(例如,256B传输)。如前所述,有许多场景需要原子地对一组物理地址进行更改。遗憾的是,使用当前技术,人们不能总是保证针对一组存储器写操作的原子性(其中原子性通常是指所有数据被写入持久性存储器或所有数据均不写入持久性存储器),如下面将进一步讨论的。为了说明这一点,请考虑以下示例。应用使用数组/向量来表示任意大的数字。当修改大数字时,可能发生阵列/向量中的多个条目的更新。如果在这些更新中遇到电力故障,则重新启动时可能会使大数字处于不一致状态(因为存储大数字的存储器不是持久的)。对于可能针对持久性存储器重新设计的一系列应用而言,这将是一项重要的要求。此外,持久性存储器的一些当前实现方式可以允许软件具有确保数据被安全地提交到持久性存储器的能力。它可以通过使用新指令(例如CLFLUSHOPT和PCOMMIT)来实现这一点,该新指令将数据从易失性高速缓存/存储器刷新到持久性存储器。随着这些新指令的使用连同FENCE(一种类型的软件屏障),软件能够保证对持久性存储器的所有先前写操作都已达到持久性。遗憾的是,使用上述指令,人们不能总是保证针对一组存储器写操作的原子性(其中原子性通常指的是所有数据写入持久性存储器或所有数据均不写入持久性存储器)。此外,使用上述指令(例如CLFLUSHOPT和PCOMMIT),不能总是保证针对一组存储器写的原子性(全部写入持久性存储器或均不写入持久性存储器)。为了说明这是一个问题,请考虑以下示例。在该示例中,我们想要更新两个变量A和B,它们是表示大数字的结构的一部分。具体地,A和B都必须一起存储在持久性存储器中,或者两者都保持完整(或不存储在持久性存储器中),例如“原子性要求”。步骤操作评论1A=A_new在高速缓存中更新的A的值2B=B_new在高速缓存中更新的B的值3CLFLUSHOPTA从高速缓存刷新A4CLFLUSHOPTB从高速缓存刷新B5SFENCE保证完成步骤1-46PCOMMIT将A、B从存储器控制器缓冲器刷新到PM7SFENCE保证完成步骤7。表格1考虑到上述示例,在步骤1之后和步骤7之前的时间窗口中可能发生电力故障。在电力故障时,可能发生以下任何一种情况:1)A和B都没有存储在持久性存储器中2)只有A存储在持久性存储器中3)只有B存储在持久性存储器中4)A和B都存储在持久性存储器中。从应用的角度来看,这些情况可能发生在指令执行重新排序和高速缓存逐出策略的非确定性期间。我们可以看到只有情况1)和4)满足原子性要求。但是,无法保证不会出现情况2)或3)。该问题可以通过至少一些实施例来解决。此外,此原子性要求适用于用于重新设计以利用存储器层中的持久性的应用的一系列情况。一些示例包括:在链表的中间插入元素(需要指针被原子地更新),更改结构或数组中的连接字段,二叉树插入等。此外,应用趋于向外缩放,而诸如分布式共享存储器和分解架构之类的解决方案正在出现。这意味着存储器通常可能远离处理器(通过网络链路或甚至跨越交换机或集线器)。在这样的架构中,某些存储操作在与其它存储操作不同的时间达到持久性的可能性增加得更多(由于潜在的网络延迟、拥塞、自适应路由等)。因此,原子性要求也需要在整个网络中运行。结构和互连技术的改进使分布式共享存储器(DSM)系统有可能实现企业和大数据应用的目标。随着结构延迟预计达到存储器延迟的量级内,分布式共享存储器系统可以为结构上的服务器群提供大的单个地址空间;因此,为“向上缩放”节点控制器系统提供可缩放的经济高效的替代方案。不幸的是,对于某些实现方式,软件必须维护复杂的重做和重做日志记录以便提供这样的功能。相比之下,实施例扩展了结构架构(例如,通过提供非常动态的架构和/或具有许多不同的故障点)以提供通用机制以允许应用指定对远程存储器的许多写入一次完成或者原子地完成。为了提供这样的解决方案,实施例提供了一种新颖的架构。如本文所讨论的,以下是一些架构定义:高速缓存代理(CA)是节点内的相干性代理,其处理来自同一节点内的处理器核的存储器请求。在当前架构中,核可以使用请求队列结构来存储发送到CA的片上互连请求,例如,包括核发送给CA的所有不同的加载请求。继而,归属代理(HA)是负责处理来自高速缓存代理(在此也称为“CHA”)的存储器请求的节点集群(或更一般地说是节点),并且充当部分存储器地址空间的归属(例如,其中,一个管芯可以具有多个具有分布式地址空间映射的归属)。取决于请求所针对的地址空间,它们可能会转到同一节点的本地存储器,它们可能会进行互连(例如统一路径互连(UPI)代理,以前称为QPI(快速路径互连))以将请求路由到在同一相干域内的其他处理器,它们可以通过可以在相干域之外的主机结构接口(HFI)等转到处理器。通过(例如,UPI)互连耦合的所有处理器被认为属于相同的相干域。一个系统可以由一个或多个相干域组成,例如,所有都在通过结构互连耦合的相干域中。如本文所讨论的,相干域通常是指相干存储器中的域。此外,存储器相干性通常是指多核处理器中的每个处理元件的相应存储器位置包含相同的高速缓存数据的条件。如果没有存储器相干性,程序可能会受到不利影响。在多核处理器中,两个或更多个处理元件并行工作。偶尔他们会同时存取相同的存储器位置。只要没有处理元件改变受影响位置的数据,所有这些元件都可以毫无问题地共享和缓存数据。但是,如果这些处理元件中的一个更改了共享位置中的数据并且没有将更改通知其他处理元件,则其他元件可能会使用保留在其本地缓存中的过期版本的数据。在多核处理系统中,所谓的存储器相干性协议将对共享值的更改通知所有处理元件,确保数据的所有副本保持一致。例如,HPC(高性能计算)系统或数据中心可以由N个集群或服务器组成,这些集群或服务器可以使用这种结构彼此通信。使用结构(例如Omni-PathTM结构),每个相干域可以将一些地址区域公开给其他相干域。这在图2B中示出,图2B示出了根据实施例的具有多个节点的数据中心或HPC架构的框图。使用图2B的结构(包括交换机),每个相干域可以将一些地址区域公开给其他相干域。但是,不同相干域之间的存取并不相干。图2B的结构允许映射不同相干域之间的存储器范围的地址。节点之间的存储器(例如,RDMA(远程目录存储器存取)或RoCE(融合以太网的RDMA))也可以通过使用现有的结构或基于以太网的协议来公开。在任何情况下,对远程存储器的任何存取都将转换为结构取得(get)命令和放置(put)命令。如图2B所示,节点0、2和3中的每一个包括两个插槽(经由诸如UPI链路之类的链路耦合)。虽然图2B示出了针对每个节点的两个插槽,但是在各种实施例中可以使用更多或更少的插槽。每个节点经由诸如HFI之类的接口与交换机逻辑250进行通信,例如,使用通道和/或加载/存储语义。虽然这里参考HFI讨论了一些实施例,但是可以使用其他类型的接口(例如以太网卡/接口)。节点1是(例如,HBM或高带宽存储器)存储器服务器(例如,使用诸如本文所讨论的NVM设备,包括例如三维交叉点存储器)。此外,存储器服务器可以耦合到多个其他存储器服务器(在图2B中标记为节点1到N)。如图所示,在实施例中,节点3还可以存取双倍数据速率(DDR)和/或兼容HBM存储器。一些实施例扩展了管芯上架构以提供用于将一组远程写操作原子地绑定到“事务”的方式。如本文所讨论的,术语“事务”在下文中意味着原子操作(“全有或全无”操作)而不是传统的软件事务。一些实施例包括以下特征:(a)提供针对软件栈的一种新机制,以指定给定的一组存储(store)或放置(put)绑定到一个事务。一旦事务被释放,写入(write)将被写入远程持久性存储器。(b)扩展管芯上互连流,以便能够对远程存储器的写入(使用常规存储或放置)绑定到提供的事务。(c)扩展结构放置命令有效负载,以指定当前写入绑定到事务;因此,它只能写入远程节点的持久性存储器中。(d)扩展HFI以将与给定事务相关联的所有放置存储在中间持久缓冲器中,并且一旦事务结束就将其存储(例如,所有这些)存储在持久性存储器中。(e)扩展HFI以公开用于远程(目标)节点中运行的线程的接口,以保护存储器范围,来避免读取从HFI缓冲器复制到持久性存储器的存储器范围的不一致数据。一些实施例扩展处理器架构以能够:(1)将一组存储(以绑定到映射到远程存储器的地址空间的地址空间为目标)绑定到一个事务(在该第一情况中,应用使用常规存储器存储来对远程存储器存取);以及/或(2)将针对使用RDMA或类似协议(例如,直接数据放置(DDP))的远程节点的一组放置(在本文中可互换地称为写入或存储)绑定到一个事务(在该第二情况中,远程存储器使用放置和取得(在本文中可互换地称为读取(read)或加载(load)结构语义)来存取存储器。为了支持这两种情况,指令集架构或ISA(例如,x86ISA、ARMISA或其他ISA)被扩展为提供两条新指令,以分别用标识符(ID)和目标节点开始和结束一组放置,例如,具有以下语法:wgstartID,target#setofputsorwrites/storeswgendID此外,第一指令(wgstart)指定(例如,所有)从特定线程发布的针对远程目标节点的存储或放置被绑定到所提供的事务ID。不能将存储写入目标节点中的持久性存储器,直到执行第二个命令wgend。在最后一次存储或放置事务之后提供此释放指令。在各种实施例中,指令的格式可以取决于硬件中的最终实现方式而变化。例如,类似于放置和取得所做的,目标ID可以写入DRAM或易失性存储器,指向该存储器位置的描述符将被提供给HFI,并且HFI将使用DRAM读取来存取目标ID。ID代表唯一标识符,该标识符将针对线程ID的一组存储和进程绑定到事务。在一个实施例中,假设该ID由软件栈提供。然而,ID可以通过使用硬件ID和计数器自动计算(例如,通过硬件逻辑)。VTd(用于定向输入/输出(I/O或IO)的虚拟化技术)信息也可用于支持虚拟化。wgend指令指示事务的结束。图2C、图2D和图2E示出了根据一些实施例的流程图。在图2C-图2E中,SW指软件而Ack指的是确认。更具体地,图2C描绘了如何实现ODI(管芯上互连)和/或结构流以支持一些实施例(其中没有发生故障并且流程成功)。参考图2C,一旦核心执行wgstart指令,核心就存储映射表中(例如,每个线程有一个条目),其中,给定线程发出绑定到事务ID的写入。映射表可以存储在这里讨论的任何存储设备/存储器设备中(例如,参考图1、图2A和/或图3-图5)。执行wgstart指令后,线程将开始发出与事务关联的一组存储。对于这些写操作中的每一个:(a)核对映射表存取以取得绑定到存储(如果有)的事务ID。在存储绑定到事务ID的情况下(例如,使用管芯上接口(IDI)),它生成对CHA的扩展写命令,其包括常规写入有效载荷加上针对事务的ID;(b)CHA将请求发送给HFI(也包括标识符)。HFI将常规存储转换为结构放置并将其发送到远程节点;(c)一旦远程HFI接收到放置,它就会识别出放置与事务ID相关联。因此,代替将其写入持久性存储器,操作导致将地址和有效载荷存储到中间缓冲器,该中间缓冲器可以实现为内容可寻址存储器,例如,由事务ID索引。在实施例中,中间缓冲器在DRAM或持久性存储器(例如,HFI、NVM、NVRAM(非易失性RAM)、(例如,小)高速缓存等中)。在由核心执行与事务相关联的N个store之后,线程执行“wgendID”。响应于接收到“wgendID”指令:(a)核针对特定线程和事务ID清除映射表;(b)核(例如,使用IDI)生成wgend命令,通知该事务已完成。此命令可以指定在将store刷新/转储到存储器之前远程HFI必须预期的存储的数量。一些实施例不假设在结构中排序;但是,取决于路由方案,这部分可以简化;(c)事务到达CHA并被转发给HFI;(d)HFI,类似地,使用扩展放置命令,可以利用以下生成到远程HFI的放置事务:ID、释放位和事务数;(e)一旦HFI收到命令,则HFI检查与事务ID相关联的所有收到的放置是否与“#txts”匹配。在肯定的情况下(即,与事务ID相关联的所有接收到的放置与“#txts”匹配,可能发生以下情况。HFI将存储在中间缓冲器中的所有相关联的写入刷新/转储到持久性存储器;清除此中间缓冲器中的相应的条目;并且一旦从持久性存储器中收集所有确认,它就会生成数据报消息,返回给请求者以指示事务已成功完成。在否定的情况下(即,与事务ID相关联的所有接收到的放置与“#txts”不匹配),可以发生以下情况。HFI设置超时计数器以等待剩余的存储到达。当它达到0时,它向发起者HFI发送Nack(或不确认)并以与前一点中描述的相同方式清除中间缓冲器。显示否定情况的流程在图2D中示出。在此示例中,第二个放置失败(例如,由于交换机中的一个的硬件故障),因为第二个放置的事务ID与“#txts”不匹配。在向目标HFI指示事务完成并且触发超时之后,HFI生成并且人工Nack返回到发起者HFI,HFI向软件栈通知该事务失败。因此,软件可以假设没有任何事务被提交到持久性存储器。此外,各种实施例可以与有序流一起工作,其中到目标节点的节点在结构互连中使用相同的路径(例如,使用相同的虚拟信道而不使用自适应路由)。但是,一些实施例还支持乱序写入,因为最后一个命令(wgend)指定在将多个存储写入持久性存储器并发送回确认之前HFI应该接收的存储数量这一事实。所描述的流程提供了加载/存储(ld/st)语义的使用以对远程存储器存取以简化描述和长度。但是,所描述的流程可以映射到用于put/get结构语义的当前管芯上互连流程。为了简化,其他角落情况也可能导致故障,例如:绑定到事务的写入不针对相同的目标节点或者不针对本地HFI(例如,本地DRAM/易失性存储器)。此外,如果我们假设只使用put/get语义而不是常规的ld/st语义,则可以简化流程和架构。例如,放置和取得命令存储器描述符可以存储在所描述的示例中在存储中传达的事务ID和其他信息。从概念上讲,它们将遵循相同的结构。在一致性流程或CHA流水线算法中不需要进行任何更改,只是为了支持传达新信息。ID事务可以是唯一的或大到足以确保与迟到的取消或失败事务相关联的存储不会由于不具有相同的ID事务而干扰正在进行的事务。在实施例中,中间缓冲器中到HFI的每个条目具有“离开时间”计数器。一旦此离开时间计数器达到零(或以其他方式到期),该条目将从映射表中删除。目标是确保孤立事务在其父事务在到达HFI之前由于超时而被取消并且从缓冲器中移除时永远不占用缓冲器。在一些实施例中,例如,如上所述,将对HFI进行三个主要改变:(1)扩展架构以支持新放置命令的生成和处理;(2)扩展架构以包括中间缓冲器和对应于事务完成和超时的逻辑;(3)扩展该架构以实现向软件栈(例如,向适当的线程)通知来自目标HFI的响应(先前呈现的Ack或Nack)。为了容错,可以使用持久性存储器存储来实现中间缓冲器。因此,在停电或其他类型的瞬态故障的情况下,开始被复制到主持久性存储器的数据将存活。硬件逻辑可以向软件逻辑/堆栈公开机制以对该缓冲器存取,并且在断电发生的情况下采取相应的动作。另外,利用所描述的架构,有可能在刷新/转储存储在缓冲器中的事务写入的过程中,本地或远程节点中的另一个进程尝试存取被刷新/转储的存储器范围。这可能会导致一致性问题。图2E示出了根据试图举例说明这种情况的实施例的流程。在这种情况下,假设缓冲器包含由[@a,@a+2]组成的数据库对象。当请求者模式完成事务并且HFI开始将缓冲器刷新/转储到持久性存储器时,本地节点中的另一个线程已经开始读取该对象。在这个示例中,本地线程将读取旧的@a而不是新的@a+l和@a+2。这将导致本地线程具有对象的不一致(损坏)视图。为了缓解这个问题,可以使用两种解决方案:(1)在假设一致性基本上在系统级解决的情况下,可以使用基于软件的纯方法。因此,软件负责实现锁定机制以确保不会发生损坏或一致性问题。在一个实施例中,请求者可以(在软件级别)注册对给定地址范围的独占存取,并且一旦请求者从目标节点接收到确认就释放它。(2)可以使用基于混合软件/硬件的方法,其中目标HFI公开注册机制以保护特定地址范围。在该实施例中,这里描述的功能被应用于特定存储器DRAM/易失性地址范围。如果本地线程需要存取此范围的子集,它将注册其对HFI的存取权并一旦完成则释放它。HFI不会刷新/转储与任何注册冲突的任何事务。换句话说,HFI不会刷新/转储针对已注册存取的范围的任何事务。针对该地址范围的远程请求也可以使用类似的方法。如上所述,至少一些实施例提供新的硬件和新的软件接口,其允许在多个域和/或非统一存储器存取(NUMA)系统中公平和/或灵活地供应存储器带宽。这些技术可用于支持成功采用新兴存储器技术和结构技术,这些新兴存储器技术和结构技术经由存储器语义提供对远程存储器设备/节点的存取。此外,在没有一些实施例的情况下,这种情况可能导致严重的性能下降,例如,由于带宽限制。图3示出了根据实施例的计算系统300的框图。计算系统300可以包括经由互连网络(或总线)304进行通信的一个或多个中央处理单元(CPU)302或处理器。处理器302可以包括通用处理器、网络处理器(处理通过计算机网络303传送的数据)、应用处理器(诸如在蜂窝电话、智能电话等中使用的那些)或其他类型的处理器(包括精简指令集计算机(RISC)处理器或复杂指令集计算机(CISC))。可以使用各种类型的计算机网络303,包括有线(例如,以太网、千兆位、光纤等)或无线网络(诸如蜂窝,包括3G(第三代蜂窝电话技术或第三代无线格式(UWCC))、4G(第四代蜂窝电话技术)、高级4G、低功耗嵌入式(LPE)、长期演进(LTE)、高级LTE等)。此外,处理器302可以具有单核或多核设计。具有多核设计的处理器302可以在同一集成电路(IC)管芯上集成不同类型的处理器核。而且,具有多核设计的处理器302可以实现为对称或非对称多处理器。在实施例中,处理器302中的一个或多个可以与图1的处理器102相同或相似。例如,处理器302中的一个或多个可以包括核106和/或处理器高速缓存108中的一个或多个。此外,参考图1-图2E讨论的操作可以通过系统300的一个或多个组件来执行。芯片组306还可以与互连网络304进行通信。芯片组306可以包括图形和存储器控制集线器(GMCH)308。GMCH308可以包括与存储器114进行通信的存储器控制器310(其在实施例中可以与图1的存储器控制器120相同或相似)。存储器114可以存储数据,包括由CPU302或计算系统300中包括的任何其他设备执行的指令序列。此外,系统300包括在例如所示或未示出的各种位置的逻辑125/160和/或NVM130。在一个实施例中,存储器114可以包括一个或多个易失性存储器设备,诸如随机存取存储器(RAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、静态RAM(SRAM)或其他类型的存储器设备。还可以使用非易失性存储器,例如硬盘驱动器、闪存等,包括这里讨论的任何NVM。附加设备可以经由互连网络304进行通信,所述附加设备例如多个CPU和/或多个系统存储器。GMCH308还可以包括与图形加速器316通信的图形接口314。在一个实施例中,图形接口314可以经由加速图形端口(AGP)或外围组件互连(PCI)(或者快速PCI(PCIe)接口)与图形加速器316进行通信。在一个实施例中,显示器317(诸如平板显示器、触摸屏等)可以通过例如信号转换器来与图形接口314通信,所述信号转换器将存储在(诸如,视频存储器或系统存储器)存储器设备中的图像的数字表示转换成由显示器解释和显示的显示信号。由显示设备产生的显示信号可以在被显示器317解释并随后显示在其上之前通过各种控制设备。集线器接口318可以允许GMCH308和输入/输出控制集线器(ICH)320进行通信。ICH320可以向与计算系统300通信的I/O设备提供接口。ICH320可以通过外围桥(或控制器)324来与总线322进行通信,所述外围桥例如外围组件互连(PCI)桥、通用串行总线(USB)控制器或其他类型的外围桥或控制器。桥324可以提供CPU302和外围设备之间的数据路径。可以使用其他类型的拓扑。而且,多个总线可以例如通过多个桥或控制器与ICH320进行通信。此外,在各种实施例中,与ICH320通信的其他外围设备可包括集成驱动电子设备(IDE)或小型计算机系统接口(SCSI)硬盘驱动器、USB端口、键盘、鼠标、并行端口、串行端口、软盘驱动器、数字输出支持(例如,数字视频接口(DVI))或其他设备。总线322可以与音频设备326、一个或多个磁盘驱动器328和网络接口设备330(其与计算机网络303通信,例如,经由有线或无线接口)进行通信。如图所示,网络接口设备330可以耦合到天线331以便无线地(例如,经由电气和电子工程师协会(IEEE)802.11接口(包括IEEE802.11a/b/g/n/ac等)、蜂窝接口、3G、4G、LPE等)与网络303进行通信。其他设备可以经由总线322进行通信。此外,在一些实施例中,各种组件(例如网络接口设备330)可以与GMCH308进行通信。另外,处理器302和GMCH308可以组合以形成单个芯片。此外,在其他实施例中,图形加速器316可以包括在GMCH308内。此外,计算系统300可以包括易失性和/或非易失性存储器。例如,非易失性存储器可以包括以下中的一个或多个:只读存储器(ROM)、可编程ROM(PROM)、可擦除PROM(EPROM)、电EPROM(EEPROM)、磁盘驱动器(例如,328)、软盘、光盘ROM(CD-ROM)、数字通用光盘(DVD)、闪存、磁光盘或能够存储电子数据的其他类型的非易失性机器可读介质(例如,包括指令)。图4示出了根据实施例的以点对点(PtP)配置布置的计算系统400。特别地,图4示出了一种系统,其中处理器、存储器和输入/输出设备通过多个点对点接口互连。参考图1-3讨论的操作可以通过系统400的一个或多个组件来执行。如图4所示,系统400可以包括几个处理器,为清楚起见,仅示出了两个处理器402和404。处理器402和404每个可以包括本地存储器控制器集线器(MCH)406和408,以实现与存储器410和412的通信。存储器410和/或412可以存储各种数据,例如参考图1和/或图3的存储器114所讨论的那些数据。此外,在一些实施例中,MCH406和408可以包括存储器控制器120。此外,系统400包括在诸如所示或未示出的各种位置的逻辑125/160和/或NVM130。在各种实施例中,逻辑125/160和/或NVM130可以经由总线440或444、经由到处理器402或404或芯片组420的其他点对点连接等而耦合到系统400。在实施例中,处理器402和404可以是参考图3讨论的处理器302中的一个。处理器402和404可以分别使用PtP接口电路416和418经由点对点(PtP)接口414来交换数据。而且,处理器402和404可以各自使用点对点接口电路426、428、430和432经由各个PtP接口422和424与芯片组420交换数据。芯片组420可以进一步经由高性能图形接口436,例如使用PtP接口电路437,来与高性能图形电路434交换数据。在一些实施例中,参考图3所讨论的,图形接口436可以耦合到显示设备(例如,显示器317)。在一个实施例中,图1的核106和/或处理器高速缓存108中的一个或多个可以位于处理器402和404(未示出)内。然而,其他实施例可以存在于图4的系统400内的其他电路、逻辑单元或设备中。此外,其他实施例可以分布在图4所示的若干电路、逻辑单元或设备中。芯片组420可以使用PtP接口电路441与总线440通信。总线440可以具有与其通信的一个或多个设备,例如总线桥442和I/O设备443。经由总线444,总线桥442可以与其他设备进行通信,所述其他设备诸如键盘/鼠标445、通信设备446(诸如调制解调器、网络接口设备或可以与计算机网络303通信的其他通信设备,如参考网络接口设备330所讨论的那样,例如,包括经由天线331)、音频I/O设备和/或数据存储设备448。数据存储设备448可以存储可以由处理器402和/或404执行的代码449。在一些实施例中,这里讨论的组件中的一个或多个可以体现为片上系统(SOC)设备。图5示出了根据实施例的SOC封装的框图。如图5所示,SOC502包括一个或多个中央处理单元(CPU)核520、一个或多个图形处理器单元(GPU)核530、输入/输出(I/O)接口540和存储器控制器542。可以将SOC封装502的各种组件耦合到互连或总线,例如这里参考其他附图所讨论的互连或总线。而且,SOC封装502可以包括更多或更少的组件,诸如本文中参考其他附图所讨论的那些组件。此外,SOC封装520的每个组件可以包括一个或多个其他组件,例如,如参考本文其他附图所讨论的其他组件。在一个实施例中,SOC封装502(及其组件)被提供在一个或多个集成电路(IC)管芯上,例如,其封装在单个半导体器件上。如图5所示,SOC封装502经由存储器控制器542耦合到存储器560(其可以与这里参考其他附图讨论的存储器类似或相同)。在实施例中,存储器560(或者它的一部分)可以集成在SOC封装502上。I/O接口540可以耦合到一个或多个I/O设备570,例如,经由互连和/或总线,诸如本文中参考其他附图所讨论的互连和/或总线。I/O设备570可以包括键盘、鼠标、触摸板、显示器、图像/视频捕获设备(诸如相机或便携式摄像机/视频记录器)、触摸屏、扬声器等中的一个或多个。此外,在实施例中,SOC封装502可以包括/集成项目125、130和/或160。可选地,可以在SOC封装502的外部提供项目125、130和/或160(即,作为离散逻辑)。本文描述的实施例可以由电池、无线充电、更新能源(例如,基于太阳能或运动的充电)供电,或者在连接到充电端口或墙上插座时供电。以下实施例涉及其他实施方案。示例1包括一种装置,包括:或在此讨论的任何其他示例,非易失性存储器,用于存储对应于多个写操作的数据;以及/或在此讨论的任何其他示例,包括逻辑的第一节点,该逻辑的至少一部分在硬件中,以响应于多个写操作而执行一个或多个操作,以使得数据原子地存储在第二节点处,或本文所讨论的任何其他示例,其中逻辑将多个写操作原子地绑定到事务,其中响应于事务的释放而将数据写入非易失性存储器。示例2包括示例1或本文所讨论的任何其他示例的装置,其中第二节点耦合到一个或多个非易失性存储器节点。示例3包括示例1-2或本文所讨论的任何其他示例中任一示例的装置,其中第一节点或第二节点中的每一个包括一个或多个插槽。示例4包括示例1-3或本文所讨论的任何其他示例中任一示例的装置,其中第一节点或第二节点的一个或多个插槽中的至少一个耦合到易失性存储器或高带宽存储器。示例5包括示例1-4或本文所讨论的任何其他示例中的任何一个的装置,其中第一节点在第一域中,而第二节点在第二域中。示例6包括示例1-5或本文所讨论的任何其他示例中任一示例的装置,其中第一域和第二域形成非一致性存储器存取(NUMA)系统。示例7包括示例1-6或本文所讨论的任何其他示例中任一示例的装置,其中第一节点经由网络链路耦合到第二节点。示例8包括示例1-7或本文所讨论的任何其他示例中任一示例的装置,其中网络链路用于经由交换机传送数据。示例9包括示例1-8或本文所讨论的任何其他示例中任一示例的装置,其中,交换机经由主机结构接口(HFI)与第一节点或第二节点进行通信。示例10包括示例1-9或本文所讨论的任何其他示例中任一示例的装置,其中,交换机经由统一路径互连(UPI)通道或快速路径互连(QPI)通道与第一节点或第二节点进行通信。示例11包括示例1-10或这里讨论的任何其他示例中的任何一个的装置,其中逻辑响应于第一指令而将多个写操作原子地绑定到事务。示例12包括示例1-11或本文所讨论的任何其他示例中任一示例的装置,其中第一指令用于指示标识符和目标节点。示例13包括示例1-12或这里讨论的任何其他示例中任一示例的装置,其中响应于第二指令而释放事务。示例14包括示例1-13或本文所讨论的任何其他示例中任一示例的装置,其中第二指令用于指示标识符。示例15包括示例1-14或本文所讨论的任何其他示例中任一示例的装置,其中非易失性存储器耦合到两级系统主存储器以至少临时存储数据的一部分。示例16包括示例1-15或本文所讨论的任何其他示例中任一示例的装置,其中非易失性存储器包括以下中的一个或多个:纳米线存储器、铁电晶体管随机存取存储器(FeTRAM)、磁阻随机存取存储器(MRAM)、闪速存储器、自旋转矩传输随机存取存储器(STTRAM)、电阻式随机存取存储器、可字节寻址的三维交叉点存储器、PCM(相变存储器)以及由电力储备支持以用于在电力故障或电力中断期间保留数据的易失性存储器。示例17包括示例1-16或本文所讨论的任何其他示例中任一示例的装置,包括以下中的一个或多个:至少一个处理器,具有一个或多个处理器核,通信地耦合到非易失性存储器,通信地耦合到该装置的电池,或通信地耦合到该装置的网络接口。示例18包括一种方法,包括:或者在此讨论的任何其他示例,将与多个写操作相对应的数据存储在非易失性存储器中;以及/或本文所讨论的任何其他示例,响应于多个写操作,在第一节点处执行一个或多个操作,以以使得数据原子地存储在第二节点处,或在此讨论的任何其他示例中,其中,一个或多个操作将多个写操作原子地绑定到事务,其中响应于事务的释放而将数据写入非易失性存储器。示例19包括示例18或本文所讨论的任何其他示例的方法,还包括将第二节点耦合到一个或多个非易失性存储器节点。示例20包括示例18-19或本文所讨论的任何其他示例中任一个的方法,还包括经由网络链路耦合第一节点和第二节点。示例21包括示例18-20或本文所讨论的任何其他示例中任一个的方法,还包括经由交换机耦合第一节点和第二节点的网络链路。示例22包括示例18-21或本文所讨论的任何其他示例中任一个的方法,还包括响应于第一指令而将多个写操作原子地绑定到事务。示例23包括示例18-22或本文所讨论的任何其他示例中任一个的方法,还包括响应于第二指令而释放事务。示例24包括一种计算机可读介质,其包括一个或多个指令,所述指令当在处理器上执行时,配置处理器以执行示例18至23中任一个的一个或多个操作。示例25包括一种装置,包括用于执行示例18至23的任何一个中所述的方法的单元。示例26包括一种计算系统,包括:或在此讨论的任何其他示例,处理器,其耦合到非易失性存储器,其中,非易失性存储器用于存储与多个写操作相对应的数据;以及/或本文所讨论的任何其他示例,第一节点包括用于响应于多个写操作而执行一个或多个操作以使得在第二节点处原子地存储数据的逻辑,或者本文中讨论的任何其他示例,其中所述逻辑用于将多个写操作原子地绑定到事务,其中响应于事务的释放而将数据写入非易失性存储器。示例27包括示例26或本文所讨论的任何其他示例的系统,其中第二节点耦合到一个或多个非易失性存储器节点。示例28包括示例26-27或本文所讨论的任何其他示例中任一个的系统,其中第一节点或第二节点中的每一个包括一个或多个插槽。示例29包括示例26-28或本文所讨论的任何其他示例中任一示例的系统,其中第一节点或第二节点的一个或多个插槽中的至少一个耦合到易失性存储器或高带宽存储器。示例30包括示例26-29或本文所讨论的任何其他示例中任一个的系统,其中第一节点在第一域中,而第二节点在第二域中。示例31包括示例26-30或本文所讨论的任何其他示例中任一个的系统,其中第一域和第二域形成非一致性存储器存取(NUMA)系统。示例32包括示例26-31或本文所讨论的任何其他示例中任一个的系统,其中第一节点经由网络链路耦合到第二节点。示例33包括示例26-32或本文所讨论的任何其他示例中任一示例的系统,其中网络链路经由交换机传送数据。示例34包括示例26-33或本文所讨论的任何其他示例中任一示例的系统,其中,交换机经由主机结构接口(HFI)与第一节点或第二节点进行通信。示例35包括示例26-34或本文所讨论的任何其他示例中任一示例的系统,其中,交换机经由统一路径互连(UPI)通道或快速路径互连(QPI)通道与第一节点或第二节点进行通信。示例36包括示例26-35或本文所讨论的任何其他示例中任一示例的系统,其中该逻辑用于响应于第一指令而将多个写操作原子地绑定到事务。示例37包括示例26-36或本文所讨论的任何其他示例中任一个的系统,其中第一指令用于指示标识符和目标节点。示例38包括示例26-37或本文所讨论的任何其他示例中任一个的系统,其中响应于第二指令而释放事务。示例39包括示例26-38或本文所讨论的任何其他示例中任一示例的系统,其中第二指令用于指示标识符。示例40包括示例26-39或本文所讨论的任何其他示例中任一个的系统,其中非易失性存储器耦合到两级系统主存储器以至少临时存储数据的一部分。示例41包括示例26-40或本文所讨论的任何其他示例中任一个的系统,其中非易失性存储器包括以下中的一个或多个:纳米线存储器、铁电晶体管随机存取存储器(FeTRAM)、磁阻随机存取存储器(MRAM)、闪速存储器、自旋转矩传输随机存取存储器(STTRAM)、电阻式随机存取存储器、可字节寻址的三维交叉点存储器、PCM(相变存储器)以及由电力储备支持以用于在电力故障或电力中断期间保留数据的易失性存储器。示例42包括示例26-41或本文所讨论的任何其他示例中任一个的系统,包括以下中的一个或多个:至少一个处理器,其具有一个或多个处理器核,通信地耦合到非易失性存储器,通信地耦合到该装置的电池,或通信地耦合到该装置的网络接口。示例43包括一种装置,包括用于执行如任何前述示例中所述的方法的单元。示例44包括机器可读存储装置,其包括机器可读指令,当被执行时,机器可读指令用于实现如任何前述示例中阐述的方法或实现如任何前述示例中阐述的装置。在各种实施例中,这里例如参考图1-5所讨论的操作,可以实现为硬件(例如,电路)、软件、固件、微代码或其组合,其可以提供作为计算机程序产品,例如,包括其上存储有指令(或软件过程)的有形(例如,非暂时性)机器可读或者计算机可读介质,所述指令用于对计算机进行编程以执行本文所讨论的过程。此外,作为示例,术语“逻辑”可以包括软件、硬件或软件和硬件的组合。机器可读介质可以包括存储器设备,诸如关于图1-5所讨论的那些。另外,这种有形计算机可读介质可以作为计算机程序产品下载,其中程序可以经由通信链路(例如,总线、调制解调器或网络连接)借助数据信号(例如在载波或其他传播介质中那样)从远程计算机(例如,服务器)传送到请求计算机(例如,客户端)。说明书中对“一个实施例”或“实施例”的引用意味着结合该实施例描述的特定特征、结构或特性可以包括在至少一个实现方式中。在说明书中各处出现的短语“在一个实施例中”可能或可能不是全部指代相同的实施例。而且,在说明书和权利要求书中,可以使用术语“耦合”和“连接”以及它们的派生词。在一些实施例中,“连接”可用于指示两个或更多个元件彼此直接物理或电接触。“耦合”可以意指两个或更多个元件直接物理或电接触。然而,“耦合”还可以意指两个或更多个元件可以不彼此直接接触,但是仍然可以彼此协作或交互。因此,尽管已经用结构特征、数值和/或方法动作专用的语言描述了实施例,但是应该理解,所要求保护的主题可以不限于所描述的具体特征、数值或动作。而是,公开了具体特征、数值和动作作为实现所要求保护的主题的示例形式。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1