用于数据处理网络的存储器系统的制作方法

文档序号:20065850发布日期:2020-03-06 08:29阅读:282来源:国知局
用于数据处理网络的存储器系统的制作方法

有关联邦政府赞助的研究或开发的声明

本发明是根据由doe授予的fastforward2合同在美国政府支持下做出的。美国政府享有本发明的某些权利。

本公开涉及数据处理网络中的物理设备存储器的控制。



背景技术:

数据处理系统可以包括各种类型的多个计算设备和不同类型的多个存储器资源。例如,嵌入式数据处理系统可以将网络技术与无线计算、话音辨识、因特网能力和人工智能组合以使得能实现设备的连接。

系统可以包括例如动态随机存取存储器(dram)、块设备、远程直接存储器存取(rdma)器具、位于硬件加速器上的存储器以及其他类型的易失性和非易失性存储器。数据处理系统内的存储器和其他资源通过系统地址空间来寻址,然而每个存储器设备通过物理地址空间来寻址。

通过对操作系统的软件调用,或者通过软件介导转换过程的硬件缓存,可以静态地执行系统地址与对应的物理地址之间的映射。特别是当在多个处理核心或多个进程之间共享存储器资源时并且当存储器资源具有不同的特性时,这样的方法不提供存储器的最佳使用。

附图说明

图1示出与本公开的某些实施方式一致的数据处理网络。

图2是与本公开的实施方式一致的数据处理网络的另一框图。

图3是与本公开的实施方式一致的并入存储器节点控制器的简化网络的框图。

图4示出与本公开的实施方式一致的数据一致性协议的状态图。

图5是与本公开一致的数据处理网络的框图。

图6是与本公开的实施方式一致的用于路由存储器存取请求的方法的流程图。

图7图示与本公开的实施方式一致的数据处理系统中的存储器的逻辑布置。

图8示出与本公开的实施方式一致的在范围内的数据已被修改并且数据的物理副本已被做出之后的存储器的另一逻辑布置。

图9是与本公开的实施方式一致的用于在数据处理系统中执行拷贝操作的方法的流程图。

图10图示与本公开的实施方式一致的两层写时拷贝机制中的范围表条目。

图11是用于在处理数据处理系统中处理写入操作的方法的流程图。

图12是与本公开的实施方式一致的用于分配存储器的方法的流程图。

图13是与本公开的实施方式一致的用于分配存储器的另一方法的流程图。

图14是与本公开的实施方式一致的用于分配存储器的另一方法的流程图。

具体实施方式

虽然可以以许多不同的形式具体实现本发明,但是在附图中示出并将在本文中详细地描述具体实施方式,同时应理解,本公开将被认为是本发明的原理的实施例,而不旨在将本发明限于所示出和描述的具体实施方式。在下面的描述中,相似的附图标记可以用于描述附图的若干视图中的相同的、类似的或对应的部分。

在本文档中,诸如第一和第二、顶部和底部等的关系术语可以仅用于将一个实体或动作与另一实体或动作区分开,而不一定在这样的实体或动作之间要求或者暗示任何实际的这种关系或次序。术语“含”、“含有”、“包括”、“包括有”、“有”、“具有”或其任何其他变化旨在涵盖非排他性包括,使得含元件的列表的过程、方法、物品或装置不仅包括那些元件,而且可以包括未明确地列举或者为这样的过程、方法、物品或装置所固有的其他元件。在没有更多约束的情况下,继之以“含...一”的元件不排除在含该元件的过程、方法、物品或装置中存在附加相同的元件。

贯穿本文档对“一个实施方式”、“某些实施方式”、“实施方式”、“实施方案”、“方面”或类似的术语的引用意味着连同该实施方式一起描述的特定特征、结构或特性被包括在本公开的至少一个实施方式中。因此,这样的短语贯穿本说明书在各个地方中的出现不一定全部参考同一实施方式。此外,可以在一个或多个实施方式中以任何适合的方式组合特定特征、结构或特性而没有限制。

如本文所使用的术语“或”将被解释为包括性的或者意指任何一个或任何组合。因此,“a、b或c”意指“下列中的任一个:a;b;c;a和b;a和c;b和c”。仅当元件、功能、步骤或行为的组合以某种方式固有地相互排斥时才会发生此定义的例外。另外,除非另外陈述或者从上下文中清楚,否则语法连词旨在表达结合从句、句子、单词等的任何且所有析取和合取组合。因此,术语“或”通常应该被理解为意指“和/或”等。

本文提及的所有文档都特此通过引用整体地并入。除非另外显式地陈述或者从文本中清楚,否则对单数项目的引用应该被理解为包括复数项目,并且反之亦然。

单词“大约”、“约”、“大致”等当伴随数值时,将被解释为指示如本领域的普通技术人员应领会的偏差以出于预定目的令人满意地操作。值和/或数值的范围在本文中仅作为实施例被提供,而不对所描述的实施方式的范围构成限制。本文提供的任何和所有实施例或示例性语言(“例如”、“诸如”等)的使用仅仅旨在更好地阐明实施方式,而不对实施方式的范围造成限制。说明书中的语言不应该被解释为将任何未要求保护的要素指示为对实施方式的实践必不可少。

为了图示的简单和清楚,可以在图之间重复附图标记以指示对应或相似的元件。许多细节被阐述以提供对本文描述的实施方式的理解。可以在没有这些细节的情况下实践实施方式。在其他情况下,尚未详细地描述公知的方法、程序和组件以避免使所描述的实施方式模糊。描述不应被认为限于本文描述的实施方式的范围。

在以下描述中,应理解的是,诸如“第一”、“第二”、“顶部”、“底部”、“上”、“下”、“在…上方”、“在…下方”等的术语是方便的单语,而不应被解释为限定术语。另外,可以在本文中可互换地使用术语装置和设备。

本公开涉及可在硬件中管理和/或加速的存储器系统。该存储器器系统利用范围表、存储器节点控制器以及可选地数据交付高速缓存,以实现诸如存储器分配、数据移动、范围一致性修改和写时拷贝(此后为cow)技术的机制。另外,该存储器系统可以符合ieee计算机协会的posix编程接口标准。

该存储器系统可以用硬件、软件或硬件和软件的组合加以实现。

在一个实施方式中,该存储器系统为硬件内数据移动、转换和存储器内计算添加加速度。它使得进程(执行线程)能够存在于隔离地址空间中,分配存储器,取消分配存储器,并且实现posix标准所要求的所有存储器功能,同时完全由硬件这样管理。相比之下,常规的存储器系统由操作系统用软件加以管理。这种组合使得能实现更高效的分配、cow、数据迁移、最佳数据放置、加速器卸载(图形处理单元的通用计算(gpgpu)等),并且已应用于近存储器通用计算系统或近存储器稀疏数据约简系统。存储器系统是可配置的,使得实施者可选择要在硬件与软件之间划分职责的地方。它给予实施者在完全硬件管理的或软件管理的硬件之间选择的自由,同时在中间具有许多级别,使得它适合可能最广泛的应用领域。为了实现这个,实施方式可以集合以下子组件:

范围表-范围表是从面向用户的虚拟地址到系统地址的转换的存储器支持的表示,其中例如用户是在计算设备上执行的进程或线程。系统地址空间使系统的所有元件(诸如加速器、存储设备和网络接口控制器(nic))被映射到其中。这提供跨系统中的所有类型的设备的低延迟存储器转换和透明存储器技术放置。从虚拟地址到系统地址的转换发生在范围表级别下,然而从系统地址到物理地址的转换发生在存储器节点控制器内,在下面讨论。系统地址包含所有存储介质(存储器、块设备、非易失性、网络存储装置等),包括加速器。所有存储装置、存储器和nic功能都被虚拟化在系统地址层后面。这意味着所分配的存储器可能在这些设备的任何一个上,经由远程直接存储器存取(rdma)在网络之上,或者甚至在附连到外围组件互连的加速器上。系统地址可以或者可能不被任何物理地址支持。例如,这使得能实现更快的存储器分配。

范围表缓冲器-范围表缓冲器是范围表高速缓存,所述范围表高速缓存存储用于多个虚拟地址空间的范围条目并且使得能针对给定虚拟地址实现范围条目的快速查找以便执行虚拟到系统地址空间转换。此范围表缓冲器可以是单级或多级。它知道虚拟地址空间的范围的范围表存储器表示。

两层写时拷贝-这是用于为存储器系统提供高效写时拷贝性能的机制。

存储器节点控制器(mnc)-这是用于提供系统到物理设备地址的高效转换、提供所有存储器/存储技术在一个地址空间(系统地址空间)后面的透明跨技术数据迁移和集成的机制。mnc还使得能实现数据从mnc控制的存储器空间(系统地址空间)到更靠近主核心定位的数据交付高速缓存(ddc)的前馈推送。

数据交付高速缓存(ddc,可选)-ddc是可以例如用片上存储器技术加以实现的高速缓存。与其他高速缓存不同,其填充和驱逐由mnc指示。ddc用作系统地址空间内的转换过滤器,从而减少通过mnc从系统地址空间到物理地址空间所要求的转换的总数量。

嵌套虚拟化(用于虚拟机的快速转换)-利用范围表实施方案,系统提供用于以k级转换执行o(1)嵌套转换查找的手段。这对例如常常运行k级转换的云环境是有益的,在当前系统中每个转换有嵌套页面转换。利用所公开的存储器系统,每个嵌套级别仅仅是附加偏移计算。

可以经由指令集架构(isa)的指令来访问存储器系统的硬件组件。这些指令使得传统的软件驱动的操作能够成为硬件驱动的。可选地,可以通过软件来控制对存储器系统的监督。

系统地址空间提供跨系统中的所有设备的统一地址空间。虚拟地址空间与物理地址空间之间的这个中间步骤使得能实现诸如近存储器计算的构思,减少对于用页面放置进行高速缓存刷新的需要,并且消除对于在例如加速器与cpu之间进行转换的需要。

系统概述

图1是与本公开的实施方式一致的数据处理网络的示意图示。参考图1,数据处理网络包括许多处理器核心100、110。在图1的实施例中,图示了两个这样的处理器核心,但是(如通过虚线块112示意性地示出的)能提供更多的处理器核心。可替代地,系统能使用仅仅一个处理器核心。

处理器核心被布置为依照虚拟存储器地址来处理数据。例如,处理器核心中的每一个均可以例如在操作系统或所谓的管理程序的控制下依照相应的虚拟存储器地址空间中的虚拟存储器地址来处理数据,所述操作系统或所谓的管理程序向正在由不同的处理器核心执行的进程分配虚拟存储器地址空间,部分地作为用于避免与意外地或恶意地访问适合正在由处理器核心中的另一个执行的进程的数据的一个处理器核心相关联的进程的技术。

对于每组处理器核心100、110,这些高速缓存的一致性网络可以被分区以在单个mnc周围保持一致性,同时该mnc在较大尺度下提供一致性。在此方法中,存储器存取请求被路由到指定的mnc。处理器的集群可以或者可能不与其他集群一致。然而,mnc是彼此页面一致的。此方法减少维持一致性所需的业务量。

第一层存储器地址转换

数据处理网络的元件(诸如存储器和其他资源)可通过系统地址空间中的系统地址进行寻址。存储器地址转换装置被提供来在虚拟存储器地址空间中的虚拟存储器地址与系统地址空间中的系统地址之间转换。此系统地址空间能经由间接手段或者经由将此系统地址空间作为匿名物理空间来访问的处理设备被访问(即,用于处理设备的物理存储器被虚拟化)。系统地址是第一层的“输出”存储器地址。系统地址能表示能用来以物理方式对物理存储器设备或其他可寻址单元进行寻址的物理地址。可替代地,系统地址能表示在用于访问物理存储器设备或其他可寻址单元之前需要地址转换的另一阶段的地址。从地址转换技术的角度来看,这些选项是等效的。也就是说,地址转换技术从虚拟存储器地址开始并且产生系统存储器地址。对系统地址的地址转换的另一阶段由存储器节点控制器160和170提供。在此实施例中,传递给存储器节点控制器的地址来自范围。然而,在替代实施方式中,传递给存储器节点控制器的地址由位于mnc层之上的常规基于页面的虚拟存储器系统提供。在此实施方案中,基于页面的虚拟存储器层会将它们视为物理设备地址,但是mnc会将这些视为系统地址。在再一个方法中,常规的基于分段的转换方案被实现在系统地址空间之上。在此方法中,分段分配可以由程序员建立。

在图1中,地址转换由所谓的范围表缓冲器(rtb)105、115执行。这执行虚拟存储器地址空间中的虚拟存储器地址与系统(输出)地址空间中的系统存储器地址之间的地址转换。处理器核心中的每一个均有相应的范围表缓冲器。范围表缓冲器的操作在2017年7月14日提交的标题为“memoryaddresstranslation”的共同待决的美国专利申请no.15/650,056中进行了详细的描述,其特此通过引用整体地并入本文。然而,可以使用其他地址转换技术,诸如例如转换后备缓冲器(tlb)或软件介导转换技术。

旁路逻辑108、118被提供来当地址转换使得虚拟存储器地址等于对应的系统存储器地址时选择性地绕过rtb105、115。旁路电路或逻辑可通过将在下面讨论的控制信号109、119来控制。当旁路逻辑被启用时,rtb105、115不执行任何转换,或者由rtb105、115执行的转换被忽视并且虚拟存储器地址由旁路路线104、114提供以用作输出存储器地址。

处理器核心100、110在此实施例中被实现或者制作在集成电路基板上,并且可以都(或全部,在不止两个的情况下)被设置在同一集成电路基板上。这些设备在图1中被称为“片上”。

另外片上提供的是高速缓存和/或系统高速缓存存储器130,被称作用于为由要在下面讨论的存储器系统所持有的数据的子集(诸如最近访问的子集和/或推测地取出的子集)提供临时暂存器的数据交付高速缓存(ddc)。如图1中所示,处理器核心100和110共享公共高速缓存/系统高速缓存130。然而,在其他实施例中能提供不止一个高速缓存,并且另一高速缓存140用虚线示出以图示这样的布置。在一个实施方式中,可以利用虚拟索引和系统地址标签来与高速缓存/系统高速缓存130并行地访问高速缓存。

在一个实施方式中,高速缓存/系统高速缓存130(140)根据由rtb105、115所生成的系统(输出)存储器地址来操作。在另一实施方式中,与rtb105、115并行地访问第一级高速缓存。

虚线150指示片上设备与片外设备之间的逻辑边界,但是应领会的是,这仅仅是实施例并且在图1中在同一集成电路上或者作为不同的电路示出是模块中的任一个的实施方案是系统设计者的事情。因此,图1表示如何可能实现片上和片外组件的分离的示意实施例。

存储器节点控制器

提供了一个或多个存储器节点控制器160、170,其进而访问一个或多个相应的物理设备180、190,诸如例如随机存取存储器(dram)、相变存储器(pcm)和高带宽存储器(hbm)。存储器节点控制器可以位于片上或片外。考虑到物理设备180、190在物理地址空间中操作,存储器节点控制器160、170的功能可包括:(a)如果需要转换的另一阶段则将系统(输出)存储地址转换为物理设备存储地址,以及(b)管理需要访问物理设备180、190中的哪一个以便实现要求的存储器存取操作。

上面提及的转换操作(a)是第二层地址转换并且可使用要在下面讨论的技术或者通过已知的存储器地址转换技术来执行。可使用例如存储在存储器节点控制器160、170中的一个或多个处的表或目录来执行用于管理应该访问物理设备180、190中的哪一个的管理操作(b)以指示物理地址空间在物理设备和进而存储器节点控制器之间的分区。

在图1的实施例中,提供了两个存储器节点控制器。如果存储器节点控制器中的一个(诸如存储器节点控制器160)接收到对与由另一存储器节点控制器(诸如存储器节点控制器170)所处理的地址有关的存储器存取事务的请求,则第一存储器节点控制器160可经由数据连接165与另一存储器节点控制器170进行通信,从而传递与该事务有关的系统地址并且请求由第二存储器节点控制器170执行该事务。

依照某些实施方式,mnc提供专用硬件机制来收集并使用元数据,包括诸如重用距离的性能统计。元数据用于在可用技术中提供存储器页面的更好放置。

如上所述,mnc将数据处理网络的系统地址空间的至少一个分区映射到物理设备存储空间。mnc提供从系统地址空间到资源中的物理空间的映射功能,所述资源诸如例如dram设备、块设备、远程直接存储器存取(rdma)器具或位于硬件加速器上的存储器。rdma器具可以是用于远程存储器存取的任何存储器或存储设备。mnc提供用于进行以下各项的功能性:写入到系统地址、维护跨存储器结构的页面级别所有权、经由元数据跟踪将页面最佳地放置在存储器中以及将数据前馈到快速片上存储器。mnc用硬件加以实现并且可以是具有附加功能的集成电路的一部分。例如,可以从网络表或硬件描述语言(hdl)表示合成mnc。

依照某些实施方式,mnc将诸如存储装置、存储器或网络接口控制器(nic)这样的资源的单个抽象提供到单个系统地址空间中。

依照某些实施方式,mnc提供用于将在mnc页面级别的存储器视为在多个mnc之间“可共享”的手段。mnc提供用于将存储器视为跨多个数据交付高速缓存“可共享”的手段。

依照某些实施方式,mnc提供写时拷贝装置的第二层。写时拷贝装置设备的操作在2017年7月14日提交的标题为“methodandapparatusfortwo-layercopy-on-write”的共同待决的美国专利申请no.15/649,930中进行了详细的描述,其特此通过引用整体地并入本文。

依照某些实施方式,mnc提供用于执行单个拷贝操作的高效手段。这个可以被例如提供给加速器设备的所有级别并且可以经由nic提供。

依照某些实施方式,mnc是遵循存储器服务器模型配置的存储器结构的一部分,其中存储器结构为来自数据处理网络的各种本地或远程计算设备的存储器请求服务。

图2是与本公开的实施方式一致的数据处理网络200的框图。数据处理网络200包括第一存储器节点控制器(mnc0)160以及可选地一个或多个第二存储器节点控制器,诸如mcn1170。mnc160包括被耦合到许多其他功能块的控制逻辑204。

设备接口206使得mnc160能够与多个计算设备208和210以及诸如硬件加速器这样的其他设备交互。计算设备可以是片上的或片外的。系统200被配置为网络,其中mnc160和170提供将计算设备(诸如208和210)与存储器资源互连的网络节点。在一个实施方式中,设备接口206符合‘peripheralcomponentinterconnectexpress(外围组件互连快速)’(pcie)标准。pcie是用于互连计算机中的内部设备的非专有标准。例如,设备接口206可以包括pcie根联合体,其使得能够与多个计算机元件或虚拟化pcie设备连接。当使用多个mnc节点时,该节点是pcie标准中的‘多根(multi-root)’。然而,mnc还可支持来宾操作系统的单根虚拟化以便于向后兼容性。mnc网络上的设备经由虚拟化硬件介导pci设备树被辨识。

mnc和基于范围的地址转换的使用使得能够在统一结构上连接所有计算设备,例如主机和加速器两者。

io控制器

mnc160还包括i/o控制器(ioc)212。ioc212是使得能够连接到片外组件的通用互连或总线。这个可以是具有协议的定制物理层,其使得能够对命令做出响应或者传输命令。例如,命令可以是指令集架构(isa)级存储器指令。例如,ioc212可以在诸如pcie-v4结构这样的标准结构下操作。取决于由mnc和整体系统所要求的特性,能使用其他物理层。ioc212使得能能够与其他mnc设备进行通信。

存储器控制器

mnc160还包括存储器/存储组件,诸如使得能够与存储设备216耦合的存储器控制器214(诸如一个或多个dram控制器)、用于与块设备220耦合的块设备控制器218(诸如例如sata控制器)。每个设备被映射到可由操作系统进一步虚拟化的存储器的物理范围。

附加地,io控制器222使得能够连接到诸如网络接口控制器224这样的设备。

在图2中所示的实施方式中,mnc160还包括加速器物理存储器226、用作用于数据重排、存储器内计算并用于nic和rdma事务的本地缓冲器的快速本地存储器232(诸如例如组合式dram/nv3-d集成存储器)。

物理设备配置设置(pdsc)存储器

配置数据被存储在物理设备配置设置(pdcs)存储器228中。例如,可以在pdcs存储器228中存储通过系统地址空间对加速器物理存储器226的映射。物理设备配置信息经由固件接口、板上非易失性存储器(诸如spi闪存或等同物)、小型持久可移动存储装置(诸如microsd卡)或可传送用于物理映射配置及诸如信道和中断分配这样的其他配置的信息的任何其他方法被提供给mnc。物理设备(诸如sata、pcie、ssd、dram和其他设备)被从系统地址范围映射到物理设备范围。

在一个实施方式中,pdsc存储器存储告诉mnc有关网络上存在的设备的信息。这使得设备能够将彼此实际上从指定的存储器空间“映射”到其操作系统和文件系统中。

与存储设备有关的信息是稍微不同的,并且告诉mnc什么设备被附连、其特性以及要为它们分配什么总线通道或信道。此外,对于pcie加速器,可能需要提供其他配置数据以及加速器设备的系统地址映射,使得可将它映射到主机操作系统的系统地址空间中以用于虚拟化。

总之,pdsc存储器中的配置信息给mnc提供使外部设备动作并且将诸如加速器、计算设备和网络接口控制器这样的设备映射到系统地址空间以使得能实现虚拟化所需的信息。这种信息可以补充或者替换内核内的传统设备配置。

可容易地在启动时通过握手发现其他存储器节点控制器,但是也能在配置信息中直接地指定它们。

系统到物理转换(stp)高速缓存结构

系统到物理转换(stp)高速缓存结构230持有将系统地址映射到各种设备上的物理页面的转换结构。此结构的实施例实施方案是稀疏哈希图,其中最频繁地使用的n个转换驻留在静态随机存取存储器(sram)中,同时溢出通过stp高速缓存移动到由mnc存储器控制器214分配的dram。在一些实施方式中,stp高速缓存中的sram可以足够大以存储大多数的地址转换。从系统地址到物理地址的转换可以经由哈希图被执行,并且在一些哈希图实施方案中,可在单个时钟周期边缘上被执行。

高速缓存

高速缓存130和140可以是用于便于往返mnc160的数据转移的近网络边缘数据高速缓存。这些被称为数据交付高速缓存(ddc)并且可以位于片上。在mnc160内,存储器被分成表示具体量的存储器(诸如4k区域)的页面,所述页面可被放置在任何类型的物理设备上。将较大的范围分成较小的页面使得能实现改进的存储器技术放置并且为元数据收集提供上限,因为仅需要以页面粒度保持数据。元数据使得存储器节点控制器160能够将物理页面放置在最佳存储器/存储技术上(基于某个成本函数),并且另外,使用“前馈”方法来将页面放置到片上高速缓存。在前馈方法中,mnc(以某个种粒度)将对核心和应用最佳(即,基于带宽要求、重用距离等)的数据页面馈送到在核心上正好需要它的高带宽/低延迟存储器。

网络配置

图3是与本公开一致的并入存储器节点控制器的简化网络300的框图。简化网络300包括节点302、304和306。每个节点包括存储器节点控制器(mnc)。存储器/存储元件308和310在节点302处的mnc-0的归属范围内,正如远程访问设备312(其例如可以经由nic来访问)一样。对这些元件的访问由mnc-0(302)提供。网络300被布置为集群网络,其中节点302处的mnc-0被配置为向计算设备314、316和318的集群提供存储器/存储资源。这些可以是处理器核心或其他计算设备。类似地,在网络的节点304和306处的mnc将各自为计算设备的集群服务并且控制对专用存储器/存储元件的访问。mnc经由信道324被耦合到计算设备314、316和318并且经由信道326被耦合到存储器/存储元件308和310。

网络300中mnc302的功能是为了向本地设备314、316和318或者向经由其他节点304和306耦合的设备提供存储页面。节点302处的mnc-0经由链路320被耦合到节点304处的mnc-1并且经由链路322被耦合到节点306处的mnc-2。对于本领域的技术人员而言将显而易见的是,可以使用不同的网络拓扑,并且可以使用任何数量的节点、计算机元件和存储器/存储设备。

在操作中,从计算设备发送到mnc的请求引用系统地址。从mnc发送到存储器/存储资源的请求引用物理(或网络)地址。mnc被配置为执行从系统地址到物理地址的转换。

网络中的存储器存取请求的路由

存储器节点控制器的一个功能是将系统地址转换为物理地址。当在具有存储器节点控制器的网络的数据处理系统中发送要访问特定地址处的存储器的请求时,该请求被路由到适当的mnc。可以使用各种路由技术。实施方式可以使用例如如图3中所描绘的集群存储器节点控制器方案。通常,在集群方案中,对于k个mnc中每一个来说可以有最多n个核心或计算设备。这n个计算机元件将被群集,使得最佳路由是到该本地存储器节点。源自这些核心的每个存储器请求直接地转到最近的mnc。如果请求是对被静态地分配给该mnc的页面的或对从另一mnc动态地共享的页面的,则可以将该请求立即返回给核心。然而,如果另一mnc拥有存储器(例如,由通过一致性协议所确定的),则对请求来说在被满足之前有一个附加网络跳。当系统的操作被启动时,每个mnc被分配了可被系统利用的总体系统可寻址空间的区域或分区(同时提供用于重新分区以便于热插拔)。分配给每个存储器节点的分区中的每一个然后被分成页面。此系统的优点是局部性通过存储器请求源自的mnc是隐式的。在没有附加数据的情况下,访问节点的计算设备是已知的(或者至少访问节点的集群是已知的)。使用该信息,mnc可在存储器网络内迁移数据页面,或者在计算模式授权给它的情况下从分区的所有者中检出它们。

此系统的另一优点是当系统地址空间用于识别存储在高速缓存中的数据时,可将数据从一种存储器技术迁移到另一存储器技术,而无需刷新映射到正被迁移的数据的行的一致性网络中的所有高速缓存。相比之下,刷新在高速缓存l2至llc通过物理地址来索引和加标签的情况下将是必要的,因为它们的有效性是在包含数据的物理介质上预测的。

与一些实施方式一致,通过受限目录结构便于页面的检出。受限目录结构可以被存储在mnc本地的存储器(诸如图2中的本地存储器232)中,所以受限目录结构是隐式地支持存储器的且受硬件管理的。在另一实施方式中,受限目录结构被存储在sram或其他快速存储器中,使得当页面被检出时,它们可被送入到目录结构中。

再次参考图3,当来自核心或计算设备的访问系统地址处的存储器的请求从计算元件到达存储器网络300的mnc时,使用系统地址来执行路由计算。由于接收到请求的mnc仅对全局地址空间的一部分进行寻址,所以可能需要将请求路由到网络中的另一mnc。如果当前mnc不控制包含地址的存储器分区,则请求被转发到适当的mnc。例如,来自计算机元件314的访问节点304处的mcn-1的主分区中的地址的请求被节点302处的mnc-0接收并且经由链路320转发到节点304处的mnc-1。

当地址在请求从核心到达mnc时,针对该地址执行路由计算。如果地址在当前存储节点的分区外,则可以通过查阅目录以确定页面是否被从其外部系统地址分区主节点检入来并行地执行用于路由的范围查找。

与为系统地址确定路由并行地,能取决于实施方案要求而执行两个操作中的一个。首先,能查阅哈希以查看页面(假定读取地址在系统地址空间的当前存储器节点的分区外)是否被从其主节点检出并且当前驻留在当前节点中(执行地址计算的节点)。另一选项是为了使用类似目录的方法学,所述方法学将请求数据分组发送到系统地址分区的主节点,然后该节点确定页面是否被更近的节点检出。在此方法中,始发mnc(即从计算设备接收到请求的第一节点)被编码在分组中。此方法在节点在本地被检出的情况下可能要求一个附加网络跳,但是有减少的总体数据移动的好处,同时保留与请求套接字进行数据交织的好处。

在mnc内,存在能在硬件中使用来存储寻呼信息的多个数据结构。例如,在一个实施方式中,使用稀疏哈希图结构,其可以作为树结构被实现。在对没有物理支持的页面进行写入操作时,在通过优化功能选取的一类存储器中(作为实施例很可能首先在dram中)创建支持,然而,它能在非易失性介质中容易地创建新脏页面。在读取操作时,发生类似的事情。可以在逐页面基础上执行操作,其中页面是某个粒度(例如4k)下的范围的子集。以这种方式,提供范围转换并且页面被分条/放置在最高效的存储器技术上。在下面参考描述此结构的描绘。每个页面可由mnc放置在存储器网络中的任何地方,而无需核心做出任何改变或者采取任何动作。

由于可以在计算机设备之间共享数据,所以使用一致性协议来防止对包含过期数据的存储页面进行访问。为此,可以使用受限目录结构来存储数据页面的状态。

图4示出与本公开的实施方式一致的用于修改的mesi协议的实施例状态图400。数据可以被识别为处于四种不同的状态中的一种下:“修改”(m)402、“独占”(e)404、“共享”(s)406和“无效”(i)408。mesi图400图示不同的状态之间的转变。除了诸如页面利用率统计、性能计数器等这样的其他数据之外,还可以通过用于每个页面的元数据中的状态位来指示状态。状态图400图示用于mnc页面共享的修改的mesi协议在mnc网络内被管理。

例如,不是来自当前mnc的分区的检出页面被称为“外来”页面并且其检出状态被记录在mnc的目录中,所述目录可以被存储在本地存储器中。对于当前mnc的分区中的页面,即当前mnc为主分区mnc的页面,在页面元数据内指示检出状态。

例如,当页面被分配时,可在“独占”状态(e)404下从主分区mnc最初检出它。在已发生写入之后,状态变成“修改”(m)。在页面已被同步回到主分区mnc之后,状态返回到“共享”(s)406。

如果页面在它处于“独占”(e)状态404或“共享”(s)状态406下时被取消分配,则状态被改变为“无效”(i)408。可选地,可通过“重新验证”指令将页面返回到“共享”(s)状态406。

在另一实施方式中,使用附加“仅对写入独占”状态。具有此附加状态的好处是它使得页面能够被一个mnc标记为“被拥有以便在某个稍后的时间写入”,从而防止其他mnc写入到它。一旦生成后续写入的功能结束,后续写入就将被提交,此后页面将返回到‘s’状态。

一旦在目录结构中需要空间或者如果在共享状态下从其他节点请求页面,则检出页面将最终被迁移回到主分区mnc。将页面移回到主分区mnc类似于将数据从标准高速缓存写回到存储器。然而,mnc可以使页面保持在持久存储器或易失性存储器中,其作为检出页面的状态被指示在元数据中。

每个mnc在启动时或在重新协商过程期间被分配了完整系统地址空间的分块或分区。实施例系统地址范围可以是:{基地址+0)→{基地址+n)。此分区在mnc后面被进一步细分成物理地址(或在nic的情况下为网络地址)。mnc控制对在它后面的能够存储数据的所有资源的访问,并且将系统地址空间映射到那些资源中的物理或网络地址。也可以将文件系统和联网功能性映射到此地址空间中。具有板上存储器的加速器也被映射到此地址空间中并且可以通过接口从其虚拟地址空间访问,而无需了解系统地址空间。

在处理器核心上开始,使用范围转换缓冲器(rtb)或转换后备缓冲器(tlb)来将请求中的虚拟存储器地址转换为系统地址空间中的地址。请求然后被发送到存储器节点控制器。

在第一实施方式中,在mnc之间划分存储器空间,使得在引导之后存在固定静态映射。此方法具有对路由计算并且始终转到正确的节点来说快速的优点。然而,此方法对于片上路由来说或者对于优化存储器放置来说可能不是最佳的。固定计算次优的一个原因是它增加片上存储器业务,所述片上存储器业务能以其他方式被用于核心到核心(或线程到线程)通信。另一原因是利用n个核心支持片上集群局部性所需的开销在每个存储器请求情况下是log2(n)。请求将被加标签以指示其来源,然后传送到mnc。例如,当简单性比开销更重要时,可以使用此方法。

在另一实施方式中,假定了每k个mnc将有n个核心,并且这n个核心将被群集,与全连接网格相反。在此方法中,路由路径从集群起通过一个或多个高速缓存(包括任何ddc)并且然后到与该集群相关联的片外互连控制器。例如,此互连可以利用pcie或另一物理层。mnc被各自分配了静态系统地址分区。可以在引导配置或系统重置之后做这个,以便于存储装置/存储器的热添加/去除/插拔。在mnc处,系统地址范围被进一步细分成页面,所述页面要么被零分配(用于初始分配)要么指向某个设备上的物理存储器。此路由路径的优点是请求的来源在业务源中是隐式的。例如,在没有进一步信息或元数据的情况下已知哪一个核心集群隐式地创建了业务。捕获并记录始发核心否则将要求至少足够的位以按每个存储器请求对节点内的集群的数量进行编码。使用局部性信息,mnc网络可迁移网络内的虚拟页面,或者在计算模式授权给它的情况下从系统地址分区的所有者中检出它们。

通过软件感知来便于此基础设施的高效使用。考虑到在n个mnc之间拆分系统地址空间,并且这些mnc基于例如物理局部性被连接到计算设备,任务可被调度使得它们在连接到控制已经分配的系统和物理存储器的mnc或者至少连接到附近的mnc的计算设备上被执行。这确保低延迟通信。

图5是与本公开一致的数据处理网络500的框图。数据处理网络500包括在虚拟存储器地址空间504中操作的核心或计算设备502。在所示的实施方式中,系统地址空间被划分成三个分区r1、r2和r3。系统500还包括与系统存储器分区508(r1)相关联的mnc506、与系统存储器分区512(r2)相关联的mnc510以及与系统存储器分区516(r3)相关联的mnc514。mnc506控制对存储器资源518的访问,所述存储器资源518存储在此实施例中具有物理地址p1、p2、p3和p4的页面520。mnc506将分区r1中的系统地址转换为存储器资源518中的物理地址。类似地,mnc510控制对存储器资源522的访问,所述存储器资源522存储在此实施例中具有物理地址p5、p6、p7和p8的页面524。mnc510将分区r2中的系统地址转换为存储器资源522中的物理地址。mnc514控制对存储器资源526的访问,所述存储器资源526存储在此实施例中具有物理地址p9、p10、p11和p12的页面528。mnc514将分区r3中的系统地址转换为存储器资源526中的物理地址。以这种方式,48k地址空间被拆分成四个16k分区并且每个16k分区被拆分成在物理资源之间分配的四个4k页面。

当核心502发出要访问虚拟地址空间504处的数据的请求时,虚拟地址被转换为范围表缓冲器(rtb)530中的系统地址。如果在本地高速缓存中未找到该地址,则系统地址被传递给耦合到核心502的mnc。在此实施例中,系统地址被传递给mnc-1(510)。mnc-1(510)确定系统地址是否在分区r2中。如果系统地址是在分区r2中,则522的对应存储器资源与该存储器资源中的物理地址一起被识别,并且该物理地址处的数据被访问。可以通过链路532确认存储器写入访问。通过链路532返回从存储器资源读取的数据。当地址转换使得虚拟存储器地址等于对应的系统存储器地址时,可以提供旁路逻辑534以选择性地绕过rtb530。如果系统地址不在分区r2中,则控制该分区的mnc被识别并且请求被转发到所识别的为请求服务的mnc。对请求的任何响应经由链路532被返回给核心502。

在某些实施方式中,使用存储在系统到物理转换(stp)高速缓存(例如,图2中的230)中的数据结构来在mnc内在系统地址与物理地址之间做出转换。数据结构可以是使用页面条目的掩码哈希查找的表。例如,可以使用系统地址与作为二的幂的页面大小之间的逻辑与运算来计算页面编号。rtp高速缓存中的实施例页面条目可以包含表1中所示的信息。

表1.

在一个实施方式中,使用三个指针来支持写时拷贝,一个指针指向作为当前干净物理副本(头)的条目,一个指针是父并且一个指针是子。这使得更新过程能够被优化。其他变化对于本领域的技术人员而言将是显而易见的。

可以通过使用伙伴存储器分配方案或可以通过稀疏树表示的其他方案来高效地处理存储器分配。系统地址范围的压缩(重新排序)可例如通过发信号通知os找到包含系统地址的处理线程并且然后更改系统地址范围来完成。此过程可以是费时的。然而,对于大系统地址空间(诸如64位),除非当前系统变得非常更大,否则这不太可能发生。

在一个实施方式中,系统被配置为使得核心使用64位地址空间,但是mnc对128位系统地址空间进行寻址。这使得能够例如在来自mnc的地址空间计算中使用前缀符号来对系统中的其他节点进行寻址。

页面信息被存储在存储器中并且可以被在本地缓存到mnc。在硬件的最简单实施方案中,条目被用于每个页面。例如,如果单个mnc被分配了100tb地址分区并且如果页面大小被选择为2mb,则即使设备完全满了,表也会适合小64mbsram结构。如果要存储其他元数据则要求附加空间。然而,在一个实施方式中,通过将空页面压缩到零页面范围中来减小表的大小。在另一实施方式中,转换数据可以是持久的或者具有第二副本以确保持久性。

图6是与本公开的实施方式一致的用于在路由存储器存取请求的数据处理网络中通过一个或多个计算设备来访问一个或多个数据资源的方法的流程图600。紧跟开始块602之后,在块604处将数据处理网络的元件映射到系统地址空间。在块606处,将系统地址空间的范围或区域分配给数据处理网络的存储器节点控制器。例如,可以将第一分区分配给第一存储器节点控制器mnc-1,并且将第二分区分配给第二存储器节点控制器mnc-2。在块608处,在mnc-1处接收要在系统地址空间中的系统地址处访问数据处理网络的元件的请求。当系统地址在mnc-1的分区中时,如通过来自判定块610的肯定分支所描绘的,在块612处使用mnc-1来为请求服务。当系统地址不在mnc-1的分区中时,如通过来自判定块610的否定分支所描绘的,流程继续到判定块614。如果系统地址被与第一存储器节点控制器动态地共享,如通过来自判定块614的肯定分支所描绘的,则在块612处再次使用mnc-1来为请求服务。如果系统地址未被与第一存储器节点控制器动态地共享,如通过来自判定块614的否定分支所描绘的,则在块616处将请求转发到mnc以得到系统地址,在块616处请求被服务。过程在块618处终止。mnc-1通过在块620处识别适当的数据资源并且在块622处将系统地址转换为数据资源中的物理地址来为请求服务。例如,可以通过访问表或目录来做这个。请求的服务在块624处完成并且过程在块618处终止。

一些实施方式涉及与本公开的实施方式一致的用于路由存储器存取请求的方法。该方法适用于如上面参考图3所描述的集群存储器节点控制器方案。通常,在集群方案中,对于k个mnc中的每一个来说可以可以有最多n个核心或计算设备。这n个计算机元件将被群集,使得最佳路由是到该本地存储器节点。要访问资源系统地址的存储器请求被mnc接收。源自这些核心的每个存储器请求直接地转到最近的mnc,所以请求来自mnc的本地集群中的核心。在块620处确定到保持所请求的页面的适当的数据资源的信道。如果请求是针对被静态地分配给该mnc的页面的或者针对从另一mnc动态地共享的页面的,则可以将该请求立即返回给核心。然而,如果另一mnc拥有存储器(例如,由通过一致性协议所确定的),则对于请求来说在被满足之前有一个附加网络跳。当系统的操作被启动时,每个mnc被分配了可被系统利用的总体系统可寻址空间的区域(同时提供用于重新分区以便于热插拔)。分配给每个存储器节点的分区中的每一个然后均被分成页面。此系统的优点是局部性通过存储器请求源自的mnc是隐式的。在没有附加数据的情况下,访问节点的计算设备是已知的(或者至少访问节点的集群是已知的)。使用该信息,mnc可在存储器网络内迁移数据页面,或者在计算模式授权给它的情况下从分区的所有者中检出它们。

在一些实施方式中,分配给每个mnc的地址范围可用作调度功能以基于要执行的功能的工作集来指导位置(处理的放置)执行,其中工作集被定义为通过作为用于一些操作的输入所需的数据的范围和作为来自该功能(及关联的操作)的输出所需的数据的范围所形成的集合的并集。

在一些实施方式中,虚拟存储器地址的范围和该范围的副本被映射到数据处理系统中的相同的第一系统地址范围,直到虚拟存储器地址范围中的地址或其副本被写入为止。公共系统地址范围包括许多区域。响应于对公共地址范围的区域中的地址的写入请求,生成第二系统地址范围。第二系统地址范围被映射到与第一系统地址范围相同的物理地址,不同之处是包含要写入到的地址的区域及其在第二系统地址范围中的对应区域被映射到不同的物理地址。用于将虚拟存储器地址转换为系统地址的第一层映射数据可以被存储在范围表缓冲器中并且在生成第二系统地址范围时被更新。用于将系统地址转换为数据资源中的物理地址的第二层映射数据可以被存储在系统到物理转换高速缓存中,所述系统到物理转换高速缓存在共享数据被修改时被更新。因此,为数据处理系统提供了两层写时拷贝机制。

图7图示与本公开的实施方式一致的数据处理系统中的存储器700的逻辑布置。存储器布置包括虚拟存储器地址空间702。尽管在图7中示出了单个虚拟存储器地址空间702,然而每个程序或设备看到它自己的包含由该程序或设备使用的指令和数据的虚拟存储器地址空间。编程线程可以共享相同的虚拟存储器地址空间。虚拟存储器寻址的使用通过禁止一个程序访问或者破坏由另一程序使用的信息来允许控制器访问存储器。存储器布置700还包括系统地址空间704。该系统地址空间允许访问数据处理系统中的可寻址单元,诸如存储器、存储装置、硬件加速器和网络接口控制器。该系统地址空间可以包含物理(存储器支持的)地址和虚拟存储器地址两者。例如,存储器布置700还包括物理地址空间706,所述物理地址空间706包含诸如存储设备或存储设备这样的数据资源中的物理地址。在图7中示出了数据资源708、710和712,但是数据处理系统可以具有任何数量的数据资源。

依照本公开的实施方式,一个或多个虚拟存储器地址空间被划分成地址范围,诸如图7中的地址范围714(范围a)。例如,每个范围可以通过两个参数(诸如起始地址和结束地址、起始地址和程度(长度)或从基准地址起的偏移)来定义。

依照本公开的实施方式,虚拟存储器地址空间中的每个范围被映射到系统地址空间中的对应范围。例如,虚拟存储器地址范围714被映射到系统地址范围716。每个系统地址范围被进一步划分成许多区域。在图7中所示的实施例中,系统地址范围716具有四个区域,所述四个区域被表示为d1、d2、d3和d4。在续篇中,假定了每个区域对应于存储器或存储装置的页面,但是可以在不脱离本公开的情况下使用其他大小的区域。例如,映射被称为第一层映射并且可以使用范围表缓冲器来记录和实现。

系统地址范围的每个区域被映射到数据资源中的页面。例如,区域d1被映射到数据资源708中的页面p1,区域d4被映射到数据资源710中的页面p6等。例如,这种映射被称为第二层映射并且可以被记录和实现在系统到物理转换高速缓存中。

当进程或线程请求虚拟存储器地址范围714的副本时,创建新虚拟存储器地址范围718(范围b)。原始虚拟存储器地址范围714被称为“父”虚拟存储器地址范围,然而新虚拟存储器地址范围718被称为“子”存储器地址范围。子范围可以在相同的虚拟存储空间702中或者在不同的虚拟存储空间中。此操作被称为虚拟副本,因为尚未在任何物理数据资源中移动数据。子虚拟存储器地址范围718被映射到与父虚拟存储器地址范围714相同的系统地址范围。然而,为子范围生成新映射(从虚拟存储器地址到系统地址)。在下面对此进行更详细的讨论。

只要在范围714或范围718内没有数据被修改,操作就可以继续。因此,实际数据的拷贝被推迟。然而,如果范围714或718内的数据被修改,例如通过写入命令,则由于不再能共享数据,所以必须做出经修改的数据的物理副本。

图8示出在范围内的数据已被修改并且数据的物理副本已被做出之后的存储器700。在所示的实施例中,假定了针对子虚拟存储器地址范围718内的地址发出了写入请求并且该地址被映射到系统地址范围的区域d2。在写入之后,父范围714和子范围718不能共享区域d2,所以执行两层拷贝。首先,在系统地址空间704中做出系统地址范围716的副本802,并且更新从虚拟存储器地址范围718到系统地址范围的关联映射。拷贝的系统地址范围802具有四个区域,所述四个区域被表示为d1'、d2'、d3'和d4',其对应于系统地址范围716中的区域d1、d2、d3和d4。在写入(到区域d2或d2')之后,与区域d2相关联的数据和与区域d2'相关联的数据必须被存储在不同的页面中。在此实施例中,d2保持被存储在数据资源708的页面p2中,然而拷贝范围802中的区域d2'中的数据将被存储在数据资源712中的页面p7中。新映射804被生成以指示系统地址范围802如何被映射到物理地址。可替代地,由于计算设备不需要第二层映射的知识,所以区域d2'中的数据能保持被存储在数据资源708的页面p2中,然而原始范围716中的区域d2中的数据被存储在数据资源712中的页面p7中。

以这种方式,仅需要物理存储装置的单个附加页面,而不是用于完整拷贝范围802的存储。

此方法的优点是数据的拷贝被推迟直到数据被实际地修改为止(并且可以同时避免将来的访问是“只读”)。另一优点是仅系统地址范围的修改的区域被拷贝,而不是完整范围被拷贝,从而使资源使用率最小化。该方法被称为“两层写时拷贝”机制,因为两个单独的映射被维护和更新(那些映射是通过范围表内的范围所定义的虚拟到系统地址映射和存储器节点控制器内的单独的系统地址到物理页面映射),并且在写入操作被请求之前物理数据不会被拷贝。

依照本公开的另外的方面,提供了用于维护和更新从虚拟存储器地址空间到系统地址空间的映射和从系统地址空间到物理地址空间的映射的机制。在一个实施方式中,该机制分别由第一存储器地址转换装置和第二存储器地址转换装置提供。第一地址转换装置可由使用一个或多个虚拟存储器地址空间的一个或多个计算设备访问,并且被配置为将虚拟存储器地址的第一范围内的虚拟存储器地址转换为系统地址的第一范围内的系统地址。第二存储器地址转换装置包括:数据资源分配电路,用于分配一个或多个数据资源的资源;以及系统到物理地址转换电路,诸如高速缓存,被配置为将系统地址的第一范围内的系统地址转换为一个或多个数据资源中的数据资源的物理地址空间中的物理地址。数据处理系统响应于对虚拟存储器地址的第一(父)范围(图7中的714)内的给定虚拟存储器地址的拷贝请求以生成虚拟存储器地址的第二(子)范围(图7中的718)。在拷贝请求之后,但是在虚拟存储器地址的父或子范围内的写入操作之前,第一地址转换装置被配置为将虚拟存储器地址的父范围和子范围两者转换为系统地址的相同范围716。

再次参考图8,在虚拟拷贝之后,父系统地址范围716包括父区域d1..d4并且子系统地址范围802包括对应的子区域d1'...d4'。在对第一父区域中的系统地址的写入操作之后,第二存储器地址转换装置被配置为在数据资源中分配空间以用于存储第一父区域中的数据或要写入的数据的副本,更新系统到物理地址转换高速缓存以包括子系统地址范围,并且更新系统到物理地址转换电路高速缓存以将第一父区域或所对应的第二子区域映射到所分配的数据资源中的空间。系统到物理地址转换高速缓存被更新以将子区域映射到与父区域相同的物理地址,不同之处是第一父区域和所对应的子区域被映射到不同的物理地址。

图9是与本公开的实施方式一致的用于在数据处理系统中执行拷贝操作的方法900的流程图。紧跟开始块902之后,在块904处由设备发出要在虚拟存储器地址处拷贝存储器的指令。在设备的范围表(父范围表)中查找地址。如果表指示不允许拷贝该地址处的数据,如通过来自判定块906的否定分支所指示的,则在块908送入故障条件。如果拷贝被允许,如通过来自判定块906的否定分支所指示的,则在块910处将包括要拷贝的虚拟存储器地址的地址范围的元数据作为新条目写入在子范围表中。子范围表可以是父范围表它本身或另一范围表,诸如另一设备的范围表。在拷贝之后,在块912处在父范围表和子范围表两者中的条目中设置cow状态指示器(如图10中所示,在下面讨论)以指示地址范围是cow操作的一部分并且数据当前处于共享状态下。在续篇中,cow状态指示器被称为单个cow状态位,但是可以使用其他指示器。地址范围可以具有任何大小,并且可以极其大,但是在某个粒度下。在块914处,修改子范围表中的元数据以指示虚拟存储器地址的新范围。例如,虚拟存储器地址范围可以通过基地址和程度或起始地址和结束地址来指示。在块916处,必要时修改子范围表中的元数据,以指示虚拟存储器地址的新范围对应于系统地址的与原始虚拟存储器地址范围相同的范围。因此,原始(父)虚拟存储器地址和拷贝的(子)虚拟存储器地址都对应于相同的系统范围和相同的物理存储器位置,所以过程被称为虚拟拷贝。虚拟拷贝现在完成,如通过终止块918所指示的。注意的是,可以改变操作的次序,并且可以将多个操作组合成单个操作。还注意的是,尚未更新物理存储器。

第一存储器转换装置可以包括至少一个范围表缓冲器以将转换数据存储在一个或多个条目中。存储在条目中的数据指示定义虚拟存储器地址空间中的相应的虚拟存储器地址边界之间的虚拟存储器地址的范围的地址范围边界值、虚拟存储器地址的范围内的虚拟存储器地址与系统地址空间中的对应系统地址之间的转换以及写时拷贝状态。

图10图示与本公开的实施方式一致的两层写时拷贝机制中的范围表条目。父范围表条目1000示出在不同时间的父范围表a中的单个范围表条目的内容。在所示的实施方式中,父范围表条目1000中的地址范围边界值包括虚拟存储器地址基址值1002(va_base)和虚拟地址程度1004(va_extent)。这些指示从va_base到va_base+va_extent的地址范围。字段1006包含偏移,所述偏移在被加到虚拟存储器地址时,指示与该虚拟存储器地址相对应的系统地址。因此,偏移值用于将虚拟存储器地址转换为系统地址。范围表条目1000还包括权限字段1008,所述权限字段1008可以包含存储器存取权限、cow字段1010或其他管理数据(诸如作为用于定位父范围和子范围或临界性位以进行错误保护的优化的、到系统地址空间中的父cow范围和子cow范围的前向和后向指针,数据还能指示缺乏当读取在没有访问存储器系统的情况下返回零时通过rtb的写入的范围)。

在进行任何拷贝之前,子范围表(表a-拷贝)中的对应条目1012是空的。该条目包含分别与父范围表a中的条目的字段1002、1004、1006、1008和1010对应的字段1014、1016、1018、1020和1022。

当拷贝指令被发出时,在拷贝步骤1处父条目1000被拷贝到子条目1012中。在拷贝步骤2处,在条目1000的字段1010中并在条目1012中的字段1022中设置cow字段以指示在两个虚拟存储器地址范围之间共享所对应的数据。这个在字段1010和1022中被表示为‘c’。在拷贝步骤3处,新虚拟地址基址(新va_base)被写入到条目1012中的字段1014并且新偏移被写入到字段1018。新虚拟地址范围和新偏移是相关的使得新虚拟地址范围映射到与以前相同的系统地址范围,所以在原始虚拟地址范围和新虚拟地址范围之间共享数据。

可设置共享状态条件直到被对父虚拟存储器地址范围或子虚拟存储器地址范围的写入中断为止。当那发生时,进行写入的范围发起硬件驱动的克隆操作(通过存储器风暴接口)。此克隆操作在基础系统地址和范围(全部都可被硬件利用)中进行并且返回新系统地址和范围。如果数据由设备使用子范围来写入,则字段1018中的偏移值被更新以反映新系统范围,如图10中的写入步骤1中描绘的。如果使用父范围表来将数据写入到设备,则会更新字段1006而不是字段1018。

在写入步骤2中,在写入之后,父范围的cow状态指示器和子范围的cow状态指示器都被改变以指示非cow,即所对应的数据未被共享(在一个实施方式中范围条目可经由范围的管理数据中的指针来链接以快速地识别所指向的cow范围的父和子(若存在的话))。任何进一步的cow行为在存储器节点控制器(mnc)它本身内被透明地处理。

在第一层写时拷贝中,生成新系统范围。在第二层写时拷贝中,生成从系统地址到物理地址的新映射,但是实际上仅拷贝所写入的物理页面。剩余页面仍映射到父范围的物理页面(直到它们也被写入为止)。如上面所讨论的,每个系统范围被细分成物理页面,其元数据(诸如实际位置、空的/被分配等)被表示在高效数据结构内。例如,数据结构可以是b树或其他自平衡搜索树。在接收到拷贝操作时,设置一组新页面,使得它们最初指向父范围的页面。在接收到(对系统地址的)写入时,计算它落入的页面(例如,使用哈希),并且检查该页面以查看它是否使cow状态位被置位(在映射物理页面的硬件数据结构(再次例如,b树)内)。如果cow状态位被置位,则写入被缓冲,然后分配新物理页面(在一种可用的存储器技术(诸如dram/nv/ssd/等)上)并且拷贝该页面。一旦被拷贝所缓冲的写入就被提交到所拷贝的页面。可选地,可以拷贝用于页面的元数据。

对存储器的读取访问常常比写入访问更频繁。因此,在核心它本身上继续初始步骤(例如通过拷贝范围表条目并使位置位)显著地加快拷贝或克隆操作的关键路径。将存储器的实际物理拷贝移动到存储器结构使得os和核心能够继续计算,从而将慢速写入操作移离关键路径。这种机制的另一显著优点是它使得加速器能够使用相同的cow机制。这在现有系统情况下是不可能的。加速器可使克隆存储器范围被传递给它,并且透明地,存储器结构可利用cow的第二级来写入到与父范围不同的页面,从而减少拷贝开销和数据移动。

父范围(诸如图7中的范围a(714))可以具有多个子范围,诸如图7中的范围b(718)。父是被映射到物理存储器的唯一范围。在一个实施方式中,当发生对父范围的写入时,写入被缓冲并且子范围中的一个被映射到物理存储器。此子范围变成用于其他子范围的父范围。一个实施方案使用三个指针来使此过程变得高效:头指针、父指针和子指针。

在写入到父范围时,为第一子创建物理页面(从父拷贝)。然后将头指针设置为0,将父指针设置为0,并且对于其他子范围重置头/父指针。如果子页面被引用(例如,当有多个cow分段都指向同一父页面时),则具有头指针和父指针两者提供单个间接手段。也就是说,头指针使得实际的物理页面能够被直接地识别。相比之下,在仅父指针和子指针情况下,如在链表中一样,延迟随孩子数而线性地增长。父指针在发生对子页面的写入时用于指示要拷贝什么物理存储器。在写入到子时,子被更新,页面被从父拷贝并且指针被更新。

图11是用于在数据处理系统中处理写入操作的方法1100的流程图。紧跟在开始块1102处对虚拟存储器地址的写入指令之后,在范围表中查找该地址以确定所对应的条目中的cow状态位是否被置位。如果cow状态位未被置位,如通过来自判定块1104的否定分支所描绘的,则不共享存储器,所以在块1106处写入指令被发出到存储器系统并且过程在块1108处终止。然而,如果cow状态位在范围表条目中被置位,如通过来自判定块1104的肯定分支所描绘的,则在块1110处向与包含要写入的系统地址的范围相关联的存储器节点控制器(mnc)发出拷贝请求。在块1112处,mnc创建新系统范围并更新其系统到物理转换表以将新系统范围映射到物理地址。mnc还分配新物理存储装置并且将包含要写入到的地址的区域或页面拷贝到所分配的存储装置。在块1114处,在发出了写入请求的设备的范围表中更新偏移和虚拟存储器地址基址并且清除cow状态位。在块1116处,使用范围表中的新偏移来将要写入的虚拟存储器地址转换为系统地址。最后,在块1106处向存储器系统发出对应的写入指令。

在mnc内部,计算写入针对的页面,该页面然后被分配了新物理存储器并拷贝。此操作可以在片外的存储器控制器级处被执行,并且可利用技术内拷贝技术,诸如例如缓冲器-缓冲器拷贝和ssd内拷贝。一旦被拷贝,写入就被提交给新页面。所有其他页面仍指向父页面,因为它们是“干净的”并且确切地与父页面相同。以这种方式,考虑到主处理核心没有直接参与写时拷贝的第二层与标准写时拷贝系统相比提供相同或更好的性能。这时两层“快速”写时拷贝过程完成并且过程在块1108处终止。

指令集架构(isa)命令

存储器系统的实施方式可以包括从命令的以下列表中选择的isa命令。可替代地,能通过来自核心的总线信号来致动动作。

fetch地址,范围(字节)

store地址,值

prefetch地址,范围,类型

allocate-指令分配大小字节返回指针作为到所分配的存储器的系统地址。注意:如果需要用户空间分配功能仍可捕获到特权内核模式以通过os层进行ulimit权限检查。

·命令:alloc<rl><字节大小><标志>

·在<rl>中给出的地址可被用作建议的放置(是某些应用所需的),如果在指令调用中给出地址则它被假定为是需要的。如果不能满足放置则分配失败,<rl>设置为零。正常分配路径存储器风暴将<rl>设置为在分配成功情况下按请求字节数而分配的系统地址,否则经由<rl>映射到由核心处理的进程的虚拟地址空间中返回空,要么使用范围表缓冲器内的机制在硬件中进行或者通过软件slab分配器来进行,所述软件slab分配器设置偏移以将核心虚拟地址映射到通过此命令所返回的系统地址。

·标志可用于指定修改或特性,诸如

ο在接触时急切对零页面分配

ο持久性(零至四标度,四意指需要持久性,零意指不需要),这是针对传统操作系统适当地虚拟化文件系统行为所必需的。

ο延迟(零至四标度,零意指不重要,四意指非常重要)

ο带宽(零至四标度,零意指不重要,四意指非常重要)

ο零存储器(单个位)将所有分配的存储器清零。

οr/w(两个位,无/r/w/r+w)—可由任何资源设置,但是仍然尤其对优化页面的页面放置来说是有用的

ο启用加速器使用(使得存储器风暴结构能够优化存储器以便快速传递给加速器,并且如果加速器设法抓取未被标记为可访问的存储器范围则启用os处理程序核心的异常)。

ο标志为共享(系统地址范围然后将被引用计数以供与取消分配命令一起使用)。

ο要被用作文件(对于当前存储的范围强制范围无效)。

memcpy-指令将n个字节从存储器区域src<rl>拷贝到存储器区域dst<r2>,带有用于cow拷贝对急切拷贝的标志。

·命令:memcpy<src-rl><dst-r2><标志>

·必须已经由上面的分配指令分配了通过r2给出的地址

·r2处的地址的长度必须相同或大于rl

·源地址和目的地地址被假定为不重叠,如果它们重叠则必须切换标志以指示需要类似memmove的行为。

·默认行为是延迟拷贝到r2中,仅在哈希图结构内添加指针以引用rl的父范围内的数据。如果接收到对地址范围<r1>或<r2>的写入,则cow行为规定该物理页面的拷贝,除非已急切地分配了通过r2所指定的存储器地址中的页面(参见分配指令)。

·如果给出急切标志,则数据被立即从<rl>中的源地址范围拷贝到目的地地址范围<r2>。

·在完成时经由mnc与核心之间的通信总线将ack信号返回给核心。

clone-拷贝上下文

·指令是核心范围表缓冲器与存储器节点控制器之间的合作努力。

deallocate-释放通过提供的系统地址指向的存储器空间,如果在分配时或者在madvise命令情况下系统地址范围已被标记为共享,则此调用被视为“取消链接”调用,其中存储器在指向它的所有页面引用已被本身取消分配之前将不会被取消分配。此命令对核心组件和存储器风暴网络两者起作用,因为必须针对存储器网络中的范围和页面采取动作(但是它们可异步地发生)。

·命令:dealloc<sys_address-rl><范围-r2>

reallocate-按新范围重新调整从系统地址起的分配大小

·命令:realloc<sys_address><新大小(以字节为单位)>

·如果不能分配连续块,则初始系统地址将用新系统地址替换(就像在当前的重新分配软件方案中一样)。然而,如果完全可能的话,地址将保持不变,只是通过第二参数指定较长范围。

·如果realloc失败,则<sys_address>被设置为指示错误条件的零(null),通过原始系统地址所指定的存储器未修改且仍然有效。

madvise-设置已经分配的系统地址范围或子范围的存储器特性。

·命令:madvise<sys-address-rl><字节范围-r2><标志-r3>

·标志<r3>可用于指定修改或特性,诸如

ο在接触时急切对零页面分配

ο持久性(零至四标度,四意指需要持久性,零意指不需要),这是针对传统操作系统适当地虚拟化文件系统行为所必需的。

ο延迟(零至四标度,零意指不重要,四意指非常重要)

ο带宽(零至四标度,零意指不重要,四意指非常重要)

ο零存储器(单个位)将所有分配的存储器清零。

οr/w(两个位,无/r/w/r+w)-可由任何资源设置,但是仍然尤其对优化页面的页面放置来说是有用的

ο启用加速器使用(使得存储器风暴结构能够优化存储器以便快速传递给加速器,并且如果加速器设法抓取未被标记为可访问的存储器范围则启用os处理程序核心的异常)。

ο标志为共享(系统地址范围然后将被引用计数以供与取消分配命令一起使用)。

ο标记为被文件使用(所以可以通知硬件系统地址范围需要被范围刷新)。

·在错误时sys_address寄存器被设置为零(null)

·类似于linux‘madvise’命令

mclear-将范围设置为零页(无需写入,简单地指向哈希图中的零页面)。此命令被设计来简化具有模拟分页的虚拟机的构造。

·命令:mclear<sys-address-rl>

·rl必须是范围的开始

mflush-将范围刷新到持久性存储装置,不意味着在易失性存储装置中不可能有存储器缓存的副本,然而这对需要间歇持久性一致性的事情是相当有用的。注意:还可能有针对标记为“持久”的所有范围设置节点/系统刷新间隔的变体维护命令。上面的‘madvise’指令的变体能实现这个的可变版本,其将使得mnc能够独立于另外的外部命令(在硬件中模拟许多os现今做的工作)对范围执行‘mflush’指令。设计能实现将不必手动地使用此刷新命令的系统范围或每范围的刷新间隔。

·命令:mflush<sys_address-rl>

初始化共享存储器-设置要标记为共享的系统地址范围,使得软件实现者可实现像共享存储器(shm_open/等)一样的抽象。

·命令:initshared<sys_address-rl><范围-r2><标志-r2>

打开共享存储器-当某个已经分配范围的共享分段可具有分段的集合或子集时打开系统地址范围。可为共享页面维护引用计数,使得当一个线程取消分配存储器时共享页面未被自动地取消分配。

·命令:openshared<sys_address+偏移-rl><范围-r2><标志-r3>

·对于mnc中的页面递增共享存储器系统地址(句柄)

·将sys_address返回给核心,core将sys_address映射成按通过标志所指定的权限而调用进程的虚拟地址空间。以这种方式本地开放共享分段可针对某个较大的存储器分段(例如,共享库映射)的子范围具有不同的权限。

取消链接共享存储器—释放共享存储器,必须由共享存储器的映射器(initshared的调用者)调用,否则预期取消分配,这去除虚拟地址空间范围转换并且它本身递减共享系统地址范围内的共享计数器。

·命令:unlinkshared<sys_address-rl>

·对于mnc内的页面递减共享存储器句柄系统地址(句柄)

sem_barrier_setup-在按当前起始值给出的系统地址处设置屏障

·命令:sem_barrier_setup<sys_address-rl><值-r2>

sem_barrier_wait*在系统地址处递减屏障(请求是原子的,所以行为如预期)

·命令:sem_barrier_wait<sys_address-rl>

sem_barrier_release-如果我们需要将屏障清零则使屏障无效

·命令:sem_barrier_release<sys_address-rl>

mwait-在单个地址或一系列地址上设置信号。

·命令:mwait<sys_address开始-rl><范围r2>

分配进程对面向用户的程序是透明的并且维护相同的面向用户的api。然而,可能需要系统软件层的修改。

在第一实施方式中,分配进程从通过操作系统中的标准分配器或标准库(诸如libc)所处理的用户‘malloc’指令开始,所述标准库将从通过标准分配器它本身分配为slab的范围中经由用户空间分配器向进程/线程给出范围。可通过核心级分配命令来将存储器从这些slab映射到进程的虚拟地址空间中。可替代地,可以经由软件干预执行映射,所述软件干预根据存储器的目前slab填充针对该进程的范围表。在此方法中,维护存储器的全局slap。

在第二实施方式中,不是维护全局slab,而是当创建虚拟存储器空间时每进程分配slab。存储器被基于进程的需要按需从此本地slab(在每个进程本地)分配(例如,以分布式方式在每进程基础上从此slab分配)。在此过程中,标准分配器被修改以分发本地slab。与第一方法可以被配置为与posix/sus标准兼容相比,此方法是更分布式的。

在第三实施方式中,每个用户空间分配调用直接地使用存储器系统的分配命令。这些命令可以是如上所述的isa命令。在此方法中,对用户限制(ulimits)的检查是可选的并且可以视需要而定被实现或者绕过。

对于所有分配进程,在初始分配开始时,可能已经或者可能尚未分配系统存储器。然而,在存储器节点控制器(mnc)内部的数据结构内的条目被创建或者修改以指示系统地址范围在它们被请求时是有效的。当最初从存储器读取(即首次读取)时,值将似乎为零。在首次写入时,物理存储器由存储器节点控制器分配。因此,物理存储器的分配被以“惰性”方式执行。对于特定地址空间标识符(asid),所有存储器被“零”分配。当在mnc内初始分配时,mnc知道哪一个延迟分配的页面是新鲜的(非cow)并且可在设备它本身处将它清零而不是带到核心中以设置为零。范围一致性修改确保在一致性网络内不存在用于所分配的实际地址的非零高速缓存行。在另一实施方式中,整个范围被标记为零范围,从而使得对该范围的读取能够简单地作为零被返回,而根本无需去外部。一旦发生写入,就可通过动态数据高速缓存(ddc)和mnc在页面级下执行它。一旦零页面被检入ddc,它就可被送入到标签索引数组中并标记为零(未分配存储器)。在该页面上命中的读取请求将作为零读取被立即返回。总线优化可以用于指示零数据,而无需通过高速缓存一致性网络来发送完整64b微片。一旦发生写入,实际的物理存储器就被分配。相反地,如果页面不在ddc中,则mnc用零返回以实物响应直到页面(或另一子范围)被写入为止。

存储器系统通常分配系统存储器的slab,从其中运行时/os可进一步分配范围。分配指令发起与存储器系统交互的进程并且向存储器网络发送请求。可以将请求发送到默认的、最近的或选择的mnc。请求由存储器节点控制器处理,所述存储器节点控制器作为响应将系统地址并行地发送回到核心并且建立存储器节点控制器的系统到物理地址转换电路。物理地址是由mnc管理的存储器中的地址并且可能直到接收到第一写入命令时才被选择。一旦地址被返回给核心,范围表缓冲器条目就被更新,使得面向用户的指针经由基址映射到请求进程的空间中。如上所述,可以组合基地址和当前指针以映射回到系统地址空间中。当范围表缓冲器条目与存储器支持的范围表同步时,该条目被以持久形式写入。能通过软件、硬件或者经由用于发起共享存储器的使用的另外的调用来进一步细分范围。

mnc内的系统地址选择是经由用硬件/固件/微码加以实现的标准算法来做的。实施例实施方案将使用快速伙伴分配算法,其中地址范围可由单个mnc的范围的子集构成或者如果需要,可协作地利用多个mnc的范围。

图12是与本公开的实施方式一致的用于分配存储器的方法的流程图1200。如上所述,‘allocate’指令或命令分配指定数量的字节,返回指针作为到所分配的存储器的系统地址。参考图12,紧跟开始块1202之后,在块1204处将系统地址空间的分区分配给存储器节点控制器。每个存储器节点控制器管理数据资源中的系统地址和物理地址之间的映射。当接收到要分配n个字节的用户请求时,如通过来自判定块1206的肯定分支所描绘的,可以在判定块1208处检查请求。在这里,用户是在计算设备的核心上执行的进程或线程。例如,请求可以是传递给存储器系统硬件的isa指令。可选地,在判定块1208处,指令被操作系统(os)捕获,并且执行检查以确定所请求的存储器大小是否在分配给进程或线程的资源限制内。例如,指令可以被捕获到特权内核模式以通过操作系统层进行用户限制(ulimit)权限检查。如果请求不在指定的资源限制内,如通过来自判定块1208的否定分支所描绘的,在块1210处声明故障并且方法终止。如果请求在资源限制内,如通过来自判定块1208的肯定分支所描绘的,请求传递给存储器节点控制器。当分配指令包括建议的放置时,如果不能满足放置则请求也将失败。在块1212处,系统地址范围的指标被返回给请求核心。可以从起始地址、偏移、程度或大小和结束地址中选择指标。例如,可以返回起始地址和程度。在块1214处,计算映射参数以虚拟存储器范围映射到新系统范围。例如,可以计算面向用户的指针、范围和偏移。此计算可以通过核心用硬件、使用范围表缓冲器内的机制或者通过软件块分配器来完成,所述软件块分配器设置偏移以将核心的虚拟地址映射到通过请求所返回的系统地址。面向用户的指针被返回给用户(请求了分配的进程或线程)。在块1216处,请求者rtb条目被更新以用于虚拟到系统地址映射。此时,虚拟到系统地址映射已被设置,但是系统到物理地址映射可能尚未被设置。然而,当用户第首次写入到所分配的存储器时,如通过来自判定块1218的肯定分支所描绘的,在块1220处存储器模式控制器(mnc)更新系统到物理地址映射。当数据被写入到虚拟地址时,该虚拟地址被范围表缓冲器转换为系统地址,指令被发送到mnc,mnc将系统地址转换为物理地址并且指令被发送到对应的数据资源。方法在块1222处终止。

图13是与本公开的实施方式一致的用于分配存储器的另一方法的流程图1300。紧跟开始块1302之后,流程取决于是否将响应于新进程或线程的创建或者响应于对动态存储器分配的请求而分配存储器。如果分配响应于进程或线程创建,如通过来自判定块1304的“新进程”分支所描绘的,则在块1306处做出用于分配存储器的n个字节的请求。响应首先被标准分配器(诸如操作系统)接收。如果存储器的n个字节在有效系统地址的slab中可用,如通过来自判定块1308的肯定分支所描绘的,则在块1310处分配存储器,所分配的指针在块1312处例如经由堆栈被返回给请求者,并且方法在块1314处终止。如果存储器的n个字节不可用,如通过来自判定块1308的否定分支所描绘的,则在块1316处向存储器系统的存储器节点控制器发送重新分配请求。例如,当不能分配连续块时,初始系统地址将用新系统地址替换。然而,当可能时,地址将保持不变并且范围的长度或程度增加。

在块1318处存储器节点控制器创建有效系统地址的新或延长范围并且将该范围的指标返回给请求核心。在另一实施方式中,可以将指标返回给操作系统或其他存储器分配器。在块1320处,范围表被更新以将虚拟地址范围映射到系统地址范围。例如,可以用面向用户的指针和所计算出的范围和偏移来更新范围表。这时,系统地址的新的有效范围已被创建。流程然后继续到块1310,其中来自范围的n个字节由标准分配器(诸如os)分配。方法在块1314处终止。

类似的方法响应于对动态存储器分配的请求而紧随,如通过来自判定块1304的“动态分配”分支所描绘的。紧跟来自用户(进程或线程)的请求之后,在块1322处逐步升高(如果需要)用户的特权级别以允许存储器分配。可选地,在判定块1324处,进行检查以确定请求的存储器分配的大小是否在分配给用户的资源限制内。如果否,如通过来自判定块1324的否定分支所描绘的,则在块1326处声明故障并且不分配存储器。如果所请求的数据的大小在所分配的资源限制内,如通过来自判定块1324的肯定分支所描绘的,则流程继续到判定块1328。如果要从中分配存储器的范围不低于存储器映射(mmap)截止值,如通过来自判定块1328的否定分支所描绘的,则在块1330处分配新范围并且直接地访问存储器系统。新范围由mnc在块1332处通过更新mnc中的数据结构来安装。到物理存储器的映射可以被同时更新或者推迟直到对范围的首次写入为止。所请求的存储器是从新或修改的系统范围中分配的。方法在块1334处终止。如果范围低于mmap截止值,如通过来自判定块1328的肯定分支所描绘的,则流程继续到判定块1308并且分配如上所述继续进行。

mnc可从另一存储器节点控制器的系统地址空间中分配存储器以在其系统地址转换表内使用,从而将一个系统地址重定向到另一系统地址。例如,对于碎片整理操作,第一mnc可以能在第二mnc的系统地址空间分区中分配存储器,其中第一mnc将显示如在第一mnc中从第二mnc检出的这些页面。第一mnc将像页面原先那样保持页面的物理存储器支持。一旦在适当的表中送入从第二mnc分配的地址范围,就可以改变范围表条目内的偏移以指向新系统地址范围。此时被先前使用的系统地址范围现在空闲。来自第二mnc的新系统地址范围以及组成该地址范围的所述多个页面现在空闲以根据一致性协议、元数据或调度算法独立地迁移。

系统可以配备有系统高速缓存结构,被称为数据交付高速缓存(ddc)。

在一个实施方案中,数据交付高速缓存(ddc)是使得存储器节点控制器(mnc)能够将页面(或其他子范围)放置得更靠近将需要它们的地方的封装上高速缓存。可关于数据的哪些块去那里利用更多的数据来跨更宽范围做出判定,从而在存储器结构上实现更高效的全局数据放置。内容交付网络还用作用于系统到物理地址空间转换机制的过滤器,使得与虚拟到物理地址转换相比,需要系统到物理转换的地址的小部分是可忽视的。ddc是前馈高速缓存,因为数据被推送到该高速缓存中。相比之下,常规的高速缓存是需求驱动的并且数据被按需拉出在高速缓存中。

数据交付高速缓存(ddc)是可经由系统地址空间访问的存储器的块。在ddc前面的是使得能够索引到ddc的本地存储器组中的控制器机制。此控制器还包含将当前系统寻址的内容映射到ddc的独立物理存储器的本地映射。

数据交付高速缓存是通过将数据(例如,一次一个页面)从一个或多个mnc推送到一个或多个数据交付高速缓存来填充的。这与依靠本地拉出机制的常规的缓存机制完全不同。推送机制与mnc同步以确保一致时间状态转移。

ddc可具有处于三种状态下的页面:

·独占(e)—意味着此页面被从mnc中检出并且其他ddc不包含此页面。这使得页面能够被高效地更新,而在系统中的其他ddc之间无需一致性,也不必用最新值连续地刷新mnc。

·修改(m)—意味着此ddc有唯一副本并且页面的至少一些已被修改。

·共享(s)—意味着此页面在多个ddc之间被共享(并且因此是只读的)以向系统上的所有核心提供最大带宽。

此方法的潜在关注是多个mnc可能正在同时将此页面推送到处于共享状态下的多个ddc。例如,页面可能处于共享状态下并从主mnc检出到多个外来mnc。给定为数据请求所选取的路由选项(所有请求直接地转到每集群一个mnc),重复请求将在它们曾到达核心之前被正确地拦截和处理。这使得多个核心能够同时地从任何数量的ddc或mnc访问确切相同的真实地址。假定页面相对于区处于“已知”或“独占”状态下,此方案还能用于实现一致性区,其中数据的范围或页面被非一致地且安全地访问。

当被驱逐时,页面能存在于两种状态中的一种下。如果它处于共享状态‘s’下,则mnc简单地发信号通知以使控制器的“有效”表内的页面标签索引无效。如果ddc页面处于修改‘m’状态下,则mnc开始使对该页面的请求排队,向ddc发送要写回页面的请求并且ddc停止对对该页面的请求做出响应。mnc然后将该页面写入到其物理空间(存储器或存储装置)内的某个存储器区域。mnc返回被响应于的最后请求作为返回元数据的一部分,此后mnc对所有未完成的请求做出响应。

在操作中,对第一虚拟地址的访问由数据处理网络的计算设备请求。到系统地址空间中的第一虚拟地址的第一虚拟地址以及要访问该第一系统地址的请求被传送到数据处理网络的存储器节点控制器并且传送到数据处理系统的数据交付高速缓存。当第一系统地址处的数据的副本被存储在数据交付高速缓存中时,数据交付高速缓存将被访问。否则,当第一系统地址处的数据的副本未被存储在数据交付高速缓存中时,存储器节点控制器将第一系统地址转换为数据处理系统的数据资源中的第一物理地址并且访问数据处理系统在第一物理地址处的数据资源。

存储器节点控制器可以监视对物理存储器的块的访问,并且基于成本函数来确定物理存储器的块何时被频繁地使用。存储器节点控制器将频繁地使用的数据从物理存储器的块推送到数据交付高速缓存。数据交付高速缓存中的数据可以通过系统地址标签来索引,使得不需要从系统地址到物理地址的转换。可替代地,ddc可以从系统地址转换为高速缓存中的物理地址。

存储器节点控制器在第一队列中使在正在将数据从物理存储器的块推送到数据交付高速缓存的同时接收的访问请求排队,并且一旦来自物理存储器的块的所有数据已被推送到数据交付高速缓存就将经排队的访问请求转发到数据交付高速缓存。数据交付高速缓存队列在第二队列中使在来自物理存储器的块的所有数据已被推送到数据交付高速缓存之后接收的访问请求排队,合并第一队列和第二队列中的请求。数据交付高速缓存然后为经合并的第一队列和第二队列中的请求服务。

图14是图示依照本公开的实施方式的数据交付高速缓存(ddc)的使用的信号流程图1400。在所示的实施例中,系统存储器请求1402被从处理核心(具有时间线1404)发送到mnc(具有时间线1406)和ddc(具有时间线1408)。在一个实施方式中,来自处理核心的对系统地址处的数据的请求被并行地发送到mnc并发送到ddc以便使履行的延迟最小化。

如果在mnc中存在所请求的行,则请求由mnc在数据信号1412中服务。可替代地,如果mnc已注册了包含如存在于ddc中的行的页面,则该行就会被从ddc服务并从mnc忽视。

在1414处请求由mnc监视。关于将哪一个数据将被从mnc控制的存储器推送到ddc的决定可以基于某个成本函数。各种成本函数对于本领域的普通技术人员而言将是显而易见的,所述各种成本函数诸如页面与流、时钟、mru、延迟或服务质量(qos)的关系的频繁重用。如果基于成本函数,预期性能会在页面(或数据的其他大小块)在ddc中可用的情况下被改进,则在1416处选择该页面。

为确保一致数据,在转移时段期间不处理数据访问请求。在一个实施方案中,mnc在1418处更新其从系统地址到物理存储器地址的映射以指示与系统地址相对应的物理页被检出到ddc。在1420处,mnc停止为对检出到ddc的页面的请求服务。

从1422开始,所选择的页面被推送到ddc。可以在从mnc向ddc转移数据期间并且在从ddc往回向mnc转移期间使用缓冲机制。相比之下,常规的高速缓存从存储器中拉出数据。ddc的存储器包含缓冲器,所述缓冲器能够缓冲所发送的数据的至少一部分,使得如果必须驱逐页面,则ddc可驱逐该页面并且按命令安装新页面。在1424处,当ddc被传送时,ddc开始随着数据被转移而将数据存储在ddc的物理存储器中。

在数据正在被转移的同时,可以并行地向mcn和ddc发送对系统地址处的行的请求1426。mnc查阅其映射并查看对应页面被检出到dcc,所以mnc不为请求服务。ddc还确定它没有所请求的数据并忽视请求。

请求1426可能被mnc忽视,在此情况下应该在转移完成之后重新发送请求,或者可以使请求排队。

在排队方法的实施方式中,当数据转移开始时mnc开始使请求排队。例如,请求1426在1428处被排队。

一旦数据转移在1430处完成,页面就被安装在ddc中。与数据相关联的系统地址的范围也被发送到ddc并且在1432处更新ddc存储器中的系统地址与物理地址之间的映射。

ddc然后向mnc发送确认(‘ack’)1434。直到此时为止,mnc在1428处继续使数据请求排队。一旦接收到‘ack’1434,页面就被认为被“检出”到ddc。

与来自ddc的‘ack’1434并行地,ddc控制器开始在1436处使请求排队。在接收到‘ack’时,mnc在信号1438中将所有未完成的请求(与确认一起)从mnc决定要将页面推送到ddc的点转发到ddc。未完成的请求的数量可能受填充缓冲器限制,所以仅需要将有限量的数据转发到ddc。mnc请求排队并且ddc请求被合并以及ddc在1440处开始为请求服务。在一个实施例实施方式中ddc首先使用合并排序来对来自mnc的未完成的请求和在ddc内排队的那些请求进行排序(未完成的地址的离散最大数量,即20)。可以针对固定数量的地址在硬件中实现合并排序。一旦这种排序完成,ddc就将缓冲器的头部馈送到ddc请求缓冲器中。当每个缓冲器的头部是相同的时,一个缓冲器被丢弃使得重复存储器请求被撤销。

当对系统地址处的行的另一请求1442被从处理核心发送到mnc和ddc时,mnc确定所对应的页面已被检出到ddc并忽视该请求。ddc将系统地址转换为它自己的存储器中的物理地址并且在信号1444中返回所请求的数据。ddc继续为对此数据的请求服务,直到行被从ddc存储器中驱逐为止,这时从ddc向mnc发送消息以向它通知被驱逐,并且必要时将所驱逐的行转移回到mnc控制的存储器。在此转移期间,可以使用上述的请求排队过程,其中mnc和ddc的角色相反。

如本文所呈现的本公开的各种实施方式和实施例被理解为图示本公开而不限制本公开,并且关于本公开的范围是非限制性的。

在所附独立和从属权利要求中陈述本公开的另外特定的且优选的方面。从属权利要求的特征可以酌情并且按照除权利要求中显式地阐述的那些以外的组合与独立权利要求的特征组合。

可以在集成电路中实现一个或多个存储器节点控制器。例如,可以将电路定义为硬件描述语言(hdl)的指令集,其可以被存储在非暂时性计算机可读介质中。可以经由计算机可读介质或者经由诸如有线或无线网络这样的其他手段来分发指令。指令可以用于控制集成电路的制造或设计,并且可以与其他指令组合。

存储器系统的实施方式可以维护虚拟存储器系统的使用。例如,当期望向后兼容性时,可以这样做。然而,这不是必要的,因为在虚拟地址空间与系统地址空间之间存在直接映射,范围表被引入来使得能实现从虚拟地址到系统地址之间的快速转换。范围表使得能实现posix指令的实施方案,诸如“写时拷贝”和“克隆”。然而,在一些实施方式中范围表不是必需的并且系统地址空间被直接地访问。

从系统地址空间到被设备理解的物理页的转换是通过存储器节点控制器来实现的。系统地址空间的引入使得存储器节点控制器能够无缝地处理存储设备,而无需一直将诸如转换后备缓冲器(tlb)这样的传统结构更新到核心。考虑到系统到物理映射由存储器节点控制器执行,mnc可在不中断关键路径上的应用执行的情况下更新它自己的条目。从软件角度更具体地虚拟化来看,可以将父(诸如虚拟机管理程序)的系统地址空间的子分块分配给子(诸如虚拟机来宾)。这些条目可通过来自父范围的小添加/减去来获得并且作为独立范围表条目存在。此技术使得任何级别的嵌套应能够在计算设备的范围表中具有它自己的范围表条目,从而去除当从虚拟存储器空间(无论是否虚拟化存储器空间都被嵌套)转换为系统地址空间时的嵌套虚拟化的开销。存储器系统还使得能实现完全虚拟化系统地址空间。这是硬件驱动的地址空间布局随机化,当前由操作系统在软件中处理的特征。这添加到设备安全级别并防止未经授权的存储器存取。机制要求对范围表的访问本身可被虚拟化。因为它们很少被写入,就像页面表一样(因为mnc处理存储器分页),所以如从上下文内观察的范围表对实际的系统地址映射一无所知。然而,从父范围的角度(可传递)来看,他们看到地址,但是再次它仅相对于它们自己的基址,其再次是未知的。遵循此逻辑到底,并且还考虑mnc行为,变得清楚的是mnc具有本身虚拟化整个系统地址的能力,从而允许任意重新布置,即用于碎片整理。这也表明系统地址实际上只是概念上的分配,以类似于当前虚拟存储器过度提交方案的方式为懒惰的。最后,在将此方案应用于其逻辑端后,从不需要遍历范围表,因为它们实际上总是保持正确值,并且mnc可维护偏移以将范围表视图呈现给来宾。在正常操作(做转换)中,它什么也不做。另外,mnc可容易地知道什么范围本身是范围表,从而进一步支持此方案的可能性。

尽管已在本文中参考附图详细地描述了本发明的说明性实施方式,然而应当理解的是,本发明不限于那些精确的实施方式,并且在不脱离如由所附权利要求所限定的本发明的范围和精神的情况下,可通过本领域的技术人员在其中实现各种改变和修改。

应领会的是,上述设备、系统和方法是通过实施例而不是通过限制来阐述的。在缺少相反的显式指示情况下,可以在不脱离本公开的范围的情况下对所公开的步骤进行修改、补充、省略和/或重新排序。许多变化、添加、省略和其他修改对于本领域的普通技术人员而言将是显而易见的。另外,除非明确地要求特定次序或者另外从上下文中清楚,否则以上描述和附图中的方法步骤的次序或呈现不旨在要求执行所叙述的步骤的这种次序。

除非明确地提供了不同的含义或者另外从上下文中清楚,否则本文描述的实施方案的方法步骤旨在包括与以下权利要求的专利性一致的使这样的方法步骤被执行的任何适合的方法。

应该进一步领会的是,以上方法作为实施例被提供。在缺少相反的显式指示情况下,可以在不脱离本公开的范围的情况下对所公开的步骤进行修改、补充、省略和/或重新排序。

应领会的是,上述方法和系统是通过实施例而不是通过限制来阐述的。许多变化、添加、省略和其他修改对于本领域的普通技术人员而言将是显而易见的。另外,除非明确地要求特定次序或者从上下文中清楚,否则以上描述和附图中的方法步骤的次序或表示不旨在要求执行所叙述的步骤的次序。因此,虽然已示出并描述了特定实施方式,但是对于本领域的技术人员而言将显而易见的是,可以在不脱离本公开的范围的情况下做出形式和细节上的各种改变和修改,并且形式和细节上的各种改变和修改旨在形成如由以下权利要求所限定的本公开的一部分,以下权利要求将在法律所允许的最广泛意义上进行解释。

已在本文中详细地描述的各种代表性实施方式已通过实施例而不是通过限制来呈现。应理解的是,可以在所描述的实施方式的形式和细节上做出各种改变,从而产生保持在所附权利要求的范围内的等同实施方式。

因此,在以下编号的项目中陈述所公开的实施方式的一些特征:

1.一种数据处理网络,包括:可经由系统地址空间寻址的设备的网络,所述设备的网络包括被配置为在虚拟地址空间中执行应用的计算设备;虚拟到系统地址转换电路,所述虚拟到系统地址转换电路被耦合到所述计算设备并且被配置为将所述虚拟地址空间中的虚拟地址转换为所述系统地址空间中的系统地址;以及存储器节点控制器,所述存储器节点控制器包括:到数据资源的第一接口,所述数据资源可经由物理地址空间寻址;到所述计算设备的第二接口;以及系统到物理地址转换电路,所述系统到物理地址转换电路被配置为将所述系统地址空间中的系统地址转换为所述数据资源的物理地址空间中的对应的物理地址。

2.根据项目1所述的数据处理网络,进一步包括存储器,其中所述虚拟到系统地址转换电路被配置为访问存储在所述存储器中的虚拟到系统地址映射。

3.根据项目2所述的数据处理网络,其中所述系统地址空间包括多个范围,每个范围具有偏移地址,其中所述虚拟到系统映射包括范围表,并且其中所述虚拟到系统地址转换电路包括范围表缓冲器,所述范围表缓冲器被配置为访问所述范围表并且检索范围表条目,所述范围表条目包括范围的偏移地址以及对应的虚拟地址基址和所述范围的程度的指标。

4.根据项目3所述的数据处理网络,进一步包括分配电路,所述分配电路响应于来自所述计算设备的存储器分配请求以向所述虚拟到系统地址转换电路提供偏移地址,其中所述范围表取决于所述偏移地址被更新。

5.根据项目1所述的数据处理网络,进一步包括:物理设备配置设置(pdcs)存储器,所述pdcs存储器存储指示所述数据处理网络的设备到所述系统地址空间中的映射的信息。

6.根据项目1所述的数据处理网络,进一步包括数据交付高速缓存(ddc),其中系统存储器请求被同时地发送到所述ddc和所述mnc,其中当所请求的数据已被所述mnc推送到所述ddc时系统存储器请求被所述ddc服务,并且其中所述系统存储器请求在其他情况下被所述mnc服务。

7.一种存储器存取的方法包括:请求由数据处理网络的计算设备对第一虚拟地址进行访问,其中所述数据处理网络的设备在系统地址空间中是可寻址的;将所述第一虚拟地址转换为所述系统地址空间中的第一系统地址;向所述数据处理网络的存储器节点控制器发送要访问所述第一系统地址的请求;由所述存储器节点控制器将所述第一系统地址转换为所述数据处理系统的数据资源中的第一物理地址;以及访问所述第一物理地址处的所述数据处理系统的数据资源。

8.根据项目7所述的方法,其中:所述第一虚拟地址是虚拟地址的范围的基地址;所述第一系统地址是系统地址的范围内的偏移;以及

将所述第一虚拟地址转换为所述系统地址空间中的所述第一系统地址包括访问范围表以确定虚拟地址的范围与系统地址的范围之间的映射并且将所述映射应用于所述第一虚拟地址。

9.根据项目8所述的方法,进一步包括:响应于由所述计算设备进行的存储器分配请求而分配系统地址的范围并更新所述范围表。

10.根据项目8所述的方法,其中由所述存储器节点控制器将所述第一系统地址转换为所述第一物理地址包括访问存储在存储器中的系统地址转换表,所述方法还包括响应于由所述计算设备对所述第一系统地址范围内的地址的首次写入而更新所述系统地址转换表。

11.一种用于在数据处理网络中向计算设备分配存储器的方法,所述方法包括:向所述计算设备提供系统地址空间中的系统地址的范围的指标;更新虚拟到系统地址映射以将所述计算设备的虚拟地址空间中的虚拟地址的范围映射到所指示的系统地址的范围;以及更新系统到物理地址映射以将所指示的系统地址的范围内的系统地址映射到存储设备中的物理地址,其中所述数据处理网络包括可在所述系统地址空间中寻址的多个设备。

12.根据项目11所述的方法,其中仅在所述计算设备首先写入到所述系统地址之后才执行更新系统到物理地址映射以将所指示的系统地址的范围内的所述系统地址映射到所述存储设备中的物理地址。

13.根据项目11所述的方法,其中响应于来自在所述计算设备上执行的进程或线程的存储器分配请求而执行将所述系统地址空间中的系统地址的范围的指标提供给所述系统设备。

14.根据项目13所述的方法,其中将所述系统地址空间中的系统地址的范围的指标提供给所述计算设备由所述数据处理网络的操作系统执行并且视所请求的存储器的大小而定。

15.根据项目13所述的方法,其中所指示的系统地址的范围由所述数据处理网络的操作系统从系统地址的全局池中选择。

16.根据项目13所述的方法,其中所指示的系统地址的范围被从分配给在所述计算设备上执行的所述进程或线程的系统地址的池中选择。

17.根据项目13所述的方法,其中所指示的系统地址的范围被从分配给所述数据处理网络的存储器节点控制器的系统地址中选择。

18.根据项目11所述的方法,其中更新所述虚拟到系统地址映射以将虚拟地址的范围映射到所指示的系统地址的范围包括更新存储在所述数据处理网络的存储器中的范围表中的条目。

19.一种存储器存取的方法包括:请求由数据处理网络的计算设备对第一虚拟地址进行访问,其中所述数据处理网络的设备在系统地址空间中是可寻址的;将所述第一虚拟地址转换为所述系统地址空间中的第一系统地址;向所述数据处理网络的存储器节点控制器并且向所述数据处理系统的数据交付高速缓存发送要访问所述第一系统地址的请求;当所述第一系统地址处的数据的副本被存储在所述数据交付高速缓存中时,访问所述数据交付高速缓存以访问所述第一物理地址处的数据的副本,并且当所述第一系统地址处的数据的副本未被存储在所述数据交付高速缓存中时:由所述存储器节点控制器将所述第一系统地址转换为所述数据处理系统的数据资源中的第一物理地址;以及访问所述第一物理地址处的所述数据处理系统的数据资源。

20.根据项目19所述的方法,进一步包括:由所述存储器节点控制器监视对物理存储器的块的访问;基于成本函数来确定所述物理存储器的块何时被频繁地使用;以及所述存储器节点控制器将数据从所述物理存储器的块推送到所述数据交付高速缓存。

21.根据项目20所述的方法,进一步包括:所述存储器节点控制在第一队列中使访问请求排队,该访问请求是在所述存储器节点控制器正在将数据从所述物理存储器的块推送到所述数据交付高速缓存的同时接收到的;一旦来自所述物理存储器的块的所有数据已被推送到所述数据交付高速缓存,所述存储器节点控制器就将经排队的访问请求转发到所述数据交付高速缓存;所述数据交付高速缓存在第二队列中使访问请求排队,该访问请求是在来自所述物理存储器的块的所有数据已被推送到所述数据交付高速缓存之后接收到的;所述数据交付高速缓存合并所述第一队列和第二队列中的请求;以及所述数据交付高速缓存为经合并的第一队列和第二队列中的请求服务。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1